├── .eslintignore ├── .eslintrc ├── .gitignore ├── .npmrc ├── BuildCloudUI ├── package-lock.json └── package.json ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── assets ├── control.png ├── mind.png └── platform.png ├── config ├── eslint.json ├── jsconfig.json ├── npmrc.txt ├── vue.config.js ├── vusion.config.js ├── webpack-dll.js ├── webpack-ui.js ├── webpack-umd.js └── webpack.dev-server.js ├── dll ├── vendorDll-dev.js ├── vendorDll.dev.manifest.json ├── vendorDll.efc688b5d04fff2fb9cd.js └── vendorDll.manifest.json ├── jsconfig.json ├── lib ├── README.md └── cloud-ui-internal │ ├── index.js │ └── src │ ├── assets │ ├── images │ │ └── nodata.png │ └── svg │ │ ├── angle-left.svg │ │ ├── chart-refresh.svg │ │ ├── chart-zoom.svg │ │ └── tb-del.svg │ ├── base │ ├── base.css │ └── global.css │ ├── filters.js │ ├── index.js │ ├── mixins.js │ ├── u-addon.vue │ ├── README.md │ ├── assets │ │ ├── detail.svg │ │ ├── help.svg │ │ ├── info.svg │ │ ├── readonly.svg │ │ └── readonly2.svg │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-bread.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-date-custom-picker.vue │ ├── README.md │ ├── i18n │ │ ├── en-US.json │ │ ├── index.js │ │ └── zh-CN.json │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-date-picker-monitor.vue │ ├── README.md │ ├── i18n │ │ ├── en-US.json │ │ ├── index.js │ │ └── zh-CN.json │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-desc.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-form-items.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-form-table-add-button.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-form-table-remove-button.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-form-table-tr.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-form-table.vue │ ├── README.md │ ├── i18n │ │ ├── en-US.json │ │ ├── index.js │ │ └── zh-CN.json │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-icon-input.vue │ ├── README.md │ ├── assets │ │ └── log-search.svg │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-log-time.vue │ ├── README.md │ ├── assets │ │ ├── log-change.svg │ │ └── log-time.svg │ ├── i18n │ │ ├── en-US.json │ │ ├── index.js │ │ └── zh-CN.json │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-monitor-chart-modal.vue │ ├── README.md │ ├── i18n │ │ ├── en-US.json │ │ ├── index.js │ │ └── zh-CN.json │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-monitor-chart-panel.vue │ ├── README.md │ ├── i18n │ │ ├── en-US.json │ │ ├── index.js │ │ └── zh-CN.json │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-monitor-chart.vue │ ├── README.md │ └── index.js │ ├── u-monitor-optionbar.vue │ ├── README.md │ ├── i18n │ │ ├── en-US.json │ │ ├── index.js │ │ └── zh-CN.json │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-slider-scale.vue │ ├── assets │ │ ├── minus.svg │ │ └── plus.svg │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-topo-apm-line.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-topo-apm-other.vue │ ├── README.md │ ├── assets │ │ ├── home-cache.svg │ │ ├── home-database.svg │ │ ├── home-micro.svg │ │ ├── home-nqs.svg │ │ └── memcache.svg │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-topo-apm-rabbitmq.vue │ ├── README.md │ ├── assets │ │ └── home-nqs.svg │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-topo-apm-service.vue │ ├── README.md │ ├── i18n │ │ ├── en-US.json │ │ ├── index.js │ │ └── zh-CN.json │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-topo-apm-unknow.vue │ ├── README.md │ ├── assets │ │ └── cloud-fill.svg │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-topo-line.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-topo-node.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ ├── u-topo.vue │ ├── README.md │ ├── index.html │ ├── index.js │ └── module.css │ └── utils │ ├── cache.js │ ├── directive │ ├── dis-shortcut.js │ ├── index.js │ └── textarea-auto.js │ ├── directives.js │ ├── event.js │ ├── filters │ ├── apm.js │ ├── date.js │ ├── index.js │ ├── logo.js │ ├── monitor.js │ ├── others.js │ └── unit.js │ ├── index.js │ ├── mixins │ ├── modal.js │ ├── page.js │ └── subscribe.js │ ├── storage │ └── localStorage.js │ ├── subscribe.js │ └── wrapComponent.js ├── micro-app.config.js ├── package.json ├── plugins ├── command.js ├── enhance-webpack.js ├── index.js └── lib │ └── vue-cli-service.js ├── src ├── client │ ├── assets │ │ ├── arrow-down.svg │ │ ├── bg.jpg │ │ ├── check.svg │ │ ├── delete.svg │ │ ├── download.svg │ │ ├── edge-blue.svg │ │ ├── eye.svg │ │ ├── eyeclose.svg │ │ ├── favicon_yun.ico │ │ ├── home-cache.svg │ │ ├── home-database.svg │ │ ├── home-micro.svg │ │ ├── icons │ │ │ └── svg │ │ │ │ ├── angle-bottom.svg │ │ │ │ ├── angle-down.svg │ │ │ │ ├── angle-left.svg │ │ │ │ ├── angle-right.svg │ │ │ │ ├── angle-top.svg │ │ │ │ ├── angle-up.svg │ │ │ │ ├── apm-extend.svg │ │ │ │ ├── apm-list.svg │ │ │ │ ├── apm-screenshot.svg │ │ │ │ ├── apm-small.svg │ │ │ │ ├── apm-topo.svg │ │ │ │ ├── chart-refresh.svg │ │ │ │ ├── dropdown.1.svg │ │ │ │ ├── dropdown.svg │ │ │ │ ├── expire.svg │ │ │ │ ├── goldList.svg │ │ │ │ ├── help-o.svg │ │ │ │ ├── help.svg │ │ │ │ ├── list.svg │ │ │ │ ├── list_close.svg │ │ │ │ ├── list_no_response.svg │ │ │ │ ├── list_open.svg │ │ │ │ ├── list_warn.svg │ │ │ │ ├── log-big.svg │ │ │ │ ├── log-black.svg │ │ │ │ ├── log-change.svg │ │ │ │ ├── log-end.svg │ │ │ │ ├── log-play.svg │ │ │ │ ├── log-search.svg │ │ │ │ ├── log-small.svg │ │ │ │ ├── log-time.svg │ │ │ │ ├── log-white.svg │ │ │ │ ├── more.svg │ │ │ │ ├── reset.svg │ │ │ │ ├── search.svg │ │ │ │ ├── sub-account.svg │ │ │ │ ├── tb-del.1.svg │ │ │ │ ├── tb-del.svg │ │ │ │ └── text.svg │ │ ├── images │ │ │ ├── btn_play.gif │ │ │ ├── emptylog.png │ │ │ ├── flag_high.png │ │ │ ├── flag_normal.png │ │ │ ├── log-black.png │ │ │ ├── log-white.png │ │ │ ├── ncssprite.png │ │ │ ├── nodata.png │ │ │ ├── nodata@2x.png │ │ │ ├── sprite-repoLogo50.png │ │ │ └── terminator.png │ │ ├── none.png │ │ ├── permission.svg │ │ ├── sprite-browser.png │ │ ├── swagger.svg │ │ ├── u-back.svg │ │ ├── u_back.svg │ │ ├── upgrade.png │ │ ├── user.svg │ │ └── wait.svg │ ├── base │ │ ├── date.js │ │ └── mixins │ │ │ ├── docTitle.js │ │ │ ├── index.js │ │ │ ├── inputs.js │ │ │ ├── sortList.js │ │ │ └── u-block-list.js │ ├── components │ │ ├── base │ │ │ ├── base.css │ │ │ ├── function.css │ │ │ ├── global.css │ │ │ ├── index.css │ │ │ ├── repo-logo50.css │ │ │ ├── reset.css │ │ │ └── xterm.css │ │ ├── cloud-ui │ │ │ ├── u-button.vue │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-crumb-item.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-crumb.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-navbar-item.vue │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-number-card.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-panel-group.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-panel.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-resize-table-column.vue │ │ │ │ └── index.js │ │ │ ├── u-resize-table.vue │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-sidebar-suggest-item.vue │ │ │ │ ├── assets │ │ │ │ │ ├── check.svg │ │ │ │ │ └── region.svg │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-sidebar-suggest.vue │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-spinner.vue │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ └── u-status-icon.vue │ │ │ │ ├── icons │ │ │ │ └── success.svg │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ ├── common │ │ │ ├── block-list │ │ │ │ ├── normalizeOperation.js │ │ │ │ └── u-block-list.vue │ │ │ ├── form │ │ │ │ ├── u-form-items.vue │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.js │ │ │ │ │ └── module.css │ │ │ │ ├── u-form-table-add-button.vue │ │ │ │ ├── u-form-table-remove-button.vue │ │ │ │ ├── u-form-table-tr.vue │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.js │ │ │ │ │ └── module.css │ │ │ │ ├── u-form-table.vue │ │ │ │ ├── u-multi-add.vue │ │ │ │ ├── u-password-input.vue │ │ │ │ ├── u-path-table.vue │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.js │ │ │ │ │ └── module.css │ │ │ │ ├── u-submit-button.vue │ │ │ │ └── u-validate-input.vue │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.js │ │ │ │ │ └── module.css │ │ │ ├── middle-nav.vue │ │ │ ├── modal │ │ │ │ ├── u-form-modal.vue │ │ │ │ └── u-repo-panel.vue │ │ │ ├── monitor │ │ │ │ ├── chartOptions.js │ │ │ │ ├── filters.js │ │ │ │ ├── u-monitors-enhance.vue │ │ │ │ └── u-monitors.vue │ │ │ ├── search │ │ │ │ ├── index.vue │ │ │ │ ├── readme.md │ │ │ │ ├── tag.box.vue │ │ │ │ ├── tag.default.vue │ │ │ │ ├── tag.edit.base.vue │ │ │ │ ├── tag.edit.vue │ │ │ │ ├── tag.type.vue │ │ │ │ ├── tag.vue │ │ │ │ └── util.js │ │ │ ├── table │ │ │ │ ├── u-table-cell-items.vue │ │ │ │ └── u-table-cell-mores.vue │ │ │ ├── u-alert.vue │ │ │ ├── u-back.vue │ │ │ ├── u-block-info-item.vue │ │ │ ├── u-block-info.vue │ │ │ ├── u-bread.vue │ │ │ ├── u-build-status-icon.vue │ │ │ │ ├── icons │ │ │ │ │ ├── error.svg │ │ │ │ │ ├── pause.svg │ │ │ │ │ ├── stop.svg │ │ │ │ │ ├── success.svg │ │ │ │ │ ├── waiting.svg │ │ │ │ │ └── warning.svg │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-card-info-item.vue │ │ │ ├── u-card-info.vue │ │ │ ├── u-card.vue │ │ │ │ ├── icons │ │ │ │ │ ├── cloudHost.svg │ │ │ │ │ ├── ip.svg │ │ │ │ │ ├── physicalHost.svg │ │ │ │ │ └── volume.svg │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-checkbox-card.vue │ │ │ ├── u-chips.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-code-text.vue │ │ │ ├── u-config-affinity.vue │ │ │ ├── u-config-probe.vue │ │ │ ├── u-confirm.vue │ │ │ ├── u-container-resource.vue │ │ │ ├── u-copy.vue │ │ │ ├── u-desc.vue │ │ │ ├── u-detail-operate-item.vue │ │ │ ├── u-detail-operate.vue │ │ │ ├── u-diff.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-easy-copy.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-edit-image.vue │ │ │ ├── u-foot.vue │ │ │ ├── u-head-card.vue │ │ │ ├── u-header-logo.vue │ │ │ ├── u-icon-input.vue │ │ │ ├── u-icons.vue │ │ │ │ ├── icons │ │ │ │ │ ├── DNS.svg │ │ │ │ │ ├── agent.svg │ │ │ │ │ ├── alarm.svg │ │ │ │ │ ├── alarmRule.svg │ │ │ │ │ ├── alarmUser.svg │ │ │ │ │ ├── angle-down copy.svg │ │ │ │ │ ├── angle-down.svg │ │ │ │ │ ├── angle-left.svg │ │ │ │ │ ├── angle-right.svg │ │ │ │ │ ├── angle-up copy.svg │ │ │ │ │ ├── angle-up.svg │ │ │ │ │ ├── apm-extend.svg │ │ │ │ │ ├── apm-list.svg │ │ │ │ │ ├── apm-screenshot.svg │ │ │ │ │ ├── apm-small.svg │ │ │ │ │ ├── apm-topo.svg │ │ │ │ │ ├── archive.svg │ │ │ │ │ ├── audit.svg │ │ │ │ │ ├── cache.svg │ │ │ │ │ ├── certificate.svg │ │ │ │ │ ├── chain.svg │ │ │ │ │ ├── chart-refresh.svg │ │ │ │ │ ├── chart-zoom.svg │ │ │ │ │ ├── check.svg │ │ │ │ │ ├── cicd-version.svg │ │ │ │ │ ├── close-circle.svg │ │ │ │ │ ├── close-small.svg │ │ │ │ │ ├── close.svg │ │ │ │ │ ├── cluster.svg │ │ │ │ │ ├── collection.svg │ │ │ │ │ ├── combcloud.svg │ │ │ │ │ ├── config.svg │ │ │ │ │ ├── configManage.svg │ │ │ │ │ ├── context.svg │ │ │ │ │ ├── dashboard.svg │ │ │ │ │ ├── database.svg │ │ │ │ │ ├── deploy.svg │ │ │ │ │ ├── deployTemplate.svg │ │ │ │ │ ├── detail.svg │ │ │ │ │ ├── doc.svg │ │ │ │ │ ├── docker.svg │ │ │ │ │ ├── dockerfileManage.svg │ │ │ │ │ ├── earphone.svg │ │ │ │ │ ├── eip.svg │ │ │ │ │ ├── envManage.svg │ │ │ │ │ ├── envoy.svg │ │ │ │ │ ├── expire.svg │ │ │ │ │ ├── export.svg │ │ │ │ │ ├── file.svg │ │ │ │ │ ├── flowColor.svg │ │ │ │ │ ├── form.svg │ │ │ │ │ ├── globalconfig.svg │ │ │ │ │ ├── guide.svg │ │ │ │ │ ├── hdm.svg │ │ │ │ │ ├── help.svg │ │ │ │ │ ├── home-cache-thin.svg │ │ │ │ │ ├── home-deployment-thin.svg │ │ │ │ │ ├── home-kafka-thin.svg │ │ │ │ │ ├── home-micro.svg │ │ │ │ │ ├── home-mongodb-thin.svg │ │ │ │ │ ├── home-monitoring-thin.svg │ │ │ │ │ ├── home-nqs-thin.svg │ │ │ │ │ ├── home-statefulWorkload-thin.svg │ │ │ │ │ ├── home-storage-thin.svg │ │ │ │ │ ├── home-volume-thin.svg │ │ │ │ │ ├── home-vpc-thin.svg │ │ │ │ │ ├── home-win-thin.svg │ │ │ │ │ ├── ic_exportlog.svg │ │ │ │ │ ├── ic_likes.svg │ │ │ │ │ ├── ic_quicksearch.svg │ │ │ │ │ ├── ic_savesearch.svg │ │ │ │ │ ├── info copy.svg │ │ │ │ │ ├── info.svg │ │ │ │ │ ├── json.svg │ │ │ │ │ ├── json2.svg │ │ │ │ │ ├── k8s.svg │ │ │ │ │ ├── line.svg │ │ │ │ │ ├── lineTemplate.svg │ │ │ │ │ ├── list-drag.svg │ │ │ │ │ ├── list.svg │ │ │ │ │ ├── list_close.svg │ │ │ │ │ ├── list_move.svg │ │ │ │ │ ├── list_no_response.svg │ │ │ │ │ ├── list_open.svg │ │ │ │ │ ├── list_warn.svg │ │ │ │ │ ├── loadbalance.svg │ │ │ │ │ ├── lock.svg │ │ │ │ │ ├── log copy.svg │ │ │ │ │ ├── log-big.svg │ │ │ │ │ ├── log-black.svg │ │ │ │ │ ├── log-change.svg │ │ │ │ │ ├── log-end.svg │ │ │ │ │ ├── log-more.svg │ │ │ │ │ ├── log-play.svg │ │ │ │ │ ├── log-search.svg │ │ │ │ │ ├── log-small.svg │ │ │ │ │ ├── log-time.svg │ │ │ │ │ ├── log-white.svg │ │ │ │ │ ├── log.svg │ │ │ │ │ ├── log2.svg │ │ │ │ │ ├── logmanage.svg │ │ │ │ │ ├── logsearch5.svg │ │ │ │ │ ├── logseer.svg │ │ │ │ │ ├── logstash.svg │ │ │ │ │ ├── manage.svg │ │ │ │ │ ├── member.svg │ │ │ │ │ ├── menu.svg │ │ │ │ │ ├── minus.svg │ │ │ │ │ ├── monitor.svg │ │ │ │ │ ├── monitor2.svg │ │ │ │ │ ├── more2.svg │ │ │ │ │ ├── ncs-schedule.svg │ │ │ │ │ ├── ncs │ │ │ │ │ │ ├── ceph.svg │ │ │ │ │ │ ├── cloud-shell.svg │ │ │ │ │ │ ├── container.svg │ │ │ │ │ │ ├── external-link-alt-solid.svg │ │ │ │ │ │ ├── global.svg │ │ │ │ │ │ ├── guide.svg │ │ │ │ │ │ ├── helm.svg │ │ │ │ │ │ ├── initcontainer.svg │ │ │ │ │ │ ├── minus-solid.svg │ │ │ │ │ │ ├── ncs.svg │ │ │ │ │ │ ├── nodePool.svg │ │ │ │ │ │ ├── pdb.svg │ │ │ │ │ │ ├── repo-manage.svg │ │ │ │ │ │ ├── server-finder.svg │ │ │ │ │ │ ├── sshkey.svg │ │ │ │ │ │ └── yaml.svg │ │ │ │ │ ├── nec-unused.svg │ │ │ │ │ ├── nec.svg │ │ │ │ │ ├── nes.svg │ │ │ │ │ ├── nos-angle-right.svg │ │ │ │ │ ├── nos-bucket.svg │ │ │ │ │ ├── nos-event.svg │ │ │ │ │ ├── nos-filemode.svg │ │ │ │ │ ├── nos-mode.svg │ │ │ │ │ ├── nos-resource.svg │ │ │ │ │ ├── nos-sskey.svg │ │ │ │ │ ├── nos-sub.svg │ │ │ │ │ ├── nos-yidun.svg │ │ │ │ │ ├── nos.svg │ │ │ │ │ ├── nqs-plugin.svg │ │ │ │ │ ├── nsf-config.svg │ │ │ │ │ ├── nsf-govern.svg │ │ │ │ │ ├── nsf-instance.svg │ │ │ │ │ ├── nsf-menu.svg │ │ │ │ │ ├── nsf-overview.svg │ │ │ │ │ ├── ops.svg │ │ │ │ │ ├── outerAuth.svg │ │ │ │ │ ├── overview.svg │ │ │ │ │ ├── plugin.svg │ │ │ │ │ ├── plus.svg │ │ │ │ │ ├── probe.svg │ │ │ │ │ ├── project.svg │ │ │ │ │ ├── readonly.svg │ │ │ │ │ ├── readonly2.svg │ │ │ │ │ ├── refresh.svg │ │ │ │ │ ├── repo.svg │ │ │ │ │ ├── role.svg │ │ │ │ │ ├── search.svg │ │ │ │ │ ├── secret-public.svg │ │ │ │ │ ├── service.svg │ │ │ │ │ ├── serviceinstance.svg │ │ │ │ │ ├── servicemanage.svg │ │ │ │ │ ├── servicerepo.svg │ │ │ │ │ ├── servicetopo.svg │ │ │ │ │ ├── setting.svg │ │ │ │ │ ├── sidenav │ │ │ │ │ │ ├── apm.svg │ │ │ │ │ │ ├── cicd.svg │ │ │ │ │ │ ├── gaojing.svg │ │ │ │ │ │ ├── goapi.svg │ │ │ │ │ │ ├── gportal.svg │ │ │ │ │ │ ├── gtxs.svg │ │ │ │ │ │ ├── ncs.svg │ │ │ │ │ │ ├── nsf.svg │ │ │ │ │ │ ├── outerAuth.svg │ │ │ │ │ │ └── overview.svg │ │ │ │ │ ├── speaker.svg │ │ │ │ │ ├── star.svg │ │ │ │ │ ├── switch.svg │ │ │ │ │ ├── targetRepo.svg │ │ │ │ │ ├── tb-del.svg │ │ │ │ │ ├── tenant.svg │ │ │ │ │ ├── tenantSetting.svg │ │ │ │ │ ├── text.svg │ │ │ │ │ ├── tutorial.svg │ │ │ │ │ ├── userguide.svg │ │ │ │ │ ├── video.svg │ │ │ │ │ ├── volume.svg │ │ │ │ │ ├── warn.svg │ │ │ │ │ ├── workload.svg │ │ │ │ │ └── write.svg │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-input-search.vue │ │ │ ├── u-inputs-affinity-rule.vue │ │ │ ├── u-inputs-dir.vue │ │ │ ├── u-inputs-env.vue │ │ │ ├── u-inputs-header.vue │ │ │ ├── u-inputs-label.vue │ │ │ ├── u-inputs-volume.vue │ │ │ ├── u-labels.vue │ │ │ ├── u-meta-info.vue │ │ │ ├── u-monitor-chart.vue │ │ │ │ ├── index.js │ │ │ │ └── services │ │ │ │ │ └── apm.js │ │ │ ├── u-multi-filter.vue │ │ │ │ ├── base │ │ │ │ │ └── utils │ │ │ │ │ │ └── index.js │ │ │ │ ├── i18n │ │ │ │ │ ├── en-US.json │ │ │ │ │ ├── index.js │ │ │ │ │ └── zh-CN.json │ │ │ │ ├── icons │ │ │ │ │ ├── close.svg │ │ │ │ │ └── keyboard-arrow-down.svg │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-note.vue │ │ │ ├── u-notice.vue │ │ │ ├── u-page.vue │ │ │ ├── u-piece.vue │ │ │ ├── u-popper-select.vue │ │ │ ├── u-quick-create.vue │ │ │ ├── u-refresh.vue │ │ │ ├── u-section.vue │ │ │ ├── u-select-ex.vue │ │ │ ├── u-select-image.vue │ │ │ ├── u-select-with-empty.vue │ │ │ ├── u-sidebar-group.vue │ │ │ │ ├── icons │ │ │ │ │ ├── alarm.svg │ │ │ │ │ ├── nlb.svg │ │ │ │ │ ├── overview.svg │ │ │ │ │ ├── pool.svg │ │ │ │ │ ├── usage.svg │ │ │ │ │ ├── user.svg │ │ │ │ │ └── virtual.svg │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-sidebar-header.vue │ │ │ ├── u-sidebar-item.vue │ │ │ │ ├── icons │ │ │ │ │ ├── alarm-selected.svg │ │ │ │ │ ├── alarm.svg │ │ │ │ │ ├── overview.svg │ │ │ │ │ ├── rds-selected.svg │ │ │ │ │ ├── rds.svg │ │ │ │ │ ├── respoll.svg │ │ │ │ │ ├── resused-selected.svg │ │ │ │ │ ├── resused.svg │ │ │ │ │ ├── usage-selected.svg │ │ │ │ │ ├── usage.svg │ │ │ │ │ ├── user-selected.svg │ │ │ │ │ ├── user.svg │ │ │ │ │ ├── win-selected.svg │ │ │ │ │ └── win.svg │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-sidebar.vue │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-sidelist.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-sidenav.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-slide-modal.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-sort-radio.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-sort-radios.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-step-process.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-table-column.vue │ │ │ │ └── index.js │ │ │ ├── u-table-view-cell.vue │ │ │ │ └── index.js │ │ │ ├── u-table-view.vue │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-textarea-config.vue │ │ │ ├── u-tip.vue │ │ │ ├── u-toast.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-tutorial-modal.vue │ │ │ ├── u-tutorial-popup.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-unauth.vue │ │ │ │ ├── assets │ │ │ │ │ ├── 404-3.png │ │ │ │ │ └── block@2x.png │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ ├── u-user-info-modal.vue │ │ │ ├── u-yaml-diff.vue │ │ │ ├── x-editor.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ ├── lang.js │ │ │ │ ├── module.css │ │ │ │ └── theme.js │ │ │ ├── x-term-group.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ │ └── x-term.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── module.css │ │ ├── extends │ │ │ └── u-base-list-select.vue │ │ ├── index.js │ │ └── special │ │ │ ├── u-view-yaml.vue │ │ │ └── weather-icon.vue │ │ │ ├── icons │ │ │ ├── cloudy.svg │ │ │ ├── rain.svg │ │ │ ├── storm.svg │ │ │ ├── sun.svg │ │ │ └── sunny.svg │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ └── module.css │ ├── directives │ │ └── index.js │ ├── filters │ │ ├── filter.js │ │ └── index.js │ ├── services │ │ ├── api.js │ │ ├── cicd.js │ │ ├── gtxs.js │ │ ├── license.js │ │ ├── ncs.js │ │ ├── nsf.js │ │ ├── platform.js │ │ ├── request.js │ │ ├── service.js │ │ └── services │ │ │ ├── cluster.js │ │ │ ├── interceptor.js │ │ │ ├── k8s-resource.js │ │ │ ├── namespace.js │ │ │ ├── service.js │ │ │ └── user.js │ ├── static │ │ ├── favicon_yun.ico │ │ ├── hostMonitor-example.csv │ │ ├── jianhang.ico │ │ └── yunjia.ico │ ├── utils │ │ ├── authMap │ │ │ ├── index.js │ │ │ ├── ncs.js │ │ │ └── platform.js │ │ ├── customization.js │ │ ├── handleCookie.js │ │ ├── index.js │ │ ├── license │ │ │ └── index.js │ │ ├── message.js │ │ ├── router.js │ │ ├── validator.js │ │ └── wrapComponents.js │ └── views │ │ ├── apm │ │ └── services │ │ │ ├── agent.js │ │ │ ├── apis │ │ │ ├── agent.js │ │ │ ├── apm.js │ │ │ ├── chain.js │ │ │ ├── db.js │ │ │ ├── event.js │ │ │ ├── monitor.js │ │ │ ├── rule.js │ │ │ ├── service.js │ │ │ ├── setting.js │ │ │ └── trace.js │ │ │ ├── base.js │ │ │ ├── chain.js │ │ │ ├── db.js │ │ │ ├── event.js │ │ │ ├── index.js │ │ │ ├── monitor.js │ │ │ ├── service.js │ │ │ ├── setting.js │ │ │ └── trace.js │ │ ├── ncs │ │ ├── services │ │ │ ├── PDB.js │ │ │ ├── admin │ │ │ │ ├── calico.js │ │ │ │ ├── index.js │ │ │ │ ├── ingressdomainsuffix.js │ │ │ │ ├── kubeconfig.js │ │ │ │ └── quota.js │ │ │ ├── ceph.js │ │ │ ├── cluster.js │ │ │ ├── clusterAbout │ │ │ │ ├── cicd.js │ │ │ │ ├── cluster.js │ │ │ │ ├── egress.js │ │ │ │ ├── index.js │ │ │ │ ├── quota.js │ │ │ │ └── securitygroup.js │ │ │ ├── combine │ │ │ │ └── index.js │ │ │ ├── configmap.js │ │ │ ├── deployment.js │ │ │ ├── event.js │ │ │ ├── helm │ │ │ │ ├── chart.js │ │ │ │ ├── index.js │ │ │ │ ├── log.js │ │ │ │ ├── member.js │ │ │ │ ├── release.js │ │ │ │ └── version.js │ │ │ ├── index.js │ │ │ ├── ingress.js │ │ │ ├── ingressController.js │ │ │ ├── monitor.js │ │ │ ├── namespace.js │ │ │ ├── node.js │ │ │ ├── pod.js │ │ │ ├── pv.js │ │ │ ├── pvc.js │ │ │ ├── repo │ │ │ │ ├── config.js │ │ │ │ ├── hbProject.js │ │ │ │ ├── index.js │ │ │ │ ├── job.js │ │ │ │ ├── member.js │ │ │ │ ├── policy.js │ │ │ │ ├── repository.js │ │ │ │ ├── scan.js │ │ │ │ ├── tag.js │ │ │ │ └── target.js │ │ │ ├── secret.js │ │ │ ├── service.js │ │ │ ├── shell.js │ │ │ ├── statefulset.js │ │ │ ├── storageClass.js │ │ │ ├── volume.js │ │ │ └── workload │ │ │ │ ├── HPA.js │ │ │ │ ├── index.js │ │ │ │ └── log.js │ │ └── utils │ │ │ ├── filters.js │ │ │ ├── format.js │ │ │ ├── index.js │ │ │ ├── listMixins.js │ │ │ ├── map.js │ │ │ └── rules.js │ │ └── workloads │ │ └── deployments │ │ └── index.vue └── kubecube │ ├── assets │ ├── chart-refresh.svg │ ├── chart-zoom.svg │ ├── close.svg │ ├── delete.svg │ ├── edit.svg │ ├── empty.png │ ├── eye.svg │ ├── eyeclose.svg │ ├── log-black.svg │ ├── log-white.svg │ └── question.svg │ ├── component │ ├── common │ │ ├── kube-block-list │ │ │ └── index.vue │ │ ├── kube-chart │ │ │ ├── template │ │ │ │ ├── chart.vue │ │ │ │ ├── float-content.vue │ │ │ │ ├── index.js │ │ │ │ ├── jchart.vue │ │ │ │ ├── legend-content.vue │ │ │ │ ├── legend-table-chart.js │ │ │ │ ├── legend-table-chart.vue │ │ │ │ └── util.js │ │ │ └── wrapper │ │ │ │ ├── index.vue │ │ │ │ └── modal.vue │ │ ├── kube-checkbox-board │ │ │ └── kube-checkbox-board.vue │ │ ├── kube-checkbox-tree │ │ │ ├── kube-checkbox-tree.vue │ │ │ ├── kube-tree.vue │ │ │ └── utils.js │ │ ├── kube-data-board │ │ │ └── kube-data-board.vue │ │ ├── kube-data-table │ │ │ └── kube-data-table.vue │ │ ├── kube-data-visibility │ │ │ └── style.css │ │ ├── kube-data │ │ │ └── data-mixin.js │ │ ├── kube-dynamic-block-layout │ │ │ ├── index.vue │ │ │ └── row.vue │ │ ├── kube-dynamic-block.vue │ │ ├── kube-dynamic-labels.vue │ │ ├── kube-dynamic-table-layout │ │ │ ├── column.vue │ │ │ ├── index.vue │ │ │ ├── row.vue │ │ │ ├── table.css │ │ │ ├── tb-del.png │ │ │ └── tb-del.svg │ │ ├── kube-form-tab │ │ │ ├── close.icon.svg │ │ │ └── index.vue │ │ ├── kube-form │ │ │ ├── kube-form-item.vue │ │ │ └── kube-form.vue │ │ ├── kube-monaco-editor.vue │ │ ├── kube-search │ │ │ └── kube-input-search.vue │ │ ├── kube-table │ │ │ ├── cell-tag.vue │ │ │ ├── index.vue │ │ │ ├── normalComp.vue │ │ │ ├── resize-bar.vue │ │ │ ├── row-expand.js │ │ │ ├── row-group.js │ │ │ ├── row-selection.vue │ │ │ ├── row.js │ │ │ ├── th-icon.vue │ │ │ ├── th-normal.vue │ │ │ ├── th-selection.vue │ │ │ └── th.js │ │ ├── kube-timer │ │ │ ├── calendar.vue │ │ │ ├── datetime.vue │ │ │ ├── index.vue │ │ │ └── plain-timer.vue │ │ ├── slot-wrapper.js │ │ ├── x-request.vue │ │ └── x-scope.vue │ └── global │ │ ├── common │ │ ├── kube-project-select.vue │ │ ├── kube-role-select.vue │ │ ├── kube-tenant-select-multiple.vue │ │ ├── kube-tenant-select.vue │ │ └── kube-yaml-dialog.vue │ │ ├── form-common │ │ ├── kube-deployment-input.vue │ │ └── kube-name-input.vue │ │ ├── global-error-modal │ │ └── index.vue │ │ ├── header │ │ ├── preconfirm.mixin.js │ │ ├── u-app-cluster-select.vue │ │ ├── u-app-cluster-single.vue │ │ ├── u-app-namespace-select.vue │ │ ├── u-app-project-select.vue │ │ └── u-app-tenant-select.vue │ │ ├── icon │ │ ├── logo.png │ │ ├── logo.svg │ │ ├── logout.svg │ │ ├── portrait.svg │ │ ├── project.svg │ │ └── tenant.svg │ │ ├── k8s │ │ ├── label-editor.vue │ │ └── plain-label-editor.vue │ │ ├── u-app-bread-cumbs.vue │ │ ├── u-app-confirm-dialog.vue │ │ ├── u-app-header.vue │ │ ├── u-app-nav.vue │ │ ├── u-app-snackbar.vue │ │ └── xterm │ │ ├── kube-terminal.vue │ │ ├── terminator.png │ │ └── utils.js │ ├── directives │ ├── index.js │ └── tip │ │ ├── README.md │ │ ├── index.js │ │ └── index.scss │ ├── elComponent │ ├── checkbox-card │ │ └── index.vue │ ├── confirmModal.vue │ ├── date-custom-picker.vue │ ├── dynamic-block │ │ └── index.vue │ ├── dynamic-card │ │ └── index.vue │ ├── dynamic-tab.vue │ │ └── index.vue │ ├── el-link.vue │ ├── enhance-qz-editor │ │ └── index.vue │ ├── global │ │ ├── project-select.vue │ │ └── tenant-select.vue │ ├── head-card.vue │ ├── inputSearch │ │ └── index.vue │ ├── kubeEditor │ │ ├── defaultOptions.js │ │ └── index.vue │ ├── label-editor.vue │ ├── operate-list │ │ ├── index.vue │ │ ├── operate-button-option.vue │ │ └── renderVnode.vue │ ├── qz-editor │ │ ├── QzEditor.vue │ │ ├── defaultOptions.js │ │ └── index.js │ ├── qz-link-group │ │ ├── README.md │ │ ├── index.js │ │ ├── src │ │ │ ├── qz-link-group.vue │ │ │ ├── qz-link-more.vue │ │ │ └── qz-link-simple.vue │ │ └── test │ │ │ └── Demo.vue │ ├── qz-terminal │ │ ├── README.md │ │ ├── index.js │ │ ├── src │ │ │ ├── assets │ │ │ │ ├── images │ │ │ │ │ └── terminator.png │ │ │ │ └── svg │ │ │ │ │ ├── align-justify.svg │ │ │ │ │ ├── external-link-alt-solid.svg │ │ │ │ │ ├── times-solid.svg │ │ │ │ │ ├── window-maximize.svg │ │ │ │ │ ├── window-minimize.svg │ │ │ │ │ └── window-restore.svg │ │ │ └── qz-terminal.vue │ │ └── test │ │ │ └── Demo.vue │ ├── status-icon.vue │ ├── tagList.vue │ └── termModal │ │ ├── index.vue │ │ └── utils.js │ ├── index.js │ ├── index.vue │ ├── k8s-resources │ ├── alarmmanagerconfigspec │ │ ├── global.js │ │ └── index.js │ ├── base.js │ ├── base │ │ ├── common.js │ │ ├── config.js │ │ ├── utils.js │ │ └── workload.js │ ├── configmap │ │ └── index.js │ ├── container │ │ ├── index.js │ │ └── status.js │ ├── crd │ │ └── index.js │ ├── cronjob │ │ ├── index.js │ │ ├── spec.js │ │ └── status.js │ ├── cubeResourceQuota │ │ └── index.js │ ├── daemonsets │ │ ├── index.js │ │ ├── spec.js │ │ └── status.js │ ├── deployment │ │ ├── index.js │ │ ├── spec.js │ │ └── status.js │ ├── event │ │ └── index.js │ ├── ingress │ │ ├── index.js │ │ ├── spec.js │ │ └── status.js │ ├── job │ │ ├── index.js │ │ ├── spec.js │ │ └── status.js │ ├── label-selector.js │ ├── logconfigs-new │ │ └── index.js │ ├── logconfigs │ │ └── index.js │ ├── metadata.js │ ├── monitor │ │ ├── index.js │ │ ├── panel │ │ │ └── index.js │ │ ├── spec.js │ │ └── utils.js │ ├── networkPolicy │ │ └── index.js │ ├── node │ │ └── index.js │ ├── persistentvolumeclaim │ │ ├── index.js │ │ ├── spec.js │ │ └── status.js │ ├── persistentvolumes │ │ ├── index.js │ │ ├── spec.js │ │ └── status.js │ ├── pod │ │ ├── affinity.js │ │ ├── index.js │ │ ├── node-affinity.js │ │ ├── pod-affinity.js │ │ ├── pod-spec.js │ │ ├── pod-template.js │ │ └── toleration.js │ ├── prometheusRule │ │ ├── global.js │ │ └── index.js │ ├── resourceQuota │ │ └── index.js │ ├── role │ │ └── index.js │ ├── rolebinding │ │ └── rolebinding.js │ ├── scope │ │ ├── project.js │ │ └── tenant.js │ ├── secret │ │ └── index.js │ ├── service │ │ ├── index.js │ │ ├── spec.js │ │ └── status.js │ ├── statefulset │ │ ├── index.js │ │ ├── spec.js │ │ └── status.js │ ├── storageclass │ │ └── index.js │ └── subnamespace │ │ └── index.js │ ├── mixins │ ├── functional.js │ ├── index.js │ ├── pagenation │ │ └── index.js │ ├── pipe │ │ ├── kube-pipe.vue │ │ ├── kube-valve.vue │ │ ├── pipe.js │ │ ├── pipe.mixin.js │ │ └── valve.mixin.js │ └── validators.js │ ├── plugins │ ├── kubecube.js │ ├── validators.js │ ├── vee-validate.js │ └── vue-meta.js │ ├── router │ ├── control-namespace.js │ ├── control.js │ ├── index.js │ ├── platform.js │ ├── router-confirm.js │ ├── user.js │ └── wrapper.js │ ├── service-combined │ └── pod-service.js │ ├── services │ ├── audit.js │ ├── cluster.js │ ├── interceptor.js │ ├── k8s-common-extend-resource.js │ ├── k8s-extend-resource.js │ ├── k8s-resource.js │ ├── logseer.js │ ├── monitor.js │ ├── namespace.js │ ├── role-binding.js │ ├── scope.js │ ├── service.js │ ├── user.js │ └── webconsole.js │ ├── store │ ├── confirm.js │ ├── feature.js │ ├── index.js │ ├── lens.js │ ├── like.js │ ├── scope.js │ ├── snackbar.js │ └── timer.js │ ├── style │ ├── global.scss │ ├── index.css │ └── theme │ │ ├── index.scss │ │ └── var.scss │ ├── utils │ ├── constance.js │ ├── functional.js │ ├── persistant.js │ └── validators.js │ └── views │ ├── circle │ └── no-right.vue │ ├── control │ ├── bootstrap │ │ └── index.vue │ ├── config │ │ ├── configmap-input.vue │ │ ├── docker-config.vue │ │ ├── edit-configmap.vue │ │ ├── edit-secret.vue │ │ ├── info.vue │ │ ├── list.vue │ │ └── opaque-input.vue │ ├── crd │ │ ├── detail.vue │ │ ├── index.vue │ │ └── list.vue │ ├── edit.js │ ├── index.vue │ ├── list.js │ ├── logseer │ │ ├── edit │ │ │ ├── components │ │ │ │ ├── match-field-input.vue │ │ │ │ ├── meta-pod-input.vue │ │ │ │ ├── multiline-input.vue │ │ │ │ ├── path-input.vue │ │ │ │ └── workload-lable-select.vue │ │ │ ├── demo.png │ │ │ └── index.vue │ │ ├── info.vue │ │ ├── lens │ │ │ ├── components │ │ │ │ ├── assets │ │ │ │ │ ├── ic_add.png │ │ │ │ │ ├── ic_add.svg │ │ │ │ │ ├── ic_add@2x.png │ │ │ │ │ ├── ic_add_hover.png │ │ │ │ │ ├── ic_add_hover.svg │ │ │ │ │ ├── ic_add_hover@2x.png │ │ │ │ │ ├── ic_cancel.png │ │ │ │ │ ├── ic_cancel@2x.png │ │ │ │ │ ├── ic_close.png │ │ │ │ │ ├── ic_close@2x.png │ │ │ │ │ ├── ic_close_hover.png │ │ │ │ │ ├── ic_close_hover@2x.png │ │ │ │ │ ├── ic_likes.svg │ │ │ │ │ ├── ic_删除.png │ │ │ │ │ ├── ic_删除@2x.png │ │ │ │ │ ├── ic_删除_hover.png │ │ │ │ │ └── ic_删除_hover@2x.png │ │ │ │ ├── download-modal.vue │ │ │ │ ├── filter-agg.vue │ │ │ │ ├── filter-condition-input.vue │ │ │ │ ├── filter-list.vue │ │ │ │ ├── filter-operators.vue │ │ │ │ ├── filter-popper.vue │ │ │ │ ├── filter-query.vue │ │ │ │ ├── filter-task.vue │ │ │ │ ├── filter-trace-query.vue │ │ │ │ ├── filter-utils.js │ │ │ │ ├── histgram-echarts.vue │ │ │ │ ├── infinite-scroll.vue │ │ │ │ ├── likes-popper.vue │ │ │ │ ├── likes-transport.vue │ │ │ │ ├── log-display-table.vue │ │ │ │ ├── log-table.vue │ │ │ │ └── stream-scroll.vue │ │ │ └── index.vue │ │ └── list.vue │ ├── monitor │ │ ├── dimensionSelect.vue │ │ └── monitor.vue │ ├── namespace.vue │ ├── observable │ │ ├── alarm-manager-config │ │ │ ├── edit-dialog.vue │ │ │ ├── list.vue │ │ │ ├── secret-key.vue │ │ │ └── secret-select.vue │ │ ├── promethus-rule-spec │ │ │ ├── alarm-extend-setting │ │ │ │ ├── constance.js │ │ │ │ ├── index.vue │ │ │ │ └── mapping.js │ │ │ ├── edit.vue │ │ │ └── list.vue │ │ └── utils.js │ ├── overview │ │ └── dashboard.vue │ ├── pvc │ │ ├── create-pvc-dialog.vue │ │ ├── detail │ │ │ └── info.vue │ │ └── list.vue │ ├── service │ │ ├── detail │ │ │ ├── external-dialog.vue │ │ │ ├── external.vue │ │ │ ├── info.vue │ │ │ └── ingress-info.vue │ │ ├── edit │ │ │ ├── component │ │ │ │ ├── chips-input.vue │ │ │ │ ├── deployment-statefulsets-input.vue │ │ │ │ ├── host-block.vue │ │ │ │ ├── host-input.vue │ │ │ │ ├── path-table.vue │ │ │ │ └── secret-select.vue │ │ │ ├── index.vue │ │ │ ├── ingress.vue │ │ │ └── ports.vue │ │ └── list.vue │ ├── workload │ │ ├── detail │ │ │ ├── dialog │ │ │ │ └── modify-replicas.vue │ │ │ ├── index.vue │ │ │ └── tabs │ │ │ │ ├── component │ │ │ │ └── log-context.vue │ │ │ │ ├── condition.vue │ │ │ │ ├── container-detail.vue │ │ │ │ ├── event.vue │ │ │ │ ├── info-pod.vue │ │ │ │ ├── info.js │ │ │ │ ├── info.vue │ │ │ │ ├── jobs.vue │ │ │ │ ├── log.vue │ │ │ │ ├── pod.vue │ │ │ │ └── test.json │ │ ├── dp │ │ │ ├── advance │ │ │ │ ├── advance-info.vue │ │ │ │ ├── affinity-config.vue │ │ │ │ ├── deploy-config.vue │ │ │ │ ├── job-config.vue │ │ │ │ ├── repo-secret-config.vue │ │ │ │ └── toleration-config.vue │ │ │ ├── container │ │ │ │ ├── container-info.vue │ │ │ │ ├── env-config.vue │ │ │ │ ├── env │ │ │ │ │ ├── configmap-env.vue │ │ │ │ │ ├── env.mixin.js │ │ │ │ │ ├── field-env.vue │ │ │ │ │ ├── resource-env.vue │ │ │ │ │ ├── secret-env.vue │ │ │ │ │ └── value-env.vue │ │ │ │ ├── port-config.vue │ │ │ │ ├── probe-config.vue │ │ │ │ ├── resource-config.vue │ │ │ │ ├── volumns-config.vue │ │ │ │ └── volumns │ │ │ │ │ ├── configmap-config.vue │ │ │ │ │ ├── emptydir-config.vue │ │ │ │ │ ├── emptydir-dialog.vue │ │ │ │ │ ├── hostpath-config.vue │ │ │ │ │ ├── pvc-config.vue │ │ │ │ │ ├── secret-config.vue │ │ │ │ │ ├── vct-config.vue │ │ │ │ │ └── volumn-mixin.js │ │ │ ├── edit.vue │ │ │ ├── index.js │ │ │ ├── info │ │ │ │ ├── basic-info.vue │ │ │ │ ├── storage-config.vue │ │ │ │ ├── tenant-select.vue │ │ │ │ └── update-strategy.vue │ │ │ └── updateImage.vue │ │ ├── list.vue │ │ └── pod │ │ │ └── index.vue │ └── yaml │ │ ├── utils.js │ │ └── yaml.vue │ ├── login │ ├── assets │ │ ├── bg.jpg │ │ └── github.png │ ├── index.vue │ ├── noAuth.vue │ ├── password-input.vue │ └── password.vue │ ├── platform │ ├── audit │ │ └── index.vue │ ├── bootstrap │ │ ├── member-boot.vue │ │ ├── namespace-boot.vue │ │ ├── project-boot.vue │ │ ├── quick-boot.vue │ │ ├── tenant-boot.vue │ │ └── tenantquota-boot.vue │ ├── cluster │ │ ├── detail.vue │ │ ├── details │ │ │ ├── component │ │ │ │ └── node-input-serch.vue │ │ │ ├── info.vue │ │ │ ├── network │ │ │ │ ├── cidr-inputs.vue │ │ │ │ ├── edit.vue │ │ │ │ ├── index.vue │ │ │ │ ├── ns-select.vue │ │ │ │ ├── port-inputs.vue │ │ │ │ ├── regular-input.vue │ │ │ │ └── source-block.vue │ │ │ ├── node.vue │ │ │ ├── persistentvolumes.vue │ │ │ └── storageclass.vue │ │ ├── dialogs │ │ │ ├── cluster.vue │ │ │ ├── domainSuffix.vue │ │ │ ├── labels.vue │ │ │ ├── node.vue │ │ │ └── taint.vue │ │ ├── index.vue │ │ └── node │ │ │ ├── event.vue │ │ │ ├── index.vue │ │ │ ├── info.vue │ │ │ ├── monitor.vue │ │ │ └── pod.vue │ ├── index.vue │ ├── namespace │ │ ├── cluster-select.vue │ │ ├── clusterInfoDialog.vue │ │ ├── el-ns-quota-table.vue │ │ ├── index.vue │ │ ├── ns-metadata-dialog.vue │ │ ├── ns-quota-dialog.vue │ │ └── ns-quota-table.vue │ ├── observable │ │ ├── alermanager-dialog.vue │ │ ├── alertmanager-config.vue │ │ ├── monitor.js │ │ ├── monitor.vue │ │ ├── prometheus-rule-edit.vue │ │ ├── prometheus-rule-instance.vue │ │ └── prometheus-rule.vue │ ├── quota │ │ ├── el-hard-quota-table.vue │ │ ├── hard-quota-table.vue │ │ ├── index.vue │ │ ├── quota-dialog.vue │ │ └── storage-quota-input.vue │ ├── role │ │ ├── index.vue │ │ ├── role-dialog.vue │ │ └── roles.vue │ ├── tenant │ │ ├── dialogs │ │ │ └── domainSuffix.vue │ │ ├── member-dialog.vue │ │ ├── member.vue │ │ ├── project-dialog.vue │ │ ├── project.vue │ │ ├── tabs.vue │ │ ├── tenant-dialog.vue │ │ └── tenant.vue │ └── user │ │ ├── index.vue │ │ ├── user-dialog.vue │ │ └── user-upload-dialog.vue │ └── user │ ├── index.vue │ └── open-api.vue ├── template ├── index.html ├── index.prod.html └── kubecube.html └── ui └── cobalt ├── .version ├── assets ├── 52976143 │ └── arrow-down.svg ├── 78465218 │ └── stripe.png ├── 0153905e │ └── remove.svg ├── 04a434e7 │ └── logo-inverse.svg ├── 07cbf9cd │ └── secret_public.svg ├── 0a391d61 │ └── rotate-left.svg ├── 0d506648 │ └── close-small.svg ├── 0f5bb9f5 │ └── end.svg ├── 1cdd5651 │ └── waiting.svg ├── 1d8560a1 │ └── chart-zoom.svg ├── 22bfbb1b │ └── date.svg ├── 294b2600 │ └── move_icon.png ├── 2ce8ca9b │ └── logo.svg ├── 2e3cb38b │ └── help.svg ├── 309e27cb │ └── refresh.svg ├── 3b9d1a92 │ ├── empty.png │ └── nodata.png ├── 3c7c1a28 │ └── arrow-up.svg ├── 405242d1 │ ├── enabled.svg │ └── list-start.svg ├── 46d9e0d2 │ └── arrow-down.svg ├── 474542fd │ └── keyboard-arrow-up.svg ├── 4763f900 │ └── search.svg ├── 5b602238 │ └── create.svg ├── 5d234ebe │ └── logo-c-white.svg ├── 5e637e07 │ └── unpaid.svg ├── 5f19f5d5 │ └── expire.svg ├── 5fe93a07 │ └── edit.svg ├── 653dfb35 │ └── angle-up.svg ├── 698c2c91 │ └── area.svg ├── 7e883063 │ └── logo-yiwu-2color.svg ├── 81c2ac42 │ └── close.svg ├── 870a40ae │ └── logo-163yun-2color.svg ├── 87741a78 │ └── angle-right.svg ├── 8ac7b510 │ └── chart-refresh.svg ├── 8b7e0ac7 │ └── error.svg ├── 8e2c741c │ └── spinner.svg ├── 90b71868 │ ├── disabled.svg │ └── list_no_response.svg ├── 9d4c13fb │ └── info.svg ├── 9f01ef52 │ └── success.svg ├── 9fc757e9 │ └── shadow-up.png ├── a6a3d16e │ ├── apm-alert.svg │ └── warning.svg ├── a884e287 │ └── icon.svg ├── aa3eaa22 │ └── angle-right.svg ├── acc43fb9 │ └── angle-down.svg ├── aec62c86 │ └── portrait.svg ├── b4208d94 │ └── shadow-down.png ├── bbd25280 │ └── password.svg ├── bfbeb69f │ └── alert.svg ├── c4ebc54c │ └── arrow-left.svg ├── c8862ae5 │ └── refresh.svg ├── cd90a7ab │ └── keyboard-arrow-down.svg ├── d171fbf3 │ └── high.png ├── d5760e94 │ └── add.svg ├── d5bd08d1 │ └── mount.svg ├── d631c933 │ └── logo-163yun-white.svg ├── db4f0414 │ └── angle-left.svg ├── dea22f5d │ └── logout.svg ├── e0e028fe │ └── lock.svg ├── e74746f4 │ └── rotate-right.svg ├── e780fdb0 │ └── logo-c-2color.svg ├── ec271fc6 │ └── keyboard-arrow-right.svg ├── ed5433e7 │ └── list_move.svg ├── ed73893f │ └── logo-yiwu-white.svg ├── edef239a │ └── dropdown.svg ├── f21c0117 │ └── nec-unused.svg ├── fc02eb53 │ └── arrow-right.svg ├── fdf17fe5 │ └── pause.svg ├── fe364bc1 │ └── netease-cloud-logo.svg └── ff31c253 │ └── arrow-up.svg ├── chunk.0.js ├── chunk.0.js.map ├── cloud-ui.css ├── cloud-ui.css.map ├── cloud-ui.js └── cloud-ui.js.map /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | src/server/utils/ 3 | polyfill.min.js 4 | public/ 5 | _* -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint-config-2o3t/vue", 4 | "plugin:vue/recommended" 5 | ], 6 | "rules": { 7 | "vue/require-default-prop": "off" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | registry=https://registry.npm.taobao.org 2 | strict-ssl=false 3 | package-lock=false 4 | -------------------------------------------------------------------------------- /BuildCloudUI/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "build-cloud-ui", 3 | "version": "0.0.1", 4 | "description": "A micro app fullstack project", 5 | "author": "", 6 | "private": true, 7 | "scripts": { 8 | "update:ui": "npx cloud-ui-custom -o \"../ui/cobalt\" --global-css \"../src/client/components/base/global.css\" -t cobalt -c \"library-path=../src/client/components\"", 9 | "update:ui:force": "npm run update:ui -- -f" 10 | }, 11 | "devDependencies": { 12 | "cloud-ui.vusion": "0.3.103", 13 | "proto-ui.vusion": "0.3.69", 14 | "vusion-cli": "~0.7.17" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx 2 | COPY public /usr/share/nginx/html/public -------------------------------------------------------------------------------- /assets/control.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/assets/control.png -------------------------------------------------------------------------------- /assets/mind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/assets/mind.png -------------------------------------------------------------------------------- /assets/platform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/assets/platform.png -------------------------------------------------------------------------------- /config/eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint-config-2o3t/vue" 4 | ], 5 | "rules": { 6 | "no-unused-vars": [0] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /config/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "exclude": ["public", "node_modules", "dll"], 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "target": "esnext" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /config/npmrc.txt: -------------------------------------------------------------------------------- 1 | registry=https://registry.npm.taobao.org 2 | strict-ssl=false 3 | -------------------------------------------------------------------------------- /config/vue.config.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | outputDir: 'public', 4 | publicPath: '/public/', 5 | filenameHashing: true, 6 | runtimeCompiler: true, 7 | lintOnSave: process.env.MICRO_APP_LINT_CONFG_SWITCH === 'close' ? false : process.env.NODE_ENV !== 'production', // 默认开启 8 | transpileDependencies: [ 9 | '@micro-app', // all 10 | ], 11 | configureWebpack: { 12 | module: { 13 | rules: [ 14 | { 15 | test: /\.s[ac]ss$/i, 16 | use: [ "style-loader", "css-loader", "sass-loader" ], 17 | }, 18 | ], 19 | }, 20 | } 21 | 22 | }; 23 | -------------------------------------------------------------------------------- /config/vusion.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | name: process.env.SUB_MODULES_ICON_FONT_NAME, 5 | type: 'app', 6 | libraryPath: path.resolve(__dirname, '../src/client/components/'), 7 | staticPath: 'src/client/static/', 8 | docs: false, 9 | overwrite: false, 10 | }; 11 | 12 | -------------------------------------------------------------------------------- /config/webpack-ui.js: -------------------------------------------------------------------------------- 1 | /** 2 | * common dll 部分dll文件由webpack.dll.config.js生成,包括了vue,vue-router, lodash, core-js 3 | */ 4 | 5 | const path = require('path'); 6 | 7 | module.exports = config => { 8 | config.resolve.alias 9 | .set('cloud-ui.vusion$', path.resolve(__dirname, '../ui/cobalt/cloud-ui.js')) 10 | .set('cloud-ui.vusion/cloud-ui.css$', path.resolve(__dirname, '../ui/cobalt/cloud-ui.css')) 11 | // .set('cloud-ui.vusion$', require.resolve('cloud-ui.vusion/dist/index.js')) 12 | // .set('cloud-ui.vusion/cloud-ui.css$', require.resolve('cloud-ui.vusion/dist/theme-cobalt.css')) 13 | 14 | .set('@necfe/cloud-ui-internal', path.resolve(__dirname, '../lib/cloud-ui-internal')); 15 | return config; 16 | }; 17 | -------------------------------------------------------------------------------- /config/webpack-umd.js: -------------------------------------------------------------------------------- 1 | /** 2 | * common umd部分,开发时引入加快打包速度 3 | */ 4 | const path = require('path'); 5 | const CopyPlugin = require('copy-webpack-plugin'); 6 | 7 | module.exports = (config, { dirname }) => { 8 | config.resolve.alias 9 | .set('library$', path.resolve(__dirname, '../umd/common.js')); 10 | config 11 | .plugin('copy-umd') 12 | .use(CopyPlugin, [[{ 13 | from: path.resolve(__dirname, '../umd'), 14 | to: path.resolve(dirname, '../public'), 15 | }]]) 16 | .end(); 17 | return config; 18 | }; 19 | -------------------------------------------------------------------------------- /lib/README.md: -------------------------------------------------------------------------------- 1 | # 注意 2 | 3 | 请使用别名 `@necfe/cloud-ui-internal` 引用 `cloud-ui-internal` 中的文件 4 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/index.js: -------------------------------------------------------------------------------- 1 | export * from './src/index.js'; 2 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/assets/images/nodata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/lib/cloud-ui-internal/src/assets/images/nodata.png -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/base/base.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/base/base.css'; 2 | 3 | body { 4 | color: #123344; 5 | } 6 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/base/global.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/base/global.css'; 2 | 3 | $brand-primary: #339bf3; 4 | 5 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/filters.js: -------------------------------------------------------------------------------- 1 | import date from './utils/filters/date.js'; 2 | import logo from './utils/filters/logo.js'; 3 | import others from './utils/filters/others.js'; 4 | import unit from './utils/filters/unit.js'; 5 | 6 | export { 7 | date, 8 | logo, 9 | others, 10 | unit, 11 | }; 12 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/mixins.js: -------------------------------------------------------------------------------- 1 | import Subscribe from './utils/mixins/subscribe.js'; 2 | import Modal from './utils/mixins/modal.js'; 3 | import Page from './utils/mixins/page.js'; 4 | 5 | export { 6 | Subscribe, 7 | Modal, 8 | Page, 9 | }; 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-addon.vue/assets/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-addon.vue/assets/readonly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-addon.vue/assets/readonly2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-addon.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-addon.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-addon', 3 | props: { 4 | name: { 5 | type: String, 6 | default: 'info', 7 | }, 8 | size: { 9 | type: [Number, String], 10 | default: 14, 11 | }, 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-bread.vue/README.md: -------------------------------------------------------------------------------- 1 | # 面包屑导航 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | ``` 9 | 10 | # API 11 | ### Props/Attrs 12 | 13 | | Prop/Attr | Type | Default | Description | 14 | | --------- | ---- | ------- | ----------- | 15 | | link | String | `'undefined'` | 跳转链接 | 16 | | name | String | `'undefined'` | 当前页名称 | 17 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-bread.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | {{name}} 8 | 9 |
10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-bread.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-bread', 3 | props: { 4 | link: String, 5 | name: String, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-bread.vue/module.css: -------------------------------------------------------------------------------- 1 | .root{ 2 | position: relative; 3 | padding-left: 40px; 4 | line-height: 60px; 5 | font-size: 14px; 6 | color: #666; 7 | background: #fff; 8 | } 9 | .back{ 10 | display: inline-block; 11 | vertical-align: middle; 12 | cursor: pointer; 13 | width: 32px; 14 | line-height: 20px; 15 | height:22px; 16 | text-align: center; 17 | color: #a7b7d1; 18 | margin-right: 1.3em; 19 | margin-bottom: 2px; 20 | border: 1px solid #a7b7d1; 21 | } 22 | .back::before { 23 | icon-font: url('../assets/svg/angle-left.svg'); 24 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-date-custom-picker.vue/i18n/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "time": "Time", 3 | "to": "to", 4 | "default": "reset", 5 | "customize": "custom", 6 | "interval": "Interval", 7 | "ok": "Confirm", 8 | "cancel": "cancel", 9 | "3hours": "last 3 hour(s)", 10 | "24hours": "last 24 hour(s)", 11 | "48hours": "last 48 hour(s)", 12 | "7days": "last 7 day(s)", 13 | "1minute": "1 minute(s)", 14 | "5minute": "5 minute(s)", 15 | "15minute": "15 minute(s)", 16 | "1hour": "1 hour(s)", 17 | "6hours": "6 hour(s)", 18 | "1day": "1 day(s)", 19 | "6days": "6 day(s)", 20 | "15days": "15 day(s)" 21 | } 22 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-date-custom-picker.vue/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | 4 | export default { 5 | messages: { 6 | 'en-US': enUS, 7 | 'zh-CN': zhCN, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-date-custom-picker.vue/i18n/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "time": "时间", 3 | "to": "至", 4 | "default": "返回默认", 5 | "customize": "自定义", 6 | "interval": "间隔", 7 | "ok": "确定", 8 | "cancel": "取消", 9 | "3hours": "近3小时", 10 | "24hours": "近24小时", 11 | "48hours": "近48小时", 12 | "7days": "近7日", 13 | "1minute": "1分钟", 14 | "5minute": "5分钟", 15 | "15minute": "15分钟", 16 | "1hour": "1小时", 17 | "6hours": "6小时", 18 | "1day": "1天", 19 | "6days": "6天", 20 | "15days": "15天" 21 | } 22 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-date-picker-monitor.vue/i18n/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "month": "/", 3 | "day": " " 4 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-date-picker-monitor.vue/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | 4 | export default { 5 | messages: { 6 | 'en-US': enUS, 7 | 'zh-CN': zhCN, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-date-picker-monitor.vue/i18n/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "month": "月", 3 | "day": "日" 4 | } 5 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-date-picker-monitor.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 | 7 |
8 |
-------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-date-picker-monitor.vue/index.js: -------------------------------------------------------------------------------- 1 | import { DatePicker } from 'cloud-ui.vusion'; 2 | import i18n from './i18n'; 3 | 4 | export default { 5 | name: 'u-date-picker-monitor', 6 | mixins: [DatePicker], 7 | i18n, 8 | methods: { 9 | showSpecific(value) { 10 | value = new Date(value); 11 | const month = value.getMonth() + 1; 12 | const date = value.getDate(); 13 | return month + this.$t('month') + date + this.$t('day'); 14 | }, 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-date-picker-monitor.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/u-date-picker.vue/module.css'; 2 | .input{ 3 | height: 30px; 4 | line-height: 30px; 5 | outline: none; 6 | } 7 | .body{z-index: 999;} -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-desc.vue/README.md: -------------------------------------------------------------------------------- 1 | # 面包屑导航 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | 10 | 名称输入要求说明 11 | 12 | 13 | ``` -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-desc.vue/index.html: -------------------------------------------------------------------------------- 1 |
2 | {{ tip }} 3 |
4 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-desc.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-desc', 3 | props: { 4 | tip: { 5 | type: String, 6 | }, 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-desc.vue/module.css: -------------------------------------------------------------------------------- 1 | .desc { 2 | color: #999; 3 | margin-top: 10px; 4 | margin-bottom: 10px; 5 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-items.vue/index.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
{{ description }}
5 | 6 | {{ currentMessage }} 7 |
8 |
9 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table-add-button.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | ``` 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table-add-button.vue/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table-add-button.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-form-table-add-button', 3 | props: { 4 | isContainer: Boolean, 5 | }, 6 | methods: { 7 | click() { 8 | this.$emit('click'); 9 | }, 10 | }, 11 | }; 12 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table-remove-button.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | ``` 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table-remove-button.vue/index.html: -------------------------------------------------------------------------------- 1 |
2 |
-------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table-remove-button.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-form-table-remove-button', 3 | methods: { 4 | click() { 5 | if (this.disabled) 6 | return; 7 | this.$emit('click'); 8 | }, 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table-remove-button.vue/module.css: -------------------------------------------------------------------------------- 1 | .button{ 2 | position: relative; 3 | cursor: pointer; 4 | margin-bottom: 0; 5 | font-size: 40px; 6 | color: #ff867f; 7 | height: 40px; 8 | line-height: 40px; 9 | } 10 | .button[disabled]{ 11 | color: #ddd; 12 | cursor: not-allowed; 13 | } 14 | .button:before{ 15 | icon-font: url(../assets/svg/tb-del.svg); 16 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table-tr.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | ``` 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table-tr.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | {{ currentMessage }} 10 | 11 | 12 | 13 | 14 | {{ currentMessage }} 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table.vue/i18n/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "add": "add" 3 | } 4 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table.vue/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | 4 | export default { 5 | messages: { 6 | 'en-US': enUS, 7 | 'zh-CN': zhCN, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table.vue/i18n/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "add": "添加" 3 | } 4 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-form-table.vue/index.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 |

6 | {{$t('add')}}{{ description }} 7 |

8 |
-------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-icon-input.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-icon-input.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-icon-input', 3 | props: { 4 | icon: { 5 | type: String, 6 | default: 'search', 7 | }, 8 | value: { 9 | type: String, 10 | default: '', 11 | }, 12 | }, 13 | data() { 14 | return { 15 | isFocus: false, 16 | }; 17 | }, 18 | methods: { 19 | onFocus($event) { 20 | this.isFocus = true; 21 | }, 22 | onBlur($event) { 23 | this.isFocus = false; 24 | }, 25 | focus() { 26 | this.$refs.input.focus(); 27 | }, 28 | blur() { 29 | this.$refs.input.blur(); 30 | }, 31 | }, 32 | }; 33 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-icon-input.vue/module.css: -------------------------------------------------------------------------------- 1 | .input input{ 2 | padding-left: 40px !important; 3 | text-align: left; 4 | } 5 | .input input:focus + i{ 6 | border-color: #8ebee9; 7 | } 8 | .icon{ 9 | position: absolute; 10 | display: inline-block; 11 | width: 29px; 12 | left: 1px; 13 | padding-left: 10px; 14 | background: #ffffff; 15 | height: 18px; 16 | line-height: 18px; 17 | top: 50%; 18 | transform: translateY(-9px); 19 | } 20 | .icon::before { 21 | cursor: auto; 22 | font-size: 18px; 23 | color: #d1d6de; 24 | } 25 | .icon[name='search']::before { 26 | icon-font: url('./assets/log-search.svg'); 27 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-log-time.vue/README.md: -------------------------------------------------------------------------------- 1 | # 面包屑导航 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | ``` 9 | ### 限制最小日期 10 | ``` html 11 | 12 | ``` 13 | ### 限制最大日期 14 | ``` html 15 | 16 | ``` 17 | 18 | # API 19 | ### Props/Attrs 20 | 21 | | Prop/Attr | Type | Default | Description | 22 | | --------- | ---- | ------- | ----------- | 23 | | strogageName | String | | LocalStrogage存储的名称 | 24 | | min | Number | | 限制最小值,时间戳 | 25 | | max | Number | | 限制最大值,时间戳 | 26 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-log-time.vue/i18n/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "specifiedTime": "location to the specified time", 3 | "positioning": "locate", 4 | "autoReplenishment": "The system auto-replenishment time to", 5 | "positioningHistory": "positioning history", 6 | "PleaseEnterTheCorrectTime":"Please enter the correct time", 7 | "DateCannotBeLessThan": "Date cannot be less than", 8 | "DateCannotBeGreaterThan": "Date cannot be greater than", 9 | "example": "example:" 10 | } 11 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-log-time.vue/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | 4 | export default { 5 | messages: { 6 | 'en-US': enUS, 7 | 'zh-CN': zhCN, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-log-time.vue/i18n/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "specifiedTime": "定位到指定的时间", 3 | "positioning": "定位", 4 | "autoReplenishment": "系统自动补全时间为", 5 | "positioningHistory": "定位历史", 6 | "PleaseEnterTheCorrectTime":"请输入正确的时间", 7 | "DateCannotBeLessThan": "日期不得小于", 8 | "DateCannotBeGreaterThan": "日期不得大于", 9 | "example": "比如:" 10 | } 11 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-chart-modal.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-chart-modal.vue/i18n/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "total": "total" 3 | } 4 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-chart-modal.vue/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | 4 | export default { 5 | messages: { 6 | 'en-US': enUS, 7 | 'zh-CN': zhCN, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-chart-modal.vue/i18n/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "total": "总数" 3 | } 4 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-chart-panel.vue/i18n/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "total": "total" 3 | } 4 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-chart-panel.vue/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | 4 | export default { 5 | messages: { 6 | 'en-US': enUS, 7 | 'zh-CN': zhCN, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-chart-panel.vue/i18n/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "total": "总数" 3 | } 4 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-chart.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-optionbar.vue/i18n/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "statisticalIndicators": "Statistical indicators", 3 | "average": "Average", 4 | "max": "Maximum", 5 | "min": "Minimum", 6 | "about3Hours": "last 3 hour(s)", 7 | "about24Hours": "last 24 hour(s)", 8 | "about48Hours": "last 48 hour(s)", 9 | "about7days": "last 7 day(s)" 10 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-optionbar.vue/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | 4 | export default { 5 | messages: { 6 | 'en-US': enUS, 7 | 'zh-CN': zhCN, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-monitor-optionbar.vue/i18n/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "statisticalIndicators": "统计指标", 3 | "average": "平均值", 4 | "max": "最大值", 5 | "min": "最小值", 6 | "about3Hours": "近3小时", 7 | "about24Hours": "近24小时", 8 | "about48Hours": "近48小时", 9 | "about7days": "近7日" 10 | } 11 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-slider-scale.vue/assets/minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | minus 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-slider-scale.vue/assets/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | plus 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-line.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-line.vue/module.css: -------------------------------------------------------------------------------- 1 | .text{ 2 | font-size: 12px; 3 | fill: #999; 4 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-other.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-other.vue/assets/home-cache.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-other.vue/module.css: -------------------------------------------------------------------------------- 1 | .node{ 2 | stroke: #afd2fa; 3 | stroke-width: 8px; 4 | fill: #fff; 5 | } 6 | .servicetype { 7 | fill: #4ec9ab; 8 | } 9 | .type{ 10 | font-size: 12px; 11 | fill: #fff; 12 | } 13 | .des{ 14 | fill: #999; 15 | font-size: 12px; 16 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-rabbitmq.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-rabbitmq.vue/index.js: -------------------------------------------------------------------------------- 1 | import TopoNode from '../u-topo-node.vue'; 2 | import rabbitmq from './assets/home-nqs.svg'; 3 | 4 | export default { 5 | name: 'u-topo-apm-rabbitmq', 6 | components: { 7 | [TopoNode.name]: TopoNode, 8 | }, 9 | props: { 10 | node: Object, 11 | }, 12 | data() { 13 | return { 14 | imageUrl: rabbitmq, 15 | }; 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-rabbitmq.vue/module.css: -------------------------------------------------------------------------------- 1 | .node{ 2 | stroke: #afd2fa; 3 | stroke-width: 8px; 4 | fill: #fff; 5 | } 6 | .servicetype { 7 | fill: #4ec9ab; 8 | } 9 | .type{ 10 | font-size: 12px; 11 | fill: #fff; 12 | } 13 | .des{ 14 | fill: #999; 15 | font-size: 12px; 16 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-service.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-service.vue/i18n/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "error", 3 | "node": "node", 4 | "detail": "detail", 5 | "offline": "the service is offline" 6 | } 7 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-service.vue/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | 4 | export default { 5 | messages: { 6 | 'en-US': enUS, 7 | 'zh-CN': zhCN, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-service.vue/i18n/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "错误", 3 | "node": "节点", 4 | "detail": "详情", 5 | "offline": "该服务处于离线状态" 6 | } 7 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-unknow.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-unknow.vue/index.js: -------------------------------------------------------------------------------- 1 | import TopoNode from '../u-topo-node.vue'; 2 | import unkonw from './assets/cloud-fill.svg'; 3 | 4 | export default { 5 | name: 'u-topo-apm-unknow', 6 | components: { 7 | [TopoNode.name]: TopoNode, 8 | }, 9 | props: { 10 | node: Object, 11 | }, 12 | data() { 13 | return { 14 | imageUrl: unkonw, 15 | }; 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-apm-unknow.vue/module.css: -------------------------------------------------------------------------------- 1 | .text{ 2 | fill: white; 3 | font-size: 12px; 4 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-line.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-line.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-line.vue/module.css: -------------------------------------------------------------------------------- 1 | .line{ 2 | stroke: #5ca2f4; 3 | stroke-width: 1px; 4 | fill: none; 5 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-node.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-node.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo-node.vue/module.css: -------------------------------------------------------------------------------- 1 | .node{ 2 | cursor: pointer; 3 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo.vue/README.md: -------------------------------------------------------------------------------- 1 | # Well 2 | 3 | ## 示例 4 | ### 基本形式 5 | 6 | ``` html 7 | 8 | 9 | Apple 10 | Banana 11 | Cake 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/u-topo.vue/module.css: -------------------------------------------------------------------------------- 1 | .root{ 2 | position: relative; 3 | width: 100%; 4 | height: 100%; 5 | } 6 | .svg{ 7 | width: 100%; 8 | height: 100%; 9 | } 10 | .slider{ 11 | position: absolute; 12 | left: 12px; 13 | bottom: 21px; 14 | height: 74px; 15 | width: 30px; 16 | } 17 | .slider[place="none"]{ 18 | display: none; 19 | } 20 | .slider[place="left top"]{ 21 | position: absolute; 22 | bottom: inherit; 23 | top: 21px; 24 | } 25 | .slider[place="rigth top"]{ 26 | position: absolute; 27 | right: 12px; 28 | left: inherit; 29 | bottom: inherit; 30 | top: 21px; 31 | } 32 | .slider[place="rigth bottom"]{ 33 | position: absolute; 34 | right: 12px; 35 | left: inherit; 36 | } -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/utils/cache.js: -------------------------------------------------------------------------------- 1 | import { cloneDeep } from 'lodash'; 2 | const wm = new Map(); 3 | export const cache = { 4 | add(key, value, notClone) { 5 | wm.set(key, notClone ? value : cloneDeep(value)); 6 | }, 7 | get(key) { 8 | return wm.get(key); 9 | }, 10 | has(key) { 11 | return wm.has(key); 12 | }, 13 | clear(key) { 14 | return wm.delete(key); 15 | }, 16 | safeGet(key, func) { 17 | return this.has(key) ? Promise.resolve(cache.get(key)) : func(key); 18 | }, 19 | }; 20 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/utils/directive/index.js: -------------------------------------------------------------------------------- 1 | import textareaAuto from './textarea-auto.js'; 2 | import disShortcut from './dis-shortcut.js'; 3 | export default { 4 | textareaAuto, 5 | disShortcut, 6 | }; 7 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/utils/filters/index.js: -------------------------------------------------------------------------------- 1 | import date from './date.js'; 2 | import logo from './logo.js'; 3 | import others from './others.js'; 4 | import unit from './unit.js'; 5 | 6 | export default Object.assign( 7 | { }, 8 | date, 9 | logo, 10 | others, 11 | unit 12 | ); 13 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/utils/index.js: -------------------------------------------------------------------------------- 1 | export const mapComponents = (components) => { 2 | const result = {}; 3 | components.forEach((component) => result[component.options ? component.options.name : component.name] = component); 4 | return result; 5 | }; 6 | -------------------------------------------------------------------------------- /lib/cloud-ui-internal/src/utils/wrapComponent.js: -------------------------------------------------------------------------------- 1 | export default { template: '
' }; 2 | -------------------------------------------------------------------------------- /plugins/index.js: -------------------------------------------------------------------------------- 1 | 2 | const path = require('path'); 3 | 4 | // register plugins 5 | 6 | module.exports = [ 7 | '@micro-app/vue-cli-plugin-microapp', 8 | [ '@micro-app/plugin-compatible', { server: true }], // 适配 v1 9 | [ // 0 10 | { 11 | id: 'common:plugins-custom-command', 12 | link: path.resolve(__dirname, './command.js'), 13 | description: '公共通用 common 提供自定义 command', 14 | }, 15 | ], 16 | [ // 1 17 | { 18 | id: 'common:plugins-enhance-webpack', 19 | link: path.resolve(__dirname, './enhance-webpack.js'), 20 | description: '公共通用 common 提供增强 webpack 配置', 21 | }, 22 | ], 23 | ]; 24 | -------------------------------------------------------------------------------- /src/client/assets/arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/assets/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/bg.jpg -------------------------------------------------------------------------------- /src/client/assets/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/assets/download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/assets/favicon_yun.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/favicon_yun.ico -------------------------------------------------------------------------------- /src/client/assets/home-cache.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/client/assets/icons/svg/angle-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/assets/icons/svg/angle-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | angle-left 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/assets/icons/svg/angle-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | angle-right 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/assets/icons/svg/angle-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/assets/icons/svg/dropdown.1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/assets/icons/svg/dropdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/assets/icons/svg/list_close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/assets/icons/svg/list_no_response.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/assets/icons/svg/list_open.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/assets/images/btn_play.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/btn_play.gif -------------------------------------------------------------------------------- /src/client/assets/images/emptylog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/emptylog.png -------------------------------------------------------------------------------- /src/client/assets/images/flag_high.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/flag_high.png -------------------------------------------------------------------------------- /src/client/assets/images/flag_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/flag_normal.png -------------------------------------------------------------------------------- /src/client/assets/images/log-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/log-black.png -------------------------------------------------------------------------------- /src/client/assets/images/log-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/log-white.png -------------------------------------------------------------------------------- /src/client/assets/images/ncssprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/ncssprite.png -------------------------------------------------------------------------------- /src/client/assets/images/nodata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/nodata.png -------------------------------------------------------------------------------- /src/client/assets/images/nodata@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/nodata@2x.png -------------------------------------------------------------------------------- /src/client/assets/images/sprite-repoLogo50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/sprite-repoLogo50.png -------------------------------------------------------------------------------- /src/client/assets/images/terminator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/images/terminator.png -------------------------------------------------------------------------------- /src/client/assets/none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/none.png -------------------------------------------------------------------------------- /src/client/assets/sprite-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/sprite-browser.png -------------------------------------------------------------------------------- /src/client/assets/upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/assets/upgrade.png -------------------------------------------------------------------------------- /src/client/base/mixins/docTitle.js: -------------------------------------------------------------------------------- 1 | const initialTitle = document.title; 2 | export default { 3 | created() { 4 | const title = ((this.$route || {}).meta || {}).docTitle || this.$options.docTitle; 5 | if (title) 6 | document.title = title + ' - ' + initialTitle; 7 | else 8 | document.title = initialTitle; 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /src/client/base/mixins/index.js: -------------------------------------------------------------------------------- 1 | import { Modal, Subscribe, Page as InitPage } from '@necfe/cloud-ui-internal/src/mixins.js'; 2 | import Inputs from './inputs'; 3 | 4 | // 给 Page 增加 selectPage 方法 5 | const Page = Object.assign({}, InitPage, { 6 | methods: Object.assign({}, InitPage.methods, { 7 | // 更改页数 || limit 操作的回调函数 8 | selectPage({ pageSize, page = 1 }) { 9 | this.page = page; 10 | this.form && Object.assign(this.form, { 11 | limit: pageSize, 12 | offset: (page - 1) * pageSize, 13 | }); 14 | this.loadList && this.loadList(); 15 | }, 16 | }), 17 | }); 18 | 19 | export { 20 | Modal, Subscribe, Page, Inputs 21 | } -------------------------------------------------------------------------------- /src/client/components/base/index.css: -------------------------------------------------------------------------------- 1 | @import "./base.css"; 2 | @import "./global.css"; 3 | @import "./repo-logo50.css"; 4 | @import "./function.css"; 5 | @import "./xterm.css"; 6 | @import "./reset.css"; 7 | /* @import "./layout.css"; 8 | @import "./win-logo.css"; 9 | @import "./repo-logo25.css"; 10 | @import "./repo-logo30.css"; 11 | @import "./logo.css"; 12 | @import "./common.css"; 13 | @import "./font.css"; 14 | @import "./unit.css"; 15 | @import "./samErrorMsg.css"; 16 | @import "./modal.css"; */ 17 | -------------------------------------------------------------------------------- /src/client/components/base/reset.css: -------------------------------------------------------------------------------- 1 | textarea { 2 | resize: none; 3 | outline: 0; 4 | font-size: 100%; 5 | margin: 0; 6 | vertical-align: baseline; 7 | vertical-align: middle; 8 | } 9 | 10 | textarea::placeholder { 11 | color: #999; 12 | } -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-button.vue/index.js: -------------------------------------------------------------------------------- 1 | import Button from 'cloud-ui.vusion/src/u-button.vue'; 2 | 3 | export default Button; 4 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-button.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/u-button.vue/module.css'; 2 | 3 | .root[color="primary"] { 4 | border: 1px solid transparent; 5 | } 6 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-crumb-item.vue/index.html: -------------------------------------------------------------------------------- 1 |
  • 2 | 3 | 4 | 5 | 6 | 7 | 8 |
  • 9 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-crumb-item.vue/index.js: -------------------------------------------------------------------------------- 1 | import { Emitter, Link } from 'cloud-ui.vusion'; 2 | export default { 3 | name: 'u-crumb-item', 4 | parentName: 'u-crumb', 5 | mixins: [Link, Emitter], 6 | data: () => ({ 7 | parentVM: undefined, 8 | }), 9 | computed: { 10 | showSeperator() { 11 | return this.parentVM.itemVMs.indexOf(this) > 0; 12 | }, 13 | current() { 14 | return this.parentVM.itemVMs.slice(-1)[0] === this; 15 | }, 16 | }, 17 | created() { 18 | this.dispatch(this.$options.parentName, 'add-item-vm', this); 19 | }, 20 | destroyed() { 21 | this.dispatch(this.$options.parentName, 'remove-item-vm', this); 22 | }, 23 | }; 24 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-crumb-item.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'proto-ui.vusion/src/u-link.vue/module'; 2 | 3 | .item { 4 | display: inline-block; 5 | } 6 | 7 | .item.seperator::before { 8 | content: '/'; 9 | margin: 0 5px; 10 | } 11 | 12 | .current { 13 | color: #666; 14 | } 15 | 16 | .root { 17 | color: #508de8; 18 | } 19 | 20 | .root:hover { 21 | color: $brand-primary; 22 | transition: ease $transition-duration; 23 | text-decoration: none; 24 | } 25 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-crumb.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 5 |
    6 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-crumb.vue/index.js: -------------------------------------------------------------------------------- 1 | import cookie from '@micro-app/common/utils/handleCookie'; 2 | export default { 3 | name: 'u-crumb', 4 | childName: 'u-crumb-item', 5 | props: { 6 | absolute: { type: Boolean, default: false }, 7 | }, 8 | data: () => ({ 9 | itemVMs: [], 10 | code: undefined, 11 | }), 12 | created() { 13 | this.$on('add-item-vm', (itemVM) => { 14 | itemVM.parentVM = this; 15 | this.itemVMs.push(itemVM); 16 | }); 17 | this.$on('remove-item-vm', (itemVM) => { 18 | itemVM.parentVM = undefined; 19 | this.itemVMs.splice(this.itemVMs.indexOf(itemVM), 1); 20 | }); 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-crumb.vue/module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | height: 60px; 3 | margin-top: -40px; 4 | line-height: 60px; 5 | } 6 | 7 | .root[absolute] { 8 | position: absolute; 9 | top: 0; 10 | margin-top: 0; 11 | } 12 | 13 | .item { 14 | display: inline-block; 15 | color: #666; 16 | } 17 | 18 | .item:after { 19 | content: '/'; 20 | margin: 0 5px; 21 | } 22 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-navbar-item.vue/index.js: -------------------------------------------------------------------------------- 1 | import { NavbarItem } from 'cloud-ui.vusion'; 2 | 3 | export default { 4 | extends: NavbarItem, 5 | }; 6 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-navbar-item.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/u-navbar-item.vue/module.css'; 2 | 3 | .root { 4 | height: 68px; 5 | line-height: 68px; 6 | } 7 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-number-card.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 |
    {{ title }}
    3 |
    4 | 5 | {{ value }} 6 | 7 | 8 | 9 | {{ unit }} 10 |
    11 |
    12 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-number-card.vue/index.js: -------------------------------------------------------------------------------- 1 | import { Link } from 'cloud-ui.vusion'; 2 | 3 | export default { 4 | name: 'u-number-card', 5 | extends: Link, 6 | props: { 7 | title: String, 8 | value: [String, Number], 9 | unit: String, 10 | }, 11 | computed: { 12 | isInteger() { 13 | return Number.isInteger(parseFloat(this.value)); 14 | }, 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-panel-group.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | {{ title }} 4 |
    5 |
    6 | 7 |
    8 |
    9 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-panel-group.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-panel-group', 3 | props: { 4 | title: String, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-panel-group.vue/module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | 3 | } 4 | 5 | .root:not(:last-child) { 6 | margin-bottom: $margin-base; 7 | } 8 | 9 | .head { 10 | line-height: 45px; 11 | font-size: 16px; 12 | font-weight: bold; 13 | /* border-top: 1px solid $border-color-light; 14 | margin-left: -15px; 15 | margin-right: -15px; 16 | padding-left: 15px; */ 17 | color: #80859c; 18 | } 19 | 20 | .body { 21 | padding-bottom: 5px; 22 | } 23 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-panel.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 4 |
    5 | {{ title }} 6 |
    7 | 8 |
    9 | 10 |
    11 |
    12 |
    13 |
    14 | {{ content }} 15 |
    16 |
    17 | 18 | 19 |
    20 |
    21 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-panel.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-panel', 3 | props: { 4 | title: { type: String, default: '提示' }, 5 | content: String, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-resize-table-column.vue/index.js: -------------------------------------------------------------------------------- 1 | import { ResizeTableColumn } from 'cloud-ui.vusion'; 2 | 3 | export default { 4 | name: 'u-resize-table-column', 5 | extends: ResizeTableColumn, 6 | }; 7 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-resize-table.vue/index.js: -------------------------------------------------------------------------------- 1 | import { ResizeTable } from 'cloud-ui.vusion'; 2 | 3 | export default { 4 | name: 'u-resize-table', 5 | extends: ResizeTable, 6 | }; 7 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-resize-table.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/u-resize-table.vue/module.css'; 2 | 3 | .hthItem, .btd, .btd[role="center"] { 4 | height: 42px; 5 | padding: 0 0 0 10px; 6 | } 7 | 8 | .root[class] { 9 | font-size: 12px; 10 | } 11 | 12 | .hthItem::after { 13 | top: 11px; 14 | } 15 | 16 | .carve { 17 | height: 42px; 18 | line-height: 42px; 19 | } 20 | 21 | .filtertitle { 22 | height: 42px; 23 | line-height: 42px; 24 | } 25 | 26 | .btd { 27 | color: #575962; 28 | } 29 | 30 | .titleText { 31 | color: #999; 32 | } 33 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-sidebar-suggest-item.vue/assets/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-sidebar-suggest-item.vue/index.js: -------------------------------------------------------------------------------- 1 | import { SuggestItem } from 'cloud-ui.vusion'; 2 | 3 | export default { 4 | name: 'u-sidebar-suggest-item', 5 | parentName: 'u-sidebar-suggest', 6 | extends: SuggestItem, 7 | }; 8 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-sidebar-suggest.vue/index.js: -------------------------------------------------------------------------------- 1 | import { Suggest } from 'cloud-ui.vusion'; 2 | 3 | export default { 4 | name: 'u-sidebar-suggest', 5 | childName: 'u-sidebar-suggest-item', 6 | extends: Suggest, 7 | }; 8 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-spinner.vue/index.js: -------------------------------------------------------------------------------- 1 | import Spinner from 'proto-ui.vusion/src/u-spinner.vue'; 2 | 3 | export default Spinner; 4 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-spinner.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'proto-ui.vusion/src/u-spinner.vue/module.css'; 2 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-status-icon.vue/index.js: -------------------------------------------------------------------------------- 1 | import StatusIcon from 'cloud-ui.vusion/src/u-status-icon.vue'; 2 | 3 | export default StatusIcon; 4 | -------------------------------------------------------------------------------- /src/client/components/cloud-ui/u-status-icon.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/u-status-icon.vue/module.css'; 2 | 3 | .icon[name="graySuccess"]::before { 4 | icon-font: url("./icons/success.svg"); 5 | color: #a2b0b7; 6 | } 7 | -------------------------------------------------------------------------------- /src/client/components/common/form/u-form-items.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    4 |
    {{ description }}
    5 | 6 | {{ currentMessage }} 7 |
    8 |
    9 | -------------------------------------------------------------------------------- /src/client/components/common/u-build-status-icon.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/client/components/common/u-build-status-icon.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-build-status-icon', 3 | props: { 4 | name: String, 5 | size: { type: [Number, String], default: 24 }, 6 | color: String, 7 | }, 8 | }; 9 | 10 | -------------------------------------------------------------------------------- /src/client/components/common/u-build-status-icon.vue/module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | color: #333; 3 | } 4 | 5 | .icon:before { 6 | vertical-align: middle; 7 | margin-right: 8px; 8 | } 9 | 10 | .icon[name="success"]:before { 11 | icon-font: url(./icons/success.svg); 12 | } 13 | .icon[name="waiting"]:before { 14 | icon-font: url(./icons/waiting.svg); 15 | } 16 | .icon[name="pause"]:before { 17 | icon-font: url(./icons/pause.svg); 18 | } 19 | .icon[name="warning"]:before { 20 | icon-font: url(./icons/warning.svg); 21 | } 22 | .icon[name="error"]:before { 23 | icon-font: url(./icons/error.svg); 24 | } 25 | .icon[name="building"]{ 26 | display: inline-block; 27 | width: 22px; 28 | height: 22px; 29 | border-radius: 11px; 30 | } 31 | -------------------------------------------------------------------------------- /src/client/components/common/u-card.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 |
    5 | {{title}} 6 | 7 | 8 | {{amount}}{{unit}} 9 | 10 |
    11 |
    12 | 13 |
    14 | -------------------------------------------------------------------------------- /src/client/components/common/u-card.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-card', 3 | props: { 4 | amount: { 5 | type: Number, 6 | }, 7 | loading: { 8 | type: Boolean, 9 | default: false, 10 | }, 11 | unit: { 12 | type: String, 13 | required: true, 14 | }, 15 | title: { 16 | type: String, 17 | required: true, 18 | }, 19 | }, 20 | data() { 21 | return {}; 22 | }, 23 | }; 24 | -------------------------------------------------------------------------------- /src/client/components/common/u-desc.vue: -------------------------------------------------------------------------------- 1 | 6 | 13 | 23 | -------------------------------------------------------------------------------- /src/client/components/common/u-detail-operate-item.vue: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /src/client/components/common/u-easy-copy.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 复制 3 | 已复制 4 |
    5 | -------------------------------------------------------------------------------- /src/client/components/common/u-easy-copy.vue/module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | display: inline-block; 3 | position: relative; 4 | height: 28px; 5 | line-height: 28px; 6 | } 7 | /* 解决切换至已复制时行高抖动 */ 8 | .icon > span { 9 | vertical-align: middle; 10 | } 11 | 12 | .icon > span::before { 13 | vertical-align: middle; 14 | } 15 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/angle-down copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/angle-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/angle-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | angle-right 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/angle-up copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/angle-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/close-small.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/doc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/export.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/hdm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/info copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/k8s.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/list_no_response.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/menu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | minus 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/ncs/container.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/ncs/initcontainer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/ncs/minus-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/ncs/yaml.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/nos-angle-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/nsf-instance.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/nsf-menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/nsf-overview.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | plus 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/readonly2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/sidenav/apm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/sidenav/goapi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/sidenav/gportal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/sidenav/gtxs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/sidenav/overview.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/icons/write.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/client/components/common/u-icons.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-icons', 3 | props: { 4 | name: String, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-meta-info.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 | 19 | 27 | 28 | -------------------------------------------------------------------------------- /src/client/components/common/u-multi-filter.vue/base/utils/index.js: -------------------------------------------------------------------------------- 1 | export const isObject = value => { 2 | if (value === null || value === undefined) { return false; } 3 | return value.toString() === '[object Object]'; 4 | }; 5 | 6 | export const deepCopy = function(result, source) { 7 | for (const key in source) { 8 | const copy = source[key]; 9 | if (Array.isArray(copy)) { result[key] = deepCopy(result[key] || [], copy); } else if (isObject(copy)) { result[key] = deepCopy(result[key] || {}, copy); } else { result[key] = copy; } 10 | } 11 | return result; 12 | }; 13 | -------------------------------------------------------------------------------- /src/client/components/common/u-multi-filter.vue/i18n/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "selectText": "Please select", 3 | "noDataText": "No matching data" 4 | } 5 | -------------------------------------------------------------------------------- /src/client/components/common/u-multi-filter.vue/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | 4 | export default { 5 | messages: { 6 | 'en-US': enUS, 7 | 'zh-CN': zhCN, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /src/client/components/common/u-multi-filter.vue/i18n/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "selectText": "请选择", 3 | "noDataText": "无匹配数据" 4 | } 5 | -------------------------------------------------------------------------------- /src/client/components/common/u-multi-filter.vue/icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/client/components/common/u-multi-filter.vue/icons/keyboard-arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/client/components/common/u-section.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | 29 | -------------------------------------------------------------------------------- /src/client/components/common/u-sidebar-group.vue/icons/pool.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/client/components/common/u-sidebar-group.vue/icons/user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/client/components/common/u-sidebar-group.vue/index.js: -------------------------------------------------------------------------------- 1 | import { SidebarGroup } from 'cloud-ui.vusion'; 2 | 3 | export default SidebarGroup; 4 | -------------------------------------------------------------------------------- /src/client/components/common/u-sidebar-header.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 21 | 22 | 38 | -------------------------------------------------------------------------------- /src/client/components/common/u-sidebar-item.vue/index.js: -------------------------------------------------------------------------------- 1 | import { SidebarItem } from 'cloud-ui.vusion'; 2 | 3 | export default SidebarItem; 4 | -------------------------------------------------------------------------------- /src/client/components/common/u-sidebar.vue/index.js: -------------------------------------------------------------------------------- 1 | import { Sidebar } from 'cloud-ui.vusion'; 2 | 3 | export default Sidebar; 4 | -------------------------------------------------------------------------------- /src/client/components/common/u-sidebar.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/u-sidebar.vue/module.css'; 2 | 3 | .root { 4 | border-right: 1px solid #e1e8ed; 5 | } 6 | 7 | .root[submodule] { 8 | height: auto; 9 | overflow: hidden; 10 | border-right: none; 11 | } -------------------------------------------------------------------------------- /src/client/components/common/u-sidelist.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    {{ title }}
    4 | 14 |
    15 | -------------------------------------------------------------------------------- /src/client/components/common/u-sidenav.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 | 5 | 6 | 7 | 8 | {{ nav.text }}{{ nav.remark }} 9 | 10 | 11 |
    12 | -------------------------------------------------------------------------------- /src/client/components/common/u-sort-radio.vue/index.html: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /src/client/components/common/u-sort-radios.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    -------------------------------------------------------------------------------- /src/client/components/common/u-sort-radios.vue/index.js: -------------------------------------------------------------------------------- 1 | import { Radios } from 'cloud-ui.vusion'; 2 | 3 | export default { 4 | name: 'u-sort-radios', 5 | childName: 'u-sort-radio', 6 | extends: Radios, 7 | }; 8 | -------------------------------------------------------------------------------- /src/client/components/common/u-sort-radios.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'proto-ui.vusion/src/u-radios.vue/module.css'; 2 | 3 | .root { 4 | display: inline-block; 5 | } 6 | 7 | .root > *:not(:last-child) { 8 | margin-right: 20px; 9 | } 10 | -------------------------------------------------------------------------------- /src/client/components/common/u-step-process.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 |
    5 | 6 |
    7 | -------------------------------------------------------------------------------- /src/client/components/common/u-step-process.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'u-step-progress', 3 | props: { 4 | percent: { type: Number, default: 0 }, 5 | start: { type: Number, deffault: 0 }, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /src/client/components/common/u-step-process.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/u-linear-progress.vue/module.css'; 2 | 3 | .track, .trail{ 4 | border-radius: 3px; 5 | } 6 | -------------------------------------------------------------------------------- /src/client/components/common/u-table-column.vue/index.js: -------------------------------------------------------------------------------- 1 | import { TableViewColumn } from 'cloud-ui.vusion'; 2 | 3 | export default TableViewColumn; 4 | -------------------------------------------------------------------------------- /src/client/components/common/u-table-view-cell.vue/index.js: -------------------------------------------------------------------------------- 1 | import { TableViewCell } from 'cloud-ui.vusion'; 2 | 3 | export default TableViewCell; 4 | -------------------------------------------------------------------------------- /src/client/components/common/u-table-view.vue/index.js: -------------------------------------------------------------------------------- 1 | import { TableView } from 'cloud-ui.vusion'; 2 | 3 | export default TableView; 4 | -------------------------------------------------------------------------------- /src/client/components/common/u-table-view.vue/module.css: -------------------------------------------------------------------------------- 1 | @import 'cloud-ui.vusion/src/u-table-view.vue/module.css'; 2 | 3 | .hthSpan, .btdSpan, .btdSpan[role="center"] { 4 | height: 42px; 5 | padding: 0 0 0 10px; 6 | } 7 | 8 | .root[class] { 9 | font-size: 12px; 10 | } 11 | 12 | .btdSpan { 13 | color: #575962; 14 | } 15 | 16 | .hthSpan { 17 | color: #999; 18 | } 19 | -------------------------------------------------------------------------------- /src/client/components/common/u-tip.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 19 | 20 | 30 | -------------------------------------------------------------------------------- /src/client/components/common/u-toast.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 4 | 5 | {{ item.text }} 6 | 7 |
    8 |
    9 | -------------------------------------------------------------------------------- /src/client/components/common/u-unauth.vue/assets/404-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/components/common/u-unauth.vue/assets/404-3.png -------------------------------------------------------------------------------- /src/client/components/common/u-unauth.vue/assets/block@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/components/common/u-unauth.vue/assets/block@2x.png -------------------------------------------------------------------------------- /src/client/components/common/u-unauth.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    4 | 404 5 | 无权限访问 6 | 7 |

    {{ unAuthText || (notFound ? '未找到该页面' : '无权限访问,可联系管理员开通权限') }} 快速配置

    8 |
    9 |
    10 | 11 |
    12 | -------------------------------------------------------------------------------- /src/client/components/common/u-unauth.vue/module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | text-align: center; 3 | } 4 | .unauthImg { 5 | width: 200px; 6 | height: 160px; 7 | margin-top: 200px; 8 | } 9 | .img404 { 10 | width: 300px; 11 | margin-top: 330px; 12 | } -------------------------------------------------------------------------------- /src/client/components/common/x-editor.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    -------------------------------------------------------------------------------- /src/client/components/common/x-editor.vue/lang.js: -------------------------------------------------------------------------------- 1 | export default function (lang) { 2 | return require(`brace/mode/${lang}`); 3 | } 4 | -------------------------------------------------------------------------------- /src/client/components/common/x-editor.vue/module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | border-color: #f5f7f9; 3 | background-color: #f5f7f9; 4 | padding-top: 16px; 5 | font-size: 14px; 6 | } 7 | 8 | .root :global(.ace_gutter) { 9 | background-color: #f5f7f9; 10 | top: 16px; 11 | } 12 | 13 | .root :global(.ace_scroller) { 14 | top: 16px; 15 | } 16 | 17 | .root :global(.ace_variable) { 18 | color: #c27919; 19 | } 20 | 21 | .root :global(.ace_marker-layer) :global(.ace_active-line), .root :global(.ace_gutter-active-line) { 22 | background: #ecf1f6; 23 | } 24 | -------------------------------------------------------------------------------- /src/client/components/common/x-editor.vue/theme.js: -------------------------------------------------------------------------------- 1 | export default function (theme) { 2 | return require(`brace/theme/${theme}`); 3 | } 4 | -------------------------------------------------------------------------------- /src/client/components/common/x-term.vue/index.html: -------------------------------------------------------------------------------- 1 |
    2 | -------------------------------------------------------------------------------- /src/client/components/common/x-term.vue/module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | z-index: 10; 3 | width: 100%; 4 | height: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /src/client/components/special/weather-icon.vue/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/client/components/special/weather-icon.vue/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'weather-icon', 3 | }; 4 | -------------------------------------------------------------------------------- /src/client/components/special/weather-icon.vue/module.css: -------------------------------------------------------------------------------- 1 | .icon{ 2 | font-size: 24px; 3 | font-weight: bold; 4 | display: inline-block; 5 | } 6 | .icon[type='sun']:before{ 7 | vertical-align: middle; 8 | icon-font: url(./icons/sun.svg); 9 | color: #fbcc3e; 10 | } 11 | .icon[type='cloud']:before{ 12 | vertical-align: middle; 13 | icon-font: url(./icons/sunny.svg); 14 | color: #fbcc3e; 15 | } 16 | .icon[type='cloudy']:before{ 17 | vertical-align: middle; 18 | icon-font: url(./icons/cloudy.svg); 19 | } 20 | .icon[type='rain']:before{ 21 | vertical-align: middle; 22 | icon-font: url(./icons/rain.svg); 23 | } 24 | .icon[type='storm']:before{ 25 | vertical-align: middle; 26 | icon-font: url(./icons/storm.svg); 27 | } 28 | -------------------------------------------------------------------------------- /src/client/directives/index.js: -------------------------------------------------------------------------------- 1 | export const preventRepeatClick = { 2 | bind(el, binding) { 3 | el.addEventListener('click', () => { 4 | if (!el.isDisabled) { 5 | el.isDisabled = true 6 | setTimeout(() => { 7 | el.isDisabled = false 8 | }, binding.value || 2000) 9 | } 10 | }) 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /src/client/filters/index.js: -------------------------------------------------------------------------------- 1 | import { date, others, unit } from '@necfe/cloud-ui-internal/src/filters.js'; 2 | import local from './filter.js'; 3 | 4 | export { date, others, unit, local }; 5 | export default Object.assign({}, date, others, unit, local); -------------------------------------------------------------------------------- /src/client/services/cicd.js: -------------------------------------------------------------------------------- 1 | import request from './request.js'; 2 | 3 | const perfix = '/cicdDeploy/proxy'; 4 | 5 | export default{ 6 | notify(param) { 7 | return request.post(perfix + '/api/v1/cicd-deploy/ncs-cluster/addNotify', param); 8 | }, 9 | getLegacyDeploymentSwitch() { 10 | return request.get('/cicd/proxy/api/v1/cicd/deploy/legacyEnabled'); 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /src/client/services/gtxs.js: -------------------------------------------------------------------------------- 1 | import Service from './service.js'; 2 | 3 | const Version = '2018-11-19'; 4 | 5 | const TXService = { 6 | // 获取全部组件信息 7 | loadSummary: { 8 | method: 'get', 9 | path: '', 10 | query: { 11 | Action: 'DescribeTxSummary', 12 | Version, 13 | }, 14 | process: (result = {}) => result, 15 | }, 16 | }; 17 | 18 | // /gtxs/proxy 为前端代理接口需要带的前缀 19 | const service = new Service(TXService, '/gtxs/proxy/gtxs'); 20 | 21 | export default service; 22 | -------------------------------------------------------------------------------- /src/client/services/license.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | 3 | const licenseApis = { 4 | status: { 5 | method: 'get', 6 | path: '/status', 7 | }, 8 | }; 9 | 10 | const service = new Service(licenseApis, '/inner/api/v1/license'); 11 | 12 | export default service; 13 | -------------------------------------------------------------------------------- /src/client/services/nsf.js: -------------------------------------------------------------------------------- 1 | import Service from './service.js'; 2 | 3 | const metaapis = { 4 | // 获取全部组件信息 5 | getAllEnvInfo: { 6 | method: 'get', 7 | path: '/api/metadata', 8 | query: { 9 | Action: 'GetAllEnvInfo', 10 | Version: '2018-11-1', 11 | }, 12 | process: ({ Result = [] }) => Result, 13 | }, 14 | }; 15 | 16 | const meta = new Service(metaapis, '/meta/redirect'); 17 | const service = Object.assign({}, meta); 18 | export default service; 19 | -------------------------------------------------------------------------------- /src/client/services/services/namespace.js: -------------------------------------------------------------------------------- 1 | import Service from './service'; 2 | import { userInterceptor } from './interceptor'; 3 | 4 | const service = Service({ 5 | baseURL: '/api/v1/cube/proxy/clusters', 6 | apis: { 7 | getNamespaces: { 8 | template: '/{cluster}/api/v1/namespaces', 9 | method: 'get', 10 | } 11 | } 12 | }); 13 | 14 | userInterceptor(service.axiosInstance); 15 | export default service; -------------------------------------------------------------------------------- /src/client/static/favicon_yun.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/static/favicon_yun.ico -------------------------------------------------------------------------------- /src/client/static/hostMonitor-example.csv: -------------------------------------------------------------------------------- 1 | 操作系统(*),IP地址(*),采集端口(*),HostName 2 | Linux,127.0.0.1,7777,hostname-update-3 3 | Linux,127.0.0.1,7757,hostname-4 -------------------------------------------------------------------------------- /src/client/static/jianhang.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/static/jianhang.ico -------------------------------------------------------------------------------- /src/client/static/yunjia.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/static/yunjia.ico -------------------------------------------------------------------------------- /src/client/utils/authMap/index.js: -------------------------------------------------------------------------------- 1 | import platform from './platform'; 2 | import ncs from './ncs'; 3 | 4 | export { 5 | platform, 6 | ncs, 7 | }; 8 | -------------------------------------------------------------------------------- /src/client/utils/authMap/ncs.js: -------------------------------------------------------------------------------- 1 | export default { 2 | ClusterSetting: ['admin.cluster'], 3 | // viewClusterMonitor: ['dashboard.index.resource'], 4 | // viewTenantMonitor: ['dashboard.index.tenant'], 5 | // viewProjectMonitor: ['dashboard.index.project'], 6 | // viewIngressMonitor: ['dashboard.index.ingress'], 7 | RegistrySyncDest: ['targetRepo.list', 'targetRepo.edit'], 8 | RegistrySync: ['repo.policy.list', 'repo.policy.edit'], 9 | }; 10 | -------------------------------------------------------------------------------- /src/client/utils/authMap/platform.js: -------------------------------------------------------------------------------- 1 | export default { 2 | // systemMgr: ['/permission/platformManage/tenant', '/permission/platformManage/audit', '/permission/platformManage/outerAuth'], 3 | // tenantMgr: ['/permission/tenantManage/project', '/permission/tenantManage/member'], 4 | // projectMgr: ['/permission/projectManage/projectP'], 5 | 6 | tenantMgr: ['/permission/tenantManage/**'], 7 | projectMgr: ['/permission/projectManage/**'], 8 | opsMgr: ['/permission/platformManage/**'], 9 | // userMgr: ['/permission/userManage/**', '!/permission/userManage/right/feature'], // ! 排除法 🌰 栗子 10 | userMgr: ['/permission/userManage/**'], 11 | actionTrail: ['/permission/auditManage/**'], 12 | }; 13 | -------------------------------------------------------------------------------- /src/client/utils/message.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | export default new Vue(); 4 | -------------------------------------------------------------------------------- /src/client/utils/wrapComponents.js: -------------------------------------------------------------------------------- 1 | export default { template: '
    ' }; 2 | -------------------------------------------------------------------------------- /src/client/views/apm/services/agent.js: -------------------------------------------------------------------------------- 1 | import apis from './apis/agent'; 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const service = new Service(apis); 5 | 6 | export default service; 7 | -------------------------------------------------------------------------------- /src/client/views/apm/services/apis/agent.js: -------------------------------------------------------------------------------- 1 | import { prefixV1 } from '../base.js'; 2 | export default { 3 | getJavaAgentConfig: { 4 | path: prefixV1 + '/userGuide/javaAgentConfig', 5 | method: 'get', 6 | }, 7 | getJavaAgentInstallation: { 8 | path: prefixV1 + '/userGuide/javaAgentInstallation', 9 | method: 'get', 10 | }, 11 | } -------------------------------------------------------------------------------- /src/client/views/apm/services/apis/chain.js: -------------------------------------------------------------------------------- 1 | import { prefixV1, prefix } from '../base.js'; 2 | export default { 3 | /** 4 | * 获取空间下监控数据概览 5 | */ 6 | search: { 7 | path: prefixV1 + '/transactionOverviews/{traceId}', 8 | method: 'get', 9 | }, 10 | callChain: { 11 | path: prefixV1 + '/callTree/{transId}', 12 | method: 'get', 13 | } 14 | }; -------------------------------------------------------------------------------- /src/client/views/apm/services/apis/db.js: -------------------------------------------------------------------------------- 1 | const prefix = '/apm/redirect/api/v1/products/{tenantId}/{productId}'; 2 | const prefixV2 = '/apm/redirect/api/v2/products/{tenantId}/{productId}'; 3 | export default { 4 | /** 5 | * 数据库列表接口 6 | */ 7 | getDbs: { 8 | path: prefix + '/dbOverview', 9 | method: 'get', 10 | }, 11 | /** 12 | * 慢SQL查询接口 13 | */ 14 | getSlowSql: { 15 | path: prefixV2 + '/slowSqlOverview', 16 | method: 'get', 17 | }, 18 | /** 19 | * 慢 SQL 详情散点图接口 20 | */ 21 | getSlowSqlDetail: { 22 | path: prefixV2 + '/slowSqlScatterPlot', 23 | method: 'post', 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /src/client/views/apm/services/apis/event.js: -------------------------------------------------------------------------------- 1 | const prefix = '/apm/redirect/api/v2/products/{tenantId}/{productId}'; 2 | export default { 3 | getEvent: { 4 | path: prefix + '/getEvent', 5 | method: 'get', 6 | }, 7 | } -------------------------------------------------------------------------------- /src/client/views/apm/services/base.js: -------------------------------------------------------------------------------- 1 | export const prefixV1 = '/apm/redirect/api/v1/napm'; 2 | export const prefixV1Products = '/apm/redirect/api/v1/papm'; 3 | export const prefix = '/apm/redirect/api/v2/napm'; 4 | -------------------------------------------------------------------------------- /src/client/views/apm/services/chain.js: -------------------------------------------------------------------------------- 1 | import apis from './apis/chain.js'; 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const service = new Service(apis); 5 | 6 | export default service; 7 | -------------------------------------------------------------------------------- /src/client/views/apm/services/db.js: -------------------------------------------------------------------------------- 1 | import apis from './apis/db.js'; 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const service = new Service(apis); 5 | 6 | export default service; 7 | -------------------------------------------------------------------------------- /src/client/views/apm/services/event.js: -------------------------------------------------------------------------------- 1 | import apis from './apis/event'; 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const service = new Service(apis); 5 | 6 | export default service; 7 | -------------------------------------------------------------------------------- /src/client/views/apm/services/monitor.js: -------------------------------------------------------------------------------- 1 | import apis from './apis/monitor.js'; 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const service = new Service(apis); 5 | 6 | export default service; 7 | -------------------------------------------------------------------------------- /src/client/views/apm/services/service.js: -------------------------------------------------------------------------------- 1 | import apis from './apis/service.js'; 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const service = new Service(apis); 5 | 6 | export default service; 7 | -------------------------------------------------------------------------------- /src/client/views/apm/services/setting.js: -------------------------------------------------------------------------------- 1 | import apis from './apis/setting'; 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const service = new Service(apis); 5 | 6 | export default service; 7 | -------------------------------------------------------------------------------- /src/client/views/apm/services/trace.js: -------------------------------------------------------------------------------- 1 | import apis from './apis/trace'; 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const service = new Service(apis); 5 | 6 | export default service; 7 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/admin/index.js: -------------------------------------------------------------------------------- 1 | import tenantQuotaService from './quota'; 2 | import kubeconfigService from './kubeconfig'; 3 | import ingressdomainsuffixService from './ingressdomainsuffix'; 4 | import calicoService from './calico'; 5 | 6 | export { 7 | kubeconfigService, 8 | tenantQuotaService, 9 | ingressdomainsuffixService, 10 | calicoService, 11 | }; -------------------------------------------------------------------------------- /src/client/views/ncs/services/admin/ingressdomainsuffix.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | 3 | const apis = { 4 | load: { 5 | method: 'get', 6 | path: '/project/{projectId}', 7 | }, 8 | modify: { 9 | method: 'post', 10 | path: '/project/{projectId}', 11 | }, 12 | loadGlobal: { 13 | method: 'get', 14 | path: '/global', 15 | }, 16 | modifyGlobal: { 17 | method: 'post', 18 | path: '/global', 19 | }, 20 | }; 21 | 22 | // /ncs/proxy 为前端代理接口需要带的前缀 23 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs/extends/ingressdomainsuffix'); 24 | 25 | export default service; 26 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/admin/kubeconfig.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | import cookie from '@micro-app/common/utils/handleCookie'; 3 | 4 | const apis = { 5 | download: { 6 | method: 'get', 7 | download: true, 8 | path: '/kubeconfig/certificate/action/download', 9 | query: { 10 | 'x-auth-accountId': cookie.readCookie('accountId'), 11 | 'x-auth-tenantId': cookie.readCookie('tenantId'), 12 | 'x-auth-projectId': cookie.readCookie('projectId'), 13 | }, 14 | }, 15 | }; 16 | 17 | // /ncs/proxy 为前端代理接口需要带的前缀 18 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs/extends'); 19 | 20 | export default service; 21 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/admin/quota.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | load: { 4 | method: 'get', 5 | path: '/clusters/{clusterId}/quota/tenant', 6 | }, 7 | modify: { 8 | method: 'post', 9 | path: '/clusters/{clusterId}/quota/tenant', 10 | }, 11 | }; 12 | 13 | // /ncs/proxy 为前端代理接口需要带的前缀 14 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs/extends'); 15 | 16 | export default service; 17 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/ceph.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | loads: { 4 | method: 'get', 5 | path: '/cephclusters', 6 | }, 7 | createCeph: { 8 | method: 'post', 9 | path: '/cephclusters', 10 | }, 11 | loadPools: { 12 | method: 'get', 13 | path: '/cephclusters/{cephClusterId}/pools', 14 | }, 15 | addPool: { 16 | method: 'post', 17 | path: '/cephclusters/{cephClusterId}/pools', 18 | }, 19 | }; 20 | 21 | // /ncs/proxy 为前端代理接口需要带的前缀 22 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs/extends'); 23 | 24 | export default service; 25 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/clusterAbout/cicd.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | load: { 4 | path: '/cicd/project/{project}', 5 | method: 'get', 6 | }, 7 | modify: { 8 | path: '/cicd/project', 9 | method: 'post', 10 | }, 11 | }; 12 | 13 | // /ncs/proxy 为前端代理接口需要带的前缀 14 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs/extends'); 15 | 16 | export default service; 17 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/clusterAbout/index.js: -------------------------------------------------------------------------------- 1 | import egressService from './egress'; 2 | import clusterService from './cluster'; 3 | import cicdService from './cicd'; 4 | import quotaService from './quota'; 5 | import securityService from './securitygroup'; 6 | 7 | export { 8 | cicdService, 9 | quotaService, 10 | egressService, 11 | clusterService, 12 | securityService, 13 | }; -------------------------------------------------------------------------------- /src/client/views/ncs/services/clusterAbout/quota.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | load: { 4 | path: '/clusters/{clusterId}/quota/{resource}', 5 | method: 'get', 6 | }, 7 | modify: { 8 | path: '/clusters/{clusterId}/quota', 9 | method: 'post', 10 | }, 11 | }; 12 | 13 | // /ncs/proxy 为前端代理接口需要带的前缀 14 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs/extends'); 15 | 16 | export default service; 17 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/clusterAbout/securitygroup.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | 3 | const apis = { 4 | loads: { 5 | method: 'get', 6 | path: '/clusters/{clusterId}/openshiftsdn/securitygroups', 7 | }, 8 | editGlobal: { 9 | method: 'post', 10 | path: '/clusters/{clusterId}/openshiftsdn/securitygroups/global', 11 | }, 12 | // 同时支持安全组的添加、设置和删除操作 13 | editJoined: { 14 | method: 'post', 15 | path: '/clusters/{clusterId}/openshiftsdn/securitygroups/joined', 16 | }, 17 | }; 18 | 19 | // /ncs/proxy 为前端代理接口需要带的前缀 20 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs/extends'); 21 | 22 | export default service; 23 | 24 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/combine/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/client/views/ncs/services/combine/index.js -------------------------------------------------------------------------------- /src/client/views/ncs/services/event.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | loads: { 4 | method: 'get', 5 | path: '/clusters/{clusterId}/namespaces/{namespace}/events', 6 | }, 7 | }; 8 | 9 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs/extends'); 10 | export default service; 11 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/helm/index.js: -------------------------------------------------------------------------------- 1 | import releaseService from './release'; 2 | import versionService from './version'; 3 | import chartService from './chart'; 4 | import helmMemberService from './member'; 5 | import helmLogService from './log'; 6 | 7 | export { 8 | releaseService, 9 | versionService, 10 | chartService, 11 | helmMemberService, 12 | helmLogService, 13 | }; -------------------------------------------------------------------------------- /src/client/views/ncs/services/helm/log.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | loads: { 4 | method: 'get', 5 | path: '/extends/helm/operations/records', 6 | process: (result) => { 7 | return { 8 | total: result.total || 0, 9 | list: result.records || [], 10 | }; 11 | }, 12 | }, 13 | }; 14 | 15 | // /ncs/proxy 为前端代理接口需要带的前缀 16 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs'); 17 | 18 | export default service; 19 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/helm/member.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | loads: { 4 | method: 'get', 5 | path: '/chartrepo/members', 6 | }, 7 | create: { 8 | method: 'post', 9 | path: '/chartrepo/member', 10 | }, 11 | delete: { 12 | method: 'delete', 13 | path: '/chartrepo/member', 14 | }, 15 | }; 16 | 17 | // /ncs/proxy 为前端代理接口需要带的前缀 18 | const service = new Service(apis, '/repo/proxy/api/v1/harborproxy'); 19 | 20 | export default service; 21 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/helm/version.js: -------------------------------------------------------------------------------- 1 | // harborproxy(第三方应用)里的project概念,与轻舟里的project做了映射 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const apis = { 5 | loads: { 6 | method: 'get', 7 | path: '/chartrepo/getVersionList', 8 | }, 9 | load: { 10 | method: 'get', 11 | path: '/chartrepo/version', 12 | }, 13 | delete: { 14 | method: 'delete', 15 | path: '/chartrepo/version', 16 | }, 17 | }; 18 | 19 | const service = new Service(apis, '/repo/proxy/api/v1/harborproxy'); 20 | export default service; 21 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/ingressController.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | loads: { 4 | method: 'get', 5 | path: '/extends/clusters/{clusterId}/ingresscontrollers/addresses', 6 | }, 7 | 8 | }; 9 | 10 | // /ncs/proxy 为前端代理接口需要带的前缀 11 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs'); 12 | 13 | export default service; 14 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/pv.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | 3 | const apis = { 4 | // todo 5 | load: { 6 | method: 'get', 7 | path: '/clusters/{clusterId}/persistentvolumes/{name}', 8 | }, 9 | loads: { 10 | method: 'get', 11 | path: '/extends/clusters/{clusterId}/storage/persistentvolumes', 12 | }, 13 | modify: { 14 | method: 'put', 15 | path: '/clusters/{clusterId}/persistentvolumes/{name}', 16 | }, 17 | delete: { 18 | method: 'delete', 19 | path: '/clusters/{clusterId}/persistentvolumes/{name}', 20 | }, 21 | }; 22 | 23 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs'); 24 | export default service; 25 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/repo/index.js: -------------------------------------------------------------------------------- 1 | import repoScanService from './scan'; 2 | import repoTagService from './tag'; 3 | import targetService from './target'; 4 | import policyService from './policy'; 5 | import jobService from './job'; 6 | import memberService from './member'; 7 | import hbProjectService from './hbProject'; 8 | import repoService from './repository'; 9 | import repoConfigService from './config'; 10 | 11 | export { 12 | repoService, 13 | repoTagService, 14 | repoScanService, 15 | jobService, 16 | targetService, 17 | policyService, 18 | memberService, 19 | hbProjectService, 20 | repoConfigService, 21 | }; -------------------------------------------------------------------------------- /src/client/views/ncs/services/repo/member.js: -------------------------------------------------------------------------------- 1 | // harborproxy(第三方应用)里的project概念,与轻舟里的project做了映射 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const apis = { 5 | // 获取用户列表 6 | loads: { 7 | path: '/{clusterId}/projects/{projectId}/getMembers', 8 | method: 'post', 9 | }, 10 | // 用户授权 11 | create: { 12 | path: '/{clusterId}/projects/{projectId}/addMember', 13 | method: 'post', 14 | }, 15 | // 移除用户 16 | remove: { 17 | path: '/{clusterId}/projects/{projectId}/deleteMember', 18 | method: 'post', 19 | }, 20 | }; 21 | 22 | const service = new Service(apis, '/repo/proxy/api/v1/harborproxy'); 23 | export default service; 24 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/repo/repository.js: -------------------------------------------------------------------------------- 1 | // harborproxy(第三方应用)里的project概念,与轻舟里的project做了映射 2 | import Service from '@micro-app/common/services/service.js'; 3 | 4 | const apis = { 5 | // 获取仓库列表 6 | loads: { 7 | path: '/{clusterId}/repositories/getRepositories', 8 | method: 'post', 9 | }, 10 | // 删除仓库 11 | delete: { 12 | path: '/{clusterId}/repositories/deleteRepository', 13 | method: 'post', 14 | }, 15 | }; 16 | 17 | const service = new Service(apis, '/repo/proxy/api/v1/harborproxy'); 18 | export default service; 19 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/repo/scan.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | scan: { 4 | method: 'post', 5 | path: '/{clusterId}/repositories/scan' 6 | }, 7 | loads: { 8 | method: 'get', 9 | path: '/{clusterId}/repositories/scanDetail', 10 | }, 11 | loadLog: { 12 | method: 'get', 13 | path: '/{clusterId}/repositories/scanLog' 14 | }, 15 | }; 16 | 17 | const service = new Service(apis, '/repo/proxy/api/v1/harborproxy'); 18 | export default service; 19 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/repo/tag.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | import { normalizeTag } from '@micro-app/common/views/ncs/utils'; 3 | const apis = { 4 | // 获取镜像列表 5 | loads: { 6 | path: '/{clusterId}/repositories/getRepoTags', 7 | method: 'get', 8 | }, 9 | load: { 10 | method: 'get', 11 | path: '/{clusterId}/repositories/getTag', 12 | process: (result) => { 13 | return normalizeTag(result.tag || {}); 14 | }, 15 | }, 16 | // 删除镜像 17 | delete: { 18 | path: '/{clusterId}/repositories/deleteTag', 19 | method: 'post', 20 | }, 21 | }; 22 | 23 | const service = new Service(apis, '/repo/proxy/api/v1/harborproxy'); 24 | export default service; 25 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/shell.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | loadStatus: { 4 | method: 'get', 5 | path: '/{clusterName}/pod/{nsName}/{podName}/shell/{containerName}', 6 | headers: { 7 | 'Content-Type': 'application/json', 8 | }, 9 | }, 10 | }; 11 | 12 | const service = new Service(apis, 'webconsole/api/v1'); 13 | 14 | export default service; 15 | -------------------------------------------------------------------------------- /src/client/views/ncs/services/workload/index.js: -------------------------------------------------------------------------------- 1 | import HPAService from './HPA'; 2 | import logService from './log'; 3 | 4 | export { 5 | HPAService, 6 | logService, 7 | }; -------------------------------------------------------------------------------- /src/client/views/ncs/services/workload/log.js: -------------------------------------------------------------------------------- 1 | import Service from '@micro-app/common/services/service.js'; 2 | const apis = { 3 | loads: { 4 | method: 'get', 5 | path: '/clusters/{clusterId}/namespaces/{namespace}/pods/{podName}/container/{containerName}/logs', 6 | }, 7 | }; 8 | 9 | // /ncs/proxy 为前端代理接口需要带的前缀 10 | const service = new Service(apis, '/ncs/proxy/api/v1/ncs/extends'); 11 | 12 | export default service; 13 | -------------------------------------------------------------------------------- /src/client/views/ncs/utils/format.js: -------------------------------------------------------------------------------- 1 | // 处理自定制的storageClass 2 | export const formatStorageClass = (model = {}) => { 3 | return { 4 | // todo 5 | k8sModel: model.item, 6 | }; 7 | }; -------------------------------------------------------------------------------- /src/client/views/ncs/utils/listMixins.js: -------------------------------------------------------------------------------- 1 | export default { 2 | computed: { 3 | nsName() { 4 | return this.$route.query.nsName; 5 | }, 6 | }, 7 | watch: { 8 | nsName(value) { 9 | // 重置 10 | this.page = 1; 11 | this.totalPage = 1; 12 | this.list = []; 13 | this.loadList() 14 | }, 15 | }, 16 | } -------------------------------------------------------------------------------- /src/client/views/ncs/utils/rules.js: -------------------------------------------------------------------------------- 1 | // cidrReg 无法通过空值的判断 2 | export const cidrReg = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([1-2][0-9]|3[0-2]|[0-9]))$/; 3 | 4 | export const cidr = [ 5 | { type: 'string', trigger: 'input', message: '', validator: (rule, value, callback) => (!value || cidrReg.test(value)) ? callback() : callback(new Error()) }, 6 | { type: 'string', trigger: 'blur', message: 'CIDR 不合法', validator: (rule, value, callback) => (!value || cidrReg.test(value)) ? callback() : callback(new Error()) }, 7 | ]; -------------------------------------------------------------------------------- /src/client/views/workloads/deployments/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /src/kubecube/assets/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/assets/empty.png -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-chart/template/index.js: -------------------------------------------------------------------------------- 1 | import chartWrppaer from '../wrapper/index.vue'; 2 | import chart from './jchart.vue'; 3 | export default { 4 | extends: chartWrppaer, 5 | data() { 6 | return { 7 | chart, 8 | }; 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-chart/template/legend-table-chart.js: -------------------------------------------------------------------------------- 1 | import chartWrppaer from '../e-chart-wrapper/index.vue'; 2 | import chart from './legend-table-chart.vue'; 3 | export default { 4 | extends: chartWrppaer, 5 | data() { 6 | return { 7 | chart, 8 | }; 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-data/data-mixin.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 3 | } -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-dynamic-table-layout/column.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 21 | 22 | 25 | -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-dynamic-table-layout/table.css: -------------------------------------------------------------------------------- 1 | .root[topAlign] { 2 | vertical-align: top; 3 | } 4 | .root > td { 5 | padding-right: 10px; 6 | } 7 | 8 | .root.static td:nth-last-child(2) { 9 | padding-right: 0; 10 | } 11 | .formTd { 12 | position: relative; 13 | width: 42px; 14 | padding: 0; 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-dynamic-table-layout/tb-del.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/component/common/kube-dynamic-table-layout/tb-del.png -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-table/normalComp.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 16 | 17 | 25 | -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-table/row-expand.js: -------------------------------------------------------------------------------- 1 | export default { 2 | props: { 3 | columns: Array, 4 | }, 5 | data() { 6 | return {}; 7 | }, 8 | render(h) { 9 | return h('tr', [ 10 | h('td', { 11 | style: { 12 | padding: '0', 13 | }, 14 | attrs: { 15 | colspan: this.columns.length, 16 | }, 17 | }, 18 | this.$slots.default 19 | ), 20 | ]); 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-table/row-group.js: -------------------------------------------------------------------------------- 1 | export default { 2 | functional: true, 3 | props: { 4 | expand: Boolean, 5 | }, 6 | render(h, { slots, props }) { 7 | const computedSlots = slots(); 8 | const children = []; 9 | if (computedSlots.content) { 10 | children.push(...computedSlots.content); 11 | } 12 | if (computedSlots.expand && props.expand) { 13 | children.push(...computedSlots.expand); 14 | } 15 | return children; 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-table/th-icon.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 18 | 19 | 39 | -------------------------------------------------------------------------------- /src/kubecube/component/common/kube-table/th-normal.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 17 | 18 | 25 | -------------------------------------------------------------------------------- /src/kubecube/component/common/slot-wrapper.js: -------------------------------------------------------------------------------- 1 | export default { 2 | functional: true, 3 | props: { 4 | slotgen: Function, 5 | item: Object, 6 | }, 7 | render(c, context) { 8 | const vnode = context.props.slotgen({ 9 | item: context.props.item, 10 | }); 11 | return vnode; 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /src/kubecube/component/global/header/preconfirm.mixin.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | methods: { 4 | beforeChange(value) { 5 | console.log(val); 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /src/kubecube/component/global/icon/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/component/global/icon/logo.png -------------------------------------------------------------------------------- /src/kubecube/component/global/icon/logout.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/kubecube/component/global/xterm/terminator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/component/global/xterm/terminator.png -------------------------------------------------------------------------------- /src/kubecube/directives/index.js: -------------------------------------------------------------------------------- 1 | import Tips from './tip'; 2 | 3 | export default [ 4 | Tips, 5 | ]; 6 | -------------------------------------------------------------------------------- /src/kubecube/directives/tip/README.md: -------------------------------------------------------------------------------- 1 | - 常规使用 2 | 3 | ```html 4 |
    这里是需要展示的内容和弹框展示的内容
    5 | ``` 6 | 7 | - 需要添加 title、class、width、height 等内容 8 | 9 | ```html 10 |
    这里是需要展示的内容和弹框展示的内容
    11 | ``` 12 | 13 | ```html 14 |
    这里是需要展示的内容和弹框展示的内容
    15 | ``` 16 | 17 | - v-tips 可不传数据,不传则直接显示innerText的内容 18 | - v-tips 传数据时,若直接传的是字符串,则直接显示传入的字符串内容,若所传字符串是空字符串,则触发显示 19 | - v-tips 传数据时,若传入为对象,仅为设置 popper 的视觉效果,所传参数和 element-ui 的 popover 参数一致。[https://element.eleme.cn/#/zh-CN/component/popover](https://element.eleme.cn/#/zh-CN/component/popover) 20 | - tip展示位置默认在`上方`显示,触发条件默认是`hover` 21 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/kubeEditor/defaultOptions.js: -------------------------------------------------------------------------------- 1 | export default { 2 | selectOnLineNumbers: true, 3 | roundedSelection: false, 4 | readOnly: false, 5 | cursorStyle: 'line', 6 | automaticLayout: true, // 自动布局 7 | glyphMargin: true, 8 | contextmenu: false, 9 | scrollbar: { 10 | verticalScrollbarSize: 6, 11 | horizontalScrollbarSize: 6, 12 | }, 13 | minimap: { enabled: false }, 14 | renderOverviewRuler: false, 15 | enableSplitViewResizing: false, 16 | }; 17 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/operate-list/operate-button-option.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/operate-list/renderVnode.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-editor/defaultOptions.js: -------------------------------------------------------------------------------- 1 | export default { 2 | selectOnLineNumbers: true, 3 | roundedSelection: false, 4 | readOnly: false, 5 | cursorStyle: 'line', 6 | automaticLayout: true, // 自动布局 7 | glyphMargin: true, 8 | contextmenu: false, 9 | scrollbar: { 10 | verticalScrollbarSize: 6, 11 | horizontalScrollbarSize: 6, 12 | }, 13 | minimap: { enabled: false }, 14 | renderOverviewRuler: false, 15 | enableSplitViewResizing: false, 16 | }; 17 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-editor/index.js: -------------------------------------------------------------------------------- 1 | import { setLocaleData } from 'monaco-editor-nls'; 2 | import zh_CN from 'monaco-editor-nls/locale/zh-hans'; 3 | setLocaleData(zh_CN); 4 | 5 | import QzEditor from './QzEditor'; 6 | 7 | export default QzEditor; 8 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-link-group/index.js: -------------------------------------------------------------------------------- 1 | import Component from './src/qz-link-group.vue'; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-link-group/src/qz-link-simple.vue: -------------------------------------------------------------------------------- 1 | 20 | 33 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-terminal/index.js: -------------------------------------------------------------------------------- 1 | import Component from './src/qz-terminal.vue'; 2 | 3 | 4 | export default Component; 5 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-terminal/src/assets/images/terminator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/elComponent/qz-terminal/src/assets/images/terminator.png -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-terminal/src/assets/svg/align-justify.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-terminal/src/assets/svg/times-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-terminal/src/assets/svg/window-maximize.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-terminal/src/assets/svg/window-minimize.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/kubecube/elComponent/qz-terminal/src/assets/svg/window-restore.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/container/status.js: -------------------------------------------------------------------------------- 1 | import { 2 | getFromModel, 3 | } from '../base'; 4 | 5 | export const toPlainObject = (model, containerName) => { 6 | const cg = getFromModel(model); 7 | const containerStatus = (cg('status.containerStatuses', []) || []); // 业务容器状态信息 8 | const initContainerStatuses = (cg('status.initContainerStatuses', []) || []); // init容器状态信息 9 | 10 | return [ ...containerStatus, ...initContainerStatuses ].find(c => c.name === containerName) || { state: { unknown: {} } }; 11 | }; 12 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/crd/index.js: -------------------------------------------------------------------------------- 1 | import { 2 | toPlainObject as toConfigPlainObject, 3 | } from '../base/config'; 4 | 5 | import { getFromModel } from '../base/utils'; 6 | 7 | export function toPlainObject(model) { 8 | const obj = toConfigPlainObject(model); 9 | const g = getFromModel(model); 10 | return { 11 | ...obj, 12 | names: g('spec.names'), // 名称 13 | group: g('spec.group'), // 组 14 | versions: (g('spec.versions') || []).map(v => v.name), // 本版 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/cronjob/status.js: -------------------------------------------------------------------------------- 1 | import { 2 | pickBy, 3 | isObjectLike, 4 | } from 'lodash'; 5 | import { 6 | getFromModel, 7 | } from '../base'; 8 | 9 | export const toPlainObject = model => { 10 | const g = getFromModel(model); 11 | return { 12 | ...pickBy(g('status'), v => !isObjectLike(v)), 13 | active: g('status.active', []), 14 | }; 15 | }; 16 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/daemonsets/status.js: -------------------------------------------------------------------------------- 1 | import { pickBy, isObjectLike } from 'lodash'; 2 | import { 3 | getFromModel, 4 | } from '../base'; 5 | 6 | export const toPlainObject = model => { 7 | const cg = getFromModel(model); 8 | return { 9 | ...pickBy(model, v => !isObjectLike(v)), 10 | conditions: cg('status.conditions', []), 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/deployment/status.js: -------------------------------------------------------------------------------- 1 | import { 2 | getFromModel, 3 | } from '../base'; 4 | 5 | export const toPlainObject = model => { 6 | const cg = getFromModel(model); 7 | return { 8 | desired: cg('spec.replicas', 0), // 预期的副本数 9 | updated: cg('status.updatedReplicas', 0), // 已经是最新版本的副本数 10 | available: cg('status.availableReplicas', 0), // 可用副本数 11 | unavailable: cg('status.unavailableReplicas', 0), // 不可用副本数 12 | total: cg('status.replicas', 0), // 总副本数 13 | conditions: cg('status.conditions', []), // 状况条目 14 | readyReplicas: cg('status.readyReplicas', 0), // 就绪副本 15 | }; 16 | }; 17 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/event/index.js: -------------------------------------------------------------------------------- 1 | import { pick } from 'lodash'; 2 | import { 3 | toPlainObject as toMetadataPlainObject, 4 | } from '../metadata'; 5 | 6 | export const toPlainObject = model => { 7 | const obj = { 8 | metadata: toMetadataPlainObject(model), 9 | ...pick(model, [ 10 | 'count', 11 | 'message', // 消息 12 | 'reason', // 原因 13 | 'firstTimestamp', // 首次出现时间 14 | 'lastTimestamp', // 上次出现时间 15 | 'involvedObject.fieldPath', // 事件对象filePath 16 | ]), 17 | 18 | }; 19 | // console.log(obj); 20 | return obj; 21 | }; 22 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/ingress/status.js: -------------------------------------------------------------------------------- 1 | import { 2 | getFromModel, 3 | } from '../base'; 4 | 5 | export const toPlainObject = model => { 6 | const cg = getFromModel(model); 7 | return cg('status'); 8 | }; 9 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/label-selector.js: -------------------------------------------------------------------------------- 1 | import { 2 | omitBy, 3 | isEmpty, 4 | zipObjectDeep, 5 | } from 'lodash'; 6 | import { 7 | getFromModel, 8 | toObjectArray, 9 | KVtoObject, 10 | } from './base'; 11 | 12 | export const toPlainObject = (model, mode = 'normal') => { 13 | const g = getFromModel(model); 14 | const obj = { 15 | matchLabels: toObjectArray(g('selector.matchLabels', {}), 'key', 'value'), 16 | }; 17 | return obj; 18 | }; 19 | 20 | 21 | export const toK8SObject = model => {}; 22 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/monitor/index.js: -------------------------------------------------------------------------------- 1 | import { 2 | toPlainObject as toCommonPlainObject, 3 | } from '../base/common'; 4 | import { 5 | toPlainObject as toSpecPlainObject, 6 | } from './spec'; 7 | 8 | export function toPlainObject(model) { 9 | return toCommonPlainObject(model)({ 10 | toSpecPlainObject, 11 | toStatusPlainObject: () => ({}), 12 | }); 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/persistentvolumeclaim/status.js: -------------------------------------------------------------------------------- 1 | import { 2 | getFromModel, 3 | } from '../base'; 4 | 5 | export const toPlainObject = model => { 6 | const cg = getFromModel(model); 7 | return cg('status'); 8 | }; 9 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/persistentvolumes/index.js: -------------------------------------------------------------------------------- 1 | import { 2 | toPlainObject as toCommonPlainObject, 3 | } from '../base/common'; 4 | import { 5 | toPlainObject as toSpecPlainObject, 6 | } from './spec'; 7 | 8 | import { 9 | toPlainObject as toStatusPlainObject, 10 | } from './status'; 11 | 12 | export function toPlainObject(model) { 13 | return toCommonPlainObject(model)({ 14 | toSpecPlainObject, 15 | toStatusPlainObject, 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/persistentvolumes/spec.js: -------------------------------------------------------------------------------- 1 | // import { pickBy, isObjectLike } from 'lodash'; 2 | import { getFromModel } from '../base/utils'; 3 | 4 | 5 | export const toPlainObject = model => { 6 | const g = getFromModel(model); 7 | return g('spec'); 8 | }; 9 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/persistentvolumes/status.js: -------------------------------------------------------------------------------- 1 | import { 2 | getFromModel, 3 | } from '../base'; 4 | 5 | export const toPlainObject = model => { 6 | const cg = getFromModel(model); 7 | return cg('status'); 8 | }; 9 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/pod/pod-template.js: -------------------------------------------------------------------------------- 1 | 2 | import { 3 | toPlainObject as toBasePlainObject, 4 | getFromModel, 5 | } from '../base'; 6 | import { 7 | toPlainObject as toMetadataPlainObject, 8 | // toK8SObject as toMetadataK8SObject, 9 | } from '../metadata'; 10 | 11 | import { 12 | toPlainObject as toPodSpecPlainObject, 13 | } from './pod-spec'; 14 | 15 | export const toPlainObject = model => { 16 | const g = getFromModel(model); 17 | return { 18 | metadata: toMetadataPlainObject(model), 19 | spec: toPodSpecPlainObject(g('spec')), 20 | }; 21 | }; 22 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/service/status.js: -------------------------------------------------------------------------------- 1 | import { 2 | getFromModel, 3 | } from '../base'; 4 | 5 | export const toPlainObject = model => { 6 | const cg = getFromModel(model); 7 | const ingress = cg('status.loadBalancer.ingress') || []; 8 | return { 9 | conditions: cg('status.conditions', []), 10 | loadBalancer: { 11 | ingress: ingress.map(i => `${i.hostname || i.ip}`).join(','), 12 | }, 13 | // loadBalancer: 14 | }; 15 | }; 16 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/statefulset/status.js: -------------------------------------------------------------------------------- 1 | import { 2 | getFromModel, 3 | } from '../base'; 4 | 5 | export const toPlainObject = model => { 6 | const cg = getFromModel(model); 7 | return { 8 | desired: cg('spec.replicas', 0), 9 | total: cg('status.replicas', 0), 10 | readyReplicas: cg('status.readyReplicas', 0), 11 | conditions: cg('status.conditions', []), 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /src/kubecube/k8s-resources/subnamespace/index.js: -------------------------------------------------------------------------------- 1 | export function toK8SObject({ 2 | namespace, 3 | tenant, 4 | project, 5 | scope, 6 | }) { 7 | return { 8 | apiVersion: 'hnc.x-k8s.io/v1alpha2', 9 | kind: 'SubnamespaceAnchor', 10 | metadata: { 11 | labels: { 12 | 'kubecube.io/project': project, 13 | 'kubecube.io/tenant': tenant, 14 | }, 15 | name: namespace, 16 | namespace: scope, 17 | }, 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /src/kubecube/mixins/functional.js: -------------------------------------------------------------------------------- 1 | export const makeVModelMixin = { 2 | props: { 3 | value: { 4 | type: [ String, Number, Boolean, Array, Object ], 5 | require: true, 6 | }, 7 | }, 8 | model: { 9 | event: 'change', 10 | prop: 'value', 11 | }, 12 | computed: { 13 | model: { 14 | get() { 15 | return this.value; 16 | }, 17 | set(val) { 18 | this.$emit('change', val); 19 | }, 20 | }, 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /src/kubecube/mixins/index.js: -------------------------------------------------------------------------------- 1 | import validators from './validators'; 2 | import pagenation from './pagenation'; 3 | export const pagenationMixin = pagenation; 4 | export const validatorsMixin = validators; 5 | -------------------------------------------------------------------------------- /src/kubecube/mixins/pipe/kube-pipe.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /src/kubecube/mixins/validators.js: -------------------------------------------------------------------------------- 1 | import * as validators from 'kubecube/utils/validators'; 2 | export default { 3 | data() { 4 | return { 5 | validators, 6 | }; 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /src/kubecube/plugins/vee-validate.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import { 3 | ValidationObserver, 4 | ValidationProvider, 5 | extend, setInteractionMode, 6 | } from 'vee-validate'; 7 | 8 | import { rules } from './validators'; 9 | // Register it globally 10 | Vue.component('ValidationObserver', ValidationObserver); 11 | Vue.component('ValidationProvider', ValidationProvider); 12 | 13 | setInteractionMode('eager'); 14 | 15 | Object.keys(rules).forEach(rule => { 16 | extend(rule, rules[rule]); 17 | }); 18 | -------------------------------------------------------------------------------- /src/kubecube/plugins/vue-meta.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import VueMeta from 'vue-meta'; 3 | Vue.use(VueMeta, { 4 | refreshOnceOnNavigation: true, 5 | }); 6 | 7 | -------------------------------------------------------------------------------- /src/kubecube/router/control-namespace.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | path: 'namespace', 4 | name: 'namespace', 5 | component: () => import(/* webpackChunkName: "control-namespace" */'kubecube/views/control/namespace.vue'), 6 | }; 7 | -------------------------------------------------------------------------------- /src/kubecube/router/user.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | path: 'metauser', 4 | name: 'metauser', 5 | component: () => import(/* webpackChunkName: "user-chunk" */'kubecube/views/user/index.vue'), 6 | redirect: { name: 'metauser.openapi' }, 7 | children: [ 8 | { 9 | path: 'openapi', 10 | name: 'metauser.openapi', 11 | component: () => import(/* webpackChunkName: "user-chunk" */'kubecube/views/user/open-api.vue'), 12 | meta: { 13 | breadCrumb: '秘钥管理', 14 | }, 15 | }, 16 | 17 | ], 18 | }; 19 | -------------------------------------------------------------------------------- /src/kubecube/router/wrapper.js: -------------------------------------------------------------------------------- 1 | export default { 2 | render(h) { 3 | return h('router-view', { 4 | props: { 5 | ...this.$attrs, 6 | }, 7 | }, this.$slots.default); 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /src/kubecube/services/audit.js: -------------------------------------------------------------------------------- 1 | import Service from './service'; 2 | import { userInterceptor } from './interceptor'; 3 | const userService = Service({ 4 | baseURL: '/api/v1/', 5 | apis: { 6 | getAudit: { 7 | url: '/audit', 8 | method: 'get', 9 | }, 10 | exportAudit: { 11 | url: '/audit/export', 12 | method: 'get', 13 | }, 14 | enabled: { 15 | url: '/audit/enabled', 16 | method: 'get', 17 | }, 18 | }, 19 | }); 20 | 21 | userInterceptor(userService.axiosInstance); 22 | 23 | export default userService; 24 | 25 | -------------------------------------------------------------------------------- /src/kubecube/services/interceptor.js: -------------------------------------------------------------------------------- 1 | export function userInterceptor(instance) { 2 | 3 | instance.interceptors.response.use(function(response) { 4 | const { status, headers } = response; 5 | if (status === 200) { 6 | if (headers['content-length'] !== 0 && headers['content-type'] && headers['content-type'].startsWith('application/json')) { 7 | return response.data; 8 | } 9 | return response; 10 | } 11 | return response; 12 | }, function(error) { 13 | return Promise.reject(error); 14 | }); 15 | } 16 | -------------------------------------------------------------------------------- /src/kubecube/services/k8s-common-extend-resource.js: -------------------------------------------------------------------------------- 1 | import Service from './service'; 2 | import { userInterceptor } from './interceptor'; 3 | 4 | const service = Service({ 5 | baseURL: 'api/v1/cube/extend', 6 | apis: { 7 | getResources: { 8 | method: 'get', 9 | template: '/{resource}', 10 | }, 11 | }, 12 | 13 | }); 14 | 15 | userInterceptor(service.axiosInstance); 16 | export default service; 17 | -------------------------------------------------------------------------------- /src/kubecube/services/namespace.js: -------------------------------------------------------------------------------- 1 | import Service from './service'; 2 | import { userInterceptor } from './interceptor'; 3 | 4 | const service = Service({ 5 | baseURL: '/api/v1/cube/proxy/clusters', 6 | apis: { 7 | getNamespaces: { 8 | template: '/{cluster}/api/v1/namespaces', 9 | method: 'get', 10 | }, 11 | getNamespaceInstance: { 12 | template: '/{cluster}/api/v1/namespaces/{name}', 13 | method: 'get', 14 | }, 15 | updatetNamespaceInstance: { 16 | template: '/{cluster}/api/v1/namespaces/{name}', 17 | method: 'put', 18 | }, 19 | }, 20 | }); 21 | 22 | userInterceptor(service.axiosInstance); 23 | export default service; 24 | -------------------------------------------------------------------------------- /src/kubecube/services/webconsole.js: -------------------------------------------------------------------------------- 1 | import Service from './service'; 2 | import { userInterceptor } from './interceptor'; 3 | 4 | const service = Service({ 5 | baseURL: '/api/v1/webconsole', 6 | apis: { 7 | connect: { 8 | method: 'get', 9 | template: '/{cluster}/namespace/{namespace}/pod/{pod}/shell/{container}', 10 | }, 11 | connectCloudShell: { 12 | method: 'get', 13 | template: '/extends/cloudShell/clusters/{cluster}', 14 | }, 15 | }, 16 | }); 17 | 18 | userInterceptor(service.axiosInstance); 19 | export default service; 20 | -------------------------------------------------------------------------------- /src/kubecube/store/feature.js: -------------------------------------------------------------------------------- 1 | import { make } from 'vuex-pathify'; 2 | import userService from 'kubecube/services/user'; 3 | 4 | const state = { 5 | features: {}, 6 | }; 7 | const actions = { 8 | async loadFeature({ commit }) { 9 | const response = await userService.getFeatures(); 10 | const obj = {}; 11 | Object.keys(response).forEach(k => { 12 | obj[k] = (response[k] === 'enabled' || response[k] === 'true'); 13 | }); 14 | commit('SET_FEATURES', obj); 15 | }, 16 | }; 17 | const mutations = { 18 | ...make.mutations(state), 19 | }; 20 | 21 | export default { 22 | namespaced: true, 23 | state, 24 | mutations, 25 | actions, 26 | }; 27 | -------------------------------------------------------------------------------- /src/kubecube/store/snackbar.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | content: '', 3 | color: '', 4 | }; 5 | const mutations = { 6 | SHOW_MESSAGE(state, message) { 7 | state.content = message.content || ''; 8 | state.color = message.color || ''; 9 | }, 10 | }; 11 | 12 | export default { 13 | namespaced: true, 14 | state, 15 | mutations, 16 | }; 17 | -------------------------------------------------------------------------------- /src/kubecube/utils/persistant.js: -------------------------------------------------------------------------------- 1 | const localStorage = window.localStorage; 2 | 3 | export function setItem(key, value) { 4 | localStorage.setItem(key, value); 5 | } 6 | 7 | export function removeItem(key) { 8 | localStorage.removeItem(key); 9 | } 10 | 11 | export function getItem(key) { 12 | return localStorage.getItem(key); 13 | } 14 | -------------------------------------------------------------------------------- /src/kubecube/views/circle/no-right.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/edit/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/edit/demo.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_add.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_add@2x.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_add_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_add_hover.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_add_hover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_add_hover@2x.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_cancel.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_cancel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_cancel@2x.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_close.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_close@2x.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_close_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_close_hover.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_close_hover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_close_hover@2x.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_删除.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_删除.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_删除@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_删除@2x.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_删除_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_删除_hover.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/assets/ic_删除_hover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/control/logseer/lens/components/assets/ic_删除_hover@2x.png -------------------------------------------------------------------------------- /src/kubecube/views/control/logseer/lens/components/filter-utils.js: -------------------------------------------------------------------------------- 1 | 2 | export const OPERATOR_MAP = { 3 | is: '=', 4 | }; 5 | export const operators = [ 'is' ]; 6 | 7 | export function buildfilter( 8 | cluster, namespace, isNode 9 | ) { 10 | const filters = []; 11 | if (cluster) { 12 | filters.push({ 13 | key: 'cluster_name', 14 | operator: 'is', 15 | value: cluster, 16 | }); 17 | } 18 | if (!isNode && namespace) { 19 | filters.push({ 20 | key: 'namespace', 21 | operator: 'is', 22 | value: namespace, 23 | }); 24 | } 25 | return filters; 26 | } 27 | -------------------------------------------------------------------------------- /src/kubecube/views/control/observable/utils.js: -------------------------------------------------------------------------------- 1 | export const specCRD = { 2 | group: 'monitoring.coreos.com', 3 | version: 'v1alpha1', 4 | plural: 'alertmanagerconfigs', 5 | }; 6 | 7 | export const rulespecCRD = { 8 | group: 'monitoring.coreos.com', 9 | version: 'v1', 10 | plural: 'prometheusrules', 11 | }; 12 | 13 | export const critical = [ 14 | { text: '轻微', value: 'info' }, 15 | { text: '一般', value: 'warning' }, 16 | { text: '紧急', value: 'critical' }, 17 | ]; 18 | -------------------------------------------------------------------------------- /src/kubecube/views/control/overview/dashboard.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /src/kubecube/views/login/assets/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/login/assets/bg.jpg -------------------------------------------------------------------------------- /src/kubecube/views/login/assets/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/src/kubecube/views/login/assets/github.png -------------------------------------------------------------------------------- /src/kubecube/views/platform/cluster/node/monitor.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /template/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Kubecube 7 | 8 | 9 | 10 | 11 |
    12 | 13 |
    14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /template/index.prod.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Kubecube 7 | 8 | 9 | 10 | 11 |
    12 | 13 |
    14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /template/kubecube.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | KubeCube 8 | 9 | 10 |
    11 | 12 | 13 | -------------------------------------------------------------------------------- /ui/cobalt/.version: -------------------------------------------------------------------------------- 1 | 0.3.103-0.3.69 -------------------------------------------------------------------------------- /ui/cobalt/assets/0153905e/remove.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/cobalt/assets/0a391d61/rotate-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /ui/cobalt/assets/0d506648/close-small.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ui/cobalt/assets/1cdd5651/waiting.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ui/cobalt/assets/294b2600/move_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/ui/cobalt/assets/294b2600/move_icon.png -------------------------------------------------------------------------------- /ui/cobalt/assets/3b9d1a92/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/ui/cobalt/assets/3b9d1a92/empty.png -------------------------------------------------------------------------------- /ui/cobalt/assets/3b9d1a92/nodata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/ui/cobalt/assets/3b9d1a92/nodata.png -------------------------------------------------------------------------------- /ui/cobalt/assets/3c7c1a28/arrow-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /ui/cobalt/assets/46d9e0d2/arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /ui/cobalt/assets/52976143/arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ui/cobalt/assets/5b602238/create.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | create 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ui/cobalt/assets/5fe93a07/edit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/cobalt/assets/78465218/stripe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/ui/cobalt/assets/78465218/stripe.png -------------------------------------------------------------------------------- /ui/cobalt/assets/81c2ac42/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ui/cobalt/assets/90b71868/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ui/cobalt/assets/90b71868/list_no_response.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ui/cobalt/assets/9d4c13fb/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ui/cobalt/assets/9fc757e9/shadow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/ui/cobalt/assets/9fc757e9/shadow-up.png -------------------------------------------------------------------------------- /ui/cobalt/assets/aa3eaa22/angle-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/cobalt/assets/b4208d94/shadow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/ui/cobalt/assets/b4208d94/shadow-down.png -------------------------------------------------------------------------------- /ui/cobalt/assets/bfbeb69f/alert.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /ui/cobalt/assets/c4ebc54c/arrow-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /ui/cobalt/assets/cd90a7ab/keyboard-arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ui/cobalt/assets/d171fbf3/high.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubecube-io/kubecube-front/7adeb5840a03415802f871a6f5a5dcee9a57e3f9/ui/cobalt/assets/d171fbf3/high.png -------------------------------------------------------------------------------- /ui/cobalt/assets/d5760e94/add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/cobalt/assets/dea22f5d/logout.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ui/cobalt/assets/e74746f4/rotate-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /ui/cobalt/assets/ec271fc6/keyboard-arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ui/cobalt/assets/edef239a/dropdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ui/cobalt/assets/fc02eb53/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /ui/cobalt/assets/ff31c253/arrow-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | --------------------------------------------------------------------------------