├── .bailingual.config.js ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .github └── workflows │ ├── bundleSize.yaml │ └── copyright.yaml ├── .gitignore ├── .husky └── pre-commit ├── .licenserc.yaml ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .secignore ├── LEGAL.md ├── LICENSE ├── README.md ├── build ├── electron-build.config.js ├── icon.ico ├── icon.png ├── icons │ ├── 1024x1024.png │ ├── 256x256.png │ └── 512x512.png ├── setting.json ├── webpack.base.config.js ├── webpack.main.config.js └── webpack.main.prod.config.js ├── config ├── config.client.js ├── config.js ├── define │ ├── client.js │ └── default.js ├── defineConfig.js ├── routes.js ├── theme.js └── version.js ├── docs └── README_CN.md ├── jest.config.js ├── jestSetup.js ├── libraries ├── script │ └── preload.js └── splash-screen │ ├── img │ ├── ob_logo.png │ ├── ob_logo.svg │ ├── odc_logo.png │ ├── spinner.svg │ └── splash.jpg │ └── index.html ├── package.json ├── plugin.ts ├── pnpm-lock.yaml ├── public ├── 404.html ├── DIN-Alternate-Bold.woff ├── alibaba-puhui-title.woff ├── help │ └── feedback_qrcode.jpg ├── img │ ├── 403.svg │ ├── 404.svg │ ├── 500.svg │ ├── Graphic_ODC.png │ ├── add.svg │ ├── bg.png │ ├── browser_version.png │ ├── chrome.png │ ├── doc_insert.svg │ ├── edge.png │ ├── emoji_welcome.svg │ ├── en-us │ │ ├── login_logo.png │ │ ├── menu_logo.png │ │ ├── newVersion │ │ │ ├── drag.gif │ │ │ ├── record.jpg │ │ │ ├── sqlconsole.jpg │ │ │ ├── task.gif │ │ │ └── workspace.jpg │ │ ├── resource_group.png │ │ └── version_icon.png │ ├── favicon.png │ ├── firefox.png │ ├── graphic_empty.png │ ├── graphic_empty.svg │ ├── login-slice1.png │ ├── login-slice2.png │ ├── login-slice3.png │ ├── login-slice4.png │ ├── loginbg.png │ ├── logo2.png │ ├── logo3.png │ ├── logov2.png │ ├── manage_index_bg.png │ ├── manage_index_resource.png │ ├── manage_index_risk.png │ ├── manage_index_task.png │ ├── menu_logo.png │ ├── ob.svg │ ├── ob2.png │ ├── ob_black_logo.png │ ├── ob_logo.svg │ ├── ocp_logo.png │ ├── ocp_logo_text.png │ ├── odc_icon.svg │ ├── oms_logo.png │ ├── oms_logo_text.png │ ├── portal-create-connection.png │ ├── profile.jpeg │ ├── role-empty.png │ ├── safari.png │ ├── theme-dark.png │ ├── theme-white.png │ ├── versionImg │ │ ├── archive.jpg │ │ ├── developer.jpg │ │ ├── flow.jpg │ │ ├── inject.jpg │ │ ├── safe.jpg │ │ └── user.jpg │ ├── zh-cn │ │ ├── login_logo.png │ │ ├── menu_logo.png │ │ ├── newVersion │ │ │ ├── drag.gif │ │ │ ├── record.jpg │ │ │ ├── sqlconsole.jpg │ │ │ ├── task.gif │ │ │ └── workspace.jpg │ │ ├── resource_group.png │ │ └── version_icon.png │ └── zh-tw │ │ ├── login_logo.png │ │ ├── menu_logo.png │ │ ├── newVersion │ │ ├── drag.gif │ │ ├── record.jpg │ │ ├── sqlconsole.jpg │ │ ├── task.gif │ │ └── workspace.jpg │ │ ├── resource_group.png │ │ └── version_icon.png └── rareWordsFont.ttf ├── scripts ├── antdTheme.js ├── client │ └── build.js ├── clientDependencies │ ├── checker.js │ ├── index.js │ ├── pullJar.js │ ├── pullJre.js │ ├── pullOBClient.js │ └── util.js ├── must.js ├── ossUtil │ ├── config.js │ └── index.js ├── plugin │ ├── initPlugins.js │ └── sync.js ├── publicPathChange.js ├── pulldoc.js └── removeUnusedLocaleKey.js ├── src ├── app.ts ├── common │ ├── datasource │ │ ├── doris │ │ │ └── index.tsx │ │ ├── fileSystem │ │ │ └── index.tsx │ │ ├── index.tsx │ │ ├── interface.ts │ │ ├── mysql │ │ │ └── index.tsx │ │ ├── oceanbase │ │ │ ├── MySQLColumnExtra.tsx │ │ │ ├── OracleColumnExtra.tsx │ │ │ ├── obmysql.ts │ │ │ └── oboracle.ts │ │ ├── oracle │ │ │ └── index.tsx │ │ └── pg │ │ │ └── index.tsx │ ├── exception │ │ └── index.tsx │ ├── metaStore │ │ ├── index.ts │ │ ├── indexDBStore │ │ │ └── index.ts │ │ └── localStorageStore │ │ │ └── index.ts │ └── network │ │ ├── cloud.ts │ │ ├── connection.ts │ │ ├── database.ts │ │ ├── databaseChange.ts │ │ ├── debug.ts │ │ ├── env.ts │ │ ├── exportAndImport.ts │ │ ├── function.ts │ │ ├── index.ts │ │ ├── interface.ts │ │ ├── logicalDatabase.ts │ │ ├── manager.ts │ │ ├── mask.ts │ │ ├── maskingAlgorithm.ts │ │ ├── obcloud.ts │ │ ├── organization.ts │ │ ├── other.ts │ │ ├── pathUtil.ts │ │ ├── procedure.ts │ │ ├── project.ts │ │ ├── projectNotification.ts │ │ ├── recycle.ts │ │ ├── riskDetectRule.ts │ │ ├── riskLevel.ts │ │ ├── ruleset.ts │ │ ├── script.ts │ │ ├── sensitiveColumn.ts │ │ ├── sensitiveRule.ts │ │ ├── sequence.ts │ │ ├── sessionParams.ts │ │ ├── snippet.ts │ │ ├── sql │ │ ├── executePL.tsx │ │ ├── executePLForMysql.tsx │ │ ├── executeSQL.tsx │ │ ├── index.ts │ │ └── preHandle.tsx │ │ ├── synonym.ts │ │ ├── table │ │ ├── helper.ts │ │ └── index.ts │ │ ├── task.ts │ │ ├── trigger.ts │ │ ├── type.ts │ │ ├── view.ts │ │ └── webterminal.ts ├── component │ ├── Acess │ │ └── index.tsx │ ├── Action │ │ ├── Group.tsx │ │ ├── Item.tsx │ │ └── index.tsx │ ├── AddDataSourceDropdown │ │ └── index.tsx │ ├── AskEventTrackingModal │ │ ├── index.less │ │ └── index.tsx │ ├── BatchImportButton │ │ ├── index.less │ │ ├── index.tsx │ │ └── modal.tsx │ ├── BatchSelectionPopover │ │ ├── index.less │ │ └── index.tsx │ ├── BigSelect │ │ ├── index.less │ │ └── index.tsx │ ├── Button │ │ ├── Delete │ │ │ └── index.tsx │ │ ├── FIlterIcon │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── Reload │ │ │ └── index.tsx │ │ └── SyncMetadata │ │ │ └── index.tsx │ ├── ChangePasswordModal │ │ └── index.tsx │ ├── CheckboxTag │ │ ├── index.less │ │ └── index.tsx │ ├── CommonCopyIcon │ │ └── index.tsx │ ├── CommonFilter │ │ ├── index.less │ │ └── index.tsx │ ├── CommonIDE │ │ ├── index.less │ │ └── index.tsx │ ├── CommonTable │ │ ├── TableInfo.tsx │ │ ├── Toolbar.tsx │ │ ├── component │ │ │ ├── FilterContent.tsx │ │ │ ├── OperationContent.tsx │ │ │ ├── ResizeTitle.tsx │ │ │ ├── TitleContent.tsx │ │ │ └── index.tsx │ │ ├── const.ts │ │ ├── index.less │ │ ├── index.tsx │ │ └── interface.ts │ ├── ConnectPassowrd │ │ └── index.tsx │ ├── ConnectionPopover │ │ ├── index.less │ │ └── index.tsx │ ├── CreateFunctionModal │ │ └── index.tsx │ ├── CreatePackageModal │ │ └── index.tsx │ ├── CreateProcedureModal │ │ └── index.tsx │ ├── CreateSynonymModal │ │ ├── index.less │ │ └── index.tsx │ ├── CreateTypeModal │ │ └── index.tsx │ ├── Crontab │ │ ├── const.ts │ │ ├── index.less │ │ ├── index.tsx │ │ ├── input.tsx │ │ ├── interface.ts │ │ └── utils.ts │ ├── DDLResultSetFilter │ │ ├── index.less │ │ └── index.tsx │ ├── DataTypeSelect │ │ └── index.tsx │ ├── DelimiterSelect │ │ └── index.tsx │ ├── DisplayTable │ │ ├── index.less │ │ ├── index.tsx │ │ └── virtual.tsx │ ├── DndHTML5Provider │ │ └── index.tsx │ ├── Dragable │ │ ├── component │ │ │ ├── DragWrapper │ │ │ │ └── index.tsx │ │ │ └── DropWrapper │ │ │ │ └── index.tsx │ │ └── index.tsx │ ├── Drawer │ │ ├── index.less │ │ └── index.tsx │ ├── DropdownMenu │ │ ├── index.less │ │ └── index.tsx │ ├── EditPLParamsModal │ │ ├── ValueInput.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── EditorToolBar │ │ ├── actions │ │ │ ├── pl.tsx │ │ │ ├── script.tsx │ │ │ ├── sql.tsx │ │ │ └── text.tsx │ │ ├── config.ts │ │ └── index.tsx │ ├── Empty │ │ ├── DataSourceEmpty │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ProjectEmpty │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SQLConsoleEmpty │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── ScanRuleEmpty │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── ErrorBoundary │ │ └── index.tsx │ ├── ErrorConfirmModal │ │ └── index.tsx │ ├── Exception │ │ ├── index.less │ │ ├── index.tsx │ │ └── typeConfig.js │ ├── ExecuteSQLModal │ │ ├── index.less │ │ └── index.tsx │ ├── ExecuteSqlDetailModal │ │ ├── constant.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── ExportCard │ │ ├── index.less │ │ └── index.tsx │ ├── FormItemPanel │ │ ├── index.less │ │ └── index.tsx │ ├── GrammerHelpSider │ │ ├── ItemTypes.tsx │ │ ├── component │ │ │ ├── CustomDragLayer │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── SnippetCard │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── SnippetForm │ │ │ │ └── index.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── HeaderBtn │ │ ├── index.less │ │ └── index.tsx │ ├── HelpMenus │ │ ├── components │ │ │ ├── ModalHelpAbout │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── ModalHelpFeedBack │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── ImgCheckboxGroup │ │ ├── index.less │ │ └── index.tsx │ ├── Input │ │ ├── Case │ │ │ └── index.tsx │ │ ├── Keymap │ │ │ ├── helper.ts │ │ │ ├── index.tsx │ │ │ └── keycodemap.ts │ │ └── Search.tsx │ ├── InputBigNumber │ │ ├── index.tsx │ │ └── valid.ts │ ├── Loading │ │ ├── WorkSpacePageLoading │ │ │ └── index.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── LocalMenus │ │ └── index.tsx │ ├── LockResultSetHint │ │ ├── index.less │ │ └── index.tsx │ ├── Log │ │ ├── component │ │ │ ├── Line.tsx │ │ │ └── Search.tsx │ │ ├── hooks.ts │ │ ├── index.tsx │ │ ├── languageHighlight.tsx │ │ ├── style │ │ │ └── index.less │ │ ├── typings.ts │ │ └── utils.ts │ ├── Login │ │ ├── ActivateForm.tsx │ │ ├── LoginForm.tsx │ │ ├── RegisterForm.tsx │ │ ├── _util.ts │ │ ├── index.less │ │ └── index.tsx │ ├── LoginMenus │ │ └── ChangeLockPwdModal.tsx │ ├── Manage │ │ ├── DeleteModal │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── DetailModal │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ResourceSelector │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── RoleList │ │ │ └── index.tsx │ │ ├── Status │ │ │ └── index.tsx │ │ └── UserResource │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── MaskPolicySelecter │ │ ├── config.ts │ │ └── index.tsx │ ├── MonacoEditor │ │ ├── DiffEditor.tsx │ │ ├── PlaceholderContentWidget.ts │ │ ├── config.ts │ │ ├── index.less │ │ ├── index.tsx │ │ └── plugins │ │ │ ├── languageSupport │ │ │ └── groovy.ts │ │ │ ├── marker │ │ │ └── index.tsx │ │ │ ├── ob-language │ │ │ ├── index.tsx │ │ │ └── service.ts │ │ │ ├── snippet │ │ │ └── index.tsx │ │ │ └── theme │ │ │ ├── github.ts │ │ │ ├── index.ts │ │ │ └── monokai.ts │ ├── MultiLineOverflowText │ │ ├── index.less │ │ └── index.tsx │ ├── ODCSetting │ │ ├── Item │ │ │ ├── InputItem.tsx │ │ │ ├── RadioItem.tsx │ │ │ ├── SelectItem.tsx │ │ │ └── TextItem.tsx │ │ ├── config.tsx │ │ ├── config │ │ │ ├── account.tsx │ │ │ ├── database.tsx │ │ │ ├── editor.tsx │ │ │ ├── performance.tsx │ │ │ └── preference.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── OSSDragger │ │ ├── Upload.tsx │ │ └── index.tsx │ ├── OSSDragger2 │ │ ├── FileList.tsx │ │ ├── FileListItem.tsx │ │ ├── index.less │ │ ├── index.tsx │ │ ├── interface.ts │ │ └── request.ts │ ├── ObjectInfoView │ │ ├── index.less │ │ └── index.tsx │ ├── PageContainer │ │ ├── index.less │ │ └── index.tsx │ ├── PageLoading │ │ ├── index.less │ │ └── index.tsx │ ├── PartitionRange │ │ ├── DragableRange.tsx │ │ ├── PartitionValueInput.less │ │ ├── PartitionValueInput.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── ProcedureParam │ │ ├── ExtraOptions.tsx │ │ └── index.tsx │ ├── ProfileFlow │ │ ├── constant.ts │ │ ├── customComponents │ │ │ ├── Control.tsx │ │ │ ├── DetailBox.tsx │ │ │ ├── Edge.tsx │ │ │ ├── Node.tsx │ │ │ └── index.less │ │ ├── index.less │ │ ├── index.tsx │ │ ├── treeLayout.ts │ │ └── utils.ts │ ├── PropertyModal │ │ ├── index.less │ │ └── index.tsx │ ├── RAMAuthAlertInfo │ │ └── index.tsx │ ├── RadioTag │ │ ├── index.less │ │ └── index.tsx │ ├── RecordPopover │ │ ├── column.tsx │ │ ├── components.tsx │ │ └── index.tsx │ ├── RiskLevelLabel │ │ ├── index.less │ │ └── index.tsx │ ├── SQLCodePreviewer │ │ ├── index.less │ │ └── index.tsx │ ├── SQLConfig │ │ ├── SQLConfigContext.ts │ │ ├── index.less │ │ └── index.tsx │ ├── SQLContent │ │ ├── index.less │ │ └── index.tsx │ ├── SQLExecuteModal │ │ └── index.tsx │ ├── SQLLintResult │ │ ├── Drawer.tsx │ │ ├── RuleResult.tsx │ │ ├── index.less │ │ ├── index.tsx │ │ └── type.ts │ ├── SaveSQLModal │ │ └── index.tsx │ ├── ScriptPage │ │ ├── index.less │ │ └── index.tsx │ ├── SearchFilter │ │ ├── index.less │ │ └── index.tsx │ ├── SelectDatabase │ │ └── index.tsx │ ├── SelectPackagePLModal │ │ └── index.tsx │ ├── SelectTransfer │ │ ├── Card │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── SideTip │ │ ├── Dragger.tsx │ │ ├── IconLoading.tsx │ │ ├── index.tsx │ │ ├── style │ │ │ └── index.less │ │ └── utils.ts │ ├── SimpleTextItem │ │ └── index.tsx │ ├── SortableContainer │ │ └── index.tsx │ ├── StatusBar │ │ ├── index.less │ │ └── index.tsx │ ├── StatusIcon │ │ ├── DataSourceIcon.tsx │ │ └── DatabaseIcon.tsx │ ├── StatusSwitch │ │ ├── index.less │ │ └── index.tsx │ ├── SubmitConfirm │ │ └── index.tsx │ ├── SysAccountConfigModal │ │ └── index.tsx │ ├── SysFormItem │ │ └── index.tsx │ ├── TabSelect │ │ ├── index.less │ │ └── index.tsx │ ├── Table │ │ ├── MiniTable │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── TableCard │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── TableIndexSelector │ │ ├── DragableColumn.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── TableRenameModal │ │ └── index.tsx │ ├── Task │ │ ├── AlterDdlTask │ │ │ ├── CreateModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── ApplyDatabasePermission │ │ │ ├── CreateButton.tsx │ │ │ ├── CreateModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── ApplyPermission │ │ │ ├── CreateButton.tsx │ │ │ ├── CreateModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── ApplyTablePermission │ │ │ ├── CreateButton.tsx │ │ │ ├── CreateModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── AsyncTask │ │ │ ├── CreateModal │ │ │ │ ├── PopconfirmButton.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Content.tsx │ │ ├── CreateModals.tsx │ │ ├── DataArchiveTask │ │ │ ├── CreateModal │ │ │ │ ├── ArchiveRange.tsx │ │ │ │ ├── VariableConfig.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ ├── ArchiveRange.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── DataClearTask │ │ │ ├── CreateModal │ │ │ │ ├── ArchiveRange.tsx │ │ │ │ ├── VariableConfig.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ ├── ArchiveRange.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── DataMockerTask │ │ │ ├── CreateModal │ │ │ │ ├── RuleConfigTable.tsx │ │ │ │ ├── RuleContent │ │ │ │ │ ├── RangeInput │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── WrapItemWithTitle │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── ruleItems │ │ │ │ │ │ ├── CharItem │ │ │ │ │ │ │ ├── converter.ts │ │ │ │ │ │ │ ├── defaultValue.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── DateItem │ │ │ │ │ │ │ ├── converter.ts │ │ │ │ │ │ │ ├── defaultValue.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── IntervalItem │ │ │ │ │ │ │ ├── converter.ts │ │ │ │ │ │ │ ├── defaultValue.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── NumberItem │ │ │ │ │ │ │ ├── converter.ts │ │ │ │ │ │ │ ├── defaultValue.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── OtherItem │ │ │ │ │ │ │ ├── converter.ts │ │ │ │ │ │ │ ├── defaultValue.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── valid.tsx │ │ │ │ │ └── util.tsx │ │ │ │ ├── RuleSelect.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── type.ts │ │ │ ├── DetailContent │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── DetailModal.tsx │ │ ├── ExportTask │ │ │ ├── CreateModal │ │ │ │ ├── ExportForm │ │ │ │ │ ├── ConfigPanel │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ExportSelecter │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── FormContext.tsx │ │ │ │ │ ├── ObjSelecterPanel │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── ImportTask │ │ │ ├── CreateModal │ │ │ │ ├── ImportForm │ │ │ │ │ ├── ConfigPanel │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── CsvProvider.ts │ │ │ │ │ ├── FileSelecterPanel │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── FormConfigContext.tsx │ │ │ │ │ ├── FormContext.ts │ │ │ │ │ ├── formitem │ │ │ │ │ │ ├── CsvFormItem.tsx │ │ │ │ │ │ └── StructDataFormItem.tsx │ │ │ │ │ ├── helper.ts │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── csvMapping │ │ │ │ │ ├── editable.less │ │ │ │ │ ├── editable.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── LogicDatabaseAsyncTask │ │ │ ├── CreateModal │ │ │ │ ├── PopconfirmButton.tsx │ │ │ │ ├── PreviewSQLDrawer.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── MutipleAsyncTask │ │ │ ├── CreateModal │ │ │ │ ├── DatabaseQueue.tsx │ │ │ │ ├── DrawerFooter.tsx │ │ │ │ ├── InnerSelecter.tsx │ │ │ │ ├── MoreSetting.tsx │ │ │ │ ├── MultipleAsyncContext.ts │ │ │ │ ├── ProjectSelect.tsx │ │ │ │ ├── helper.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── components │ │ │ │ └── Template │ │ │ │ │ ├── CreateTemplate.tsx │ │ │ │ │ ├── EditTemplate.tsx │ │ │ │ │ ├── ManageTemplate.tsx │ │ │ │ │ ├── SelectTemplate.tsx │ │ │ │ │ ├── ShowTemplate.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── PartitionTask │ │ │ ├── CreateModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ ├── CycleDescriptionItem.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── PermissionApplication │ │ │ ├── CreateModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── ResultSetExportTask │ │ │ ├── CreateModal │ │ │ │ ├── CsvFormItemPanel.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DetailContent │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── SQLPlanTask │ │ │ ├── CreateModal │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ └── interface.ts │ │ │ ├── DetailContent │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── ShadowSyncTask │ │ │ ├── CreateModal │ │ │ │ ├── SelectPanel │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── StructConfigPanel │ │ │ │ │ ├── RecordSQLView │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── StructAnalysisResult │ │ │ │ │ │ ├── column.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ └── interface.ts │ │ │ ├── DetailContent │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Sider.tsx │ │ ├── StructureComparisonTask │ │ │ ├── CreateModal │ │ │ │ ├── TableSelector.tsx │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ └── interface.ts │ │ │ ├── DetailContent │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── TaskDetailContext.tsx │ │ ├── component │ │ │ ├── ActionBar │ │ │ │ └── index.tsx │ │ │ ├── ApprovalModal │ │ │ │ └── index.tsx │ │ │ ├── ArchiveRangeTip │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── CommonDetailModal │ │ │ │ ├── ChangeDetail.tsx │ │ │ │ ├── ExcecuteDetailModal.tsx │ │ │ │ ├── FlowModal.tsx │ │ │ │ ├── LogModal.tsx │ │ │ │ ├── Nodes │ │ │ │ │ ├── Items │ │ │ │ │ │ ├── NodeCompleteTime.tsx │ │ │ │ │ │ └── NodeStatus.tsx │ │ │ │ │ ├── MultipleSQLCheckNode.tsx │ │ │ │ │ ├── RollbackNode.tsx │ │ │ │ │ ├── SQLCheckNode.tsx │ │ │ │ │ └── helper.ts │ │ │ │ ├── TaskExecuteModal.tsx │ │ │ │ ├── TaskExecuteRecord.tsx │ │ │ │ ├── TaskFlow.tsx │ │ │ │ ├── TaskInfo.tsx │ │ │ │ ├── TaskOperationRecord.tsx │ │ │ │ ├── TaskProgress │ │ │ │ │ ├── ProgressDetailsModal.tsx │ │ │ │ │ ├── TaskProgressDrawer.tsx │ │ │ │ │ ├── TaskProgressHeader.tsx │ │ │ │ │ ├── colums.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── TaskProgress1.tsx │ │ │ │ ├── TaskRecord.tsx │ │ │ │ ├── TaskResult.tsx │ │ │ │ ├── TaskTools.tsx │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ └── status.tsx │ │ │ ├── DataTransferModal │ │ │ │ ├── ObjTables.tsx │ │ │ │ ├── csvTables.tsx │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ └── status.tsx │ │ │ ├── DatabaseLabel │ │ │ │ └── index.tsx │ │ │ ├── DatabaseSelect │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DatabaseSelecter │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DescriptionInput │ │ │ │ └── index.tsx │ │ │ ├── DownloadFileAction │ │ │ │ └── index.tsx │ │ │ ├── Log │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── PartitionPolicyFormTable │ │ │ │ ├── EditTable │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── PreviewSQLModal │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── RuleFormItem │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── configModal.tsx │ │ │ │ ├── const.ts │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── PartitionPolicyTable │ │ │ │ ├── ConfigDrawer.tsx │ │ │ │ ├── ConfigTable.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── PartitionTextArea │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── RollbackModal │ │ │ │ └── index.tsx │ │ │ ├── SQLPreviewModal │ │ │ │ └── index.tsx │ │ │ ├── ShardingStrategyItem │ │ │ │ └── index.tsx │ │ │ ├── SimpleTextItem │ │ │ │ └── index.tsx │ │ │ ├── Status │ │ │ │ └── index.tsx │ │ │ ├── SynchronizationItem │ │ │ │ └── index.tsx │ │ │ ├── TableSelecter │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ ├── interface.ts │ │ │ │ └── util.tsx │ │ │ ├── TaskTable │ │ │ │ └── index.tsx │ │ │ ├── TaskdurationItem │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── ThrottleEditableCell │ │ │ │ └── index.tsx │ │ │ ├── ThrottleFormItem │ │ │ │ └── index.tsx │ │ │ ├── TimerSelect │ │ │ │ └── index.tsx │ │ │ └── VariableConfigTable │ │ │ │ └── index.tsx │ │ ├── const.ts │ │ ├── helper.tsx │ │ ├── hooks │ │ │ └── useProjects.tsx │ │ ├── index.less │ │ ├── index.tsx │ │ └── interface.ts │ ├── TaskPopover │ │ ├── index.less │ │ └── index.tsx │ ├── TemplateInsertModal │ │ └── index.tsx │ ├── TimeSelect │ │ └── index.tsx │ ├── TimeText │ │ └── index.tsx │ ├── Toolbar │ │ ├── index.less │ │ ├── index.tsx │ │ └── statefulIcon │ │ │ ├── commonIcon.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── TooltipAction │ │ └── index.tsx │ ├── TooltipContent │ │ └── index.tsx │ ├── TreeFilter │ │ ├── index.less │ │ └── index.tsx │ ├── UserPopover │ │ ├── index.less │ │ └── index.tsx │ ├── VersionModal │ │ ├── NewVersion.tsx │ │ ├── config.tsx │ │ ├── index.less │ │ ├── index.tsx │ │ └── newVersionConfig.ts │ ├── ViewColumn │ │ ├── DragableViewColumn.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── WindowManager │ │ ├── DefaultPage.less │ │ ├── DefaultPage.tsx │ │ ├── DraggableTabs.tsx │ │ ├── config.tsx │ │ ├── factory.tsx │ │ ├── helper.ts │ │ ├── index.less │ │ └── index.tsx │ ├── WorkspaceSideTip │ │ ├── index.less │ │ └── index.tsx │ ├── YamlEditor │ │ ├── index.less │ │ └── index.tsx │ ├── YearPicker │ │ └── index.tsx │ ├── helpDoc │ │ ├── doc.tsx │ │ ├── index.less │ │ └── index.tsx │ └── logicIcon │ │ ├── index.less │ │ └── index.tsx ├── constant │ ├── index.ts │ ├── label.ts │ ├── plType.ts │ └── record.ts ├── d.ts │ ├── _index.ts │ ├── database.ts │ ├── datasource.ts │ ├── declaration.d.ts │ ├── environment.ts │ ├── index.ts │ ├── logicalDatabase.ts │ ├── maskRule.ts │ ├── maskingAlgorithm.ts │ ├── operation.ts │ ├── project.ts │ ├── projectNotification.ts │ ├── riskDetectRule.ts │ ├── riskLevel.ts │ ├── rule.ts │ ├── sensitiveColumn.ts │ ├── sensitiveRule.ts │ ├── table.ts │ └── task.ts ├── func.less ├── global.less ├── layout │ ├── AppContainer.tsx │ ├── DefaultContainer.less │ ├── DefaultContainer.tsx │ ├── MenuContext.ts │ ├── OrganizationListenWrap.tsx │ ├── PageLoadingWrapper.tsx │ ├── SpaceContainer │ │ ├── Sider │ │ │ ├── DropMenu │ │ │ │ ├── MenuItem.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── HelpItem │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── Logo.tsx │ │ │ ├── MenuItem │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── MineItem │ │ │ │ ├── Locale.tsx │ │ │ │ ├── Theme.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── SettingItem │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── SpaceSelect │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── helper.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── StoreProvider.tsx │ ├── ThemeWrap.tsx │ └── UserWrapper.tsx ├── loading.tsx ├── locales │ ├── en-US.ts │ ├── must │ │ └── strings │ │ │ ├── en-US.json │ │ │ ├── zh-CN.json │ │ │ └── zh-TW.json │ ├── zh-CN.ts │ └── zh-TW.ts ├── main │ ├── config │ │ └── index.ts │ ├── createMenu.ts │ ├── main.ts │ ├── protocolClient.ts │ ├── renderService │ │ ├── feedback.ts │ │ ├── index.ts │ │ └── lock.ts │ ├── server │ │ └── main.ts │ ├── setAboutPanel.ts │ ├── store │ │ └── index.ts │ ├── tsconfig.json │ ├── utils │ │ ├── index.ts │ │ └── log.ts │ └── windows │ │ ├── mainWeb │ │ ├── event.ts │ │ └── index.ts │ │ └── startScreen.ts ├── page │ ├── Auth │ │ ├── Autoauth │ │ │ ├── component │ │ │ │ ├── DetailContent │ │ │ │ │ └── index.tsx │ │ │ │ └── FormModal │ │ │ │ │ ├── conditionSelect.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── projectRoleSelect.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── Role │ │ │ ├── component │ │ │ │ ├── DetailContent │ │ │ │ │ └── index.tsx │ │ │ │ ├── FormModal │ │ │ │ │ ├── component.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ └── ResourceSelector │ │ │ │ │ ├── const.ts │ │ │ │ │ ├── index.less │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── resourceActions.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── User │ │ │ ├── component │ │ │ │ ├── DetailContent │ │ │ │ │ └── index.tsx │ │ │ │ └── FormModal │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── context.ts │ │ ├── index.tsx │ │ └── utils.ts │ ├── Datasource │ │ ├── Datasource │ │ │ ├── Content │ │ │ │ ├── List │ │ │ │ │ ├── ConnectionNameItem │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── IconBtn │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── MoreBtn │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── ListItem │ │ │ │ │ ├── Loading.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── TitleButton │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── Header │ │ │ │ ├── FIlterIcon │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── Filter │ │ │ │ │ └── index.tsx │ │ │ │ ├── Search.tsx │ │ │ │ ├── Sorter │ │ │ │ │ └── index.tsx │ │ │ │ ├── TitleRadio.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── NewDatasourceDrawer │ │ │ │ ├── Form │ │ │ │ │ ├── Account │ │ │ │ │ │ ├── PrivateAccount.tsx │ │ │ │ │ │ ├── UserInput.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── AddressItems.tsx │ │ │ │ │ ├── CloudStorageForm │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── DBTypeItem │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ExtraConfig │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── FormItemGroup.tsx │ │ │ │ │ ├── InitScriptItem │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── InstanceSelect │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── JDBCParamsItem │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ParseURLItem.tsx │ │ │ │ │ ├── Password.tsx │ │ │ │ │ ├── ProjectItem │ │ │ │ │ │ ├── ProjectSelect.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SSLItem │ │ │ │ │ │ ├── SingleUploadFile.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SysForm.tsx │ │ │ │ │ ├── components │ │ │ │ │ │ └── ErrorTip │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── context.tsx │ │ │ │ │ ├── helper.ts │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── NewButton.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── ParamContext.tsx │ │ │ └── index.tsx │ │ ├── Info │ │ │ ├── ChangeProjectModal │ │ │ │ ├── ProjectSelect.tsx │ │ │ │ └── index.tsx │ │ │ ├── Header │ │ │ │ ├── Filter │ │ │ │ │ └── index.tsx │ │ │ │ ├── Search.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── NewDataBaseButton │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── ParamContext.tsx │ │ │ └── index.tsx │ │ ├── OBClient │ │ │ └── index.tsx │ │ ├── Recycle │ │ │ ├── RecycleBinPage │ │ │ │ ├── RecyleConfig │ │ │ │ │ └── index.tsx │ │ │ │ ├── context │ │ │ │ │ └── RecyleConfigContext.ts │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Session │ │ │ ├── SessionManagementPage │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ └── index.tsx │ ├── Exception │ │ ├── 403.tsx │ │ └── 404.tsx │ ├── ExternalIntegration │ │ ├── SSO │ │ │ ├── NewSSODrawerButton │ │ │ │ ├── Edit.tsx │ │ │ │ ├── SSOForm │ │ │ │ │ ├── PartForm.tsx │ │ │ │ │ ├── SAMLModalConfirm.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── partForm.less │ │ │ │ └── index.tsx │ │ │ ├── SSODetailDrawer │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── SqlInterceptor │ │ │ ├── component │ │ │ │ ├── DetailContent │ │ │ │ │ └── index.tsx │ │ │ │ └── FormModal │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── constant │ │ │ │ └── index.ts │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── index.tsx │ ├── Gateway │ │ ├── customConnect.ts │ │ ├── index.less │ │ ├── index.tsx │ │ ├── newCloudConnection.ts │ │ ├── ssoLogin.ts │ │ ├── task.ts │ │ └── tutorial.ts │ ├── Lock │ │ ├── index.less │ │ └── index.tsx │ ├── Login │ │ ├── components │ │ │ ├── LDAPModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── LoginModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── RegisterModal │ │ │ │ └── index.tsx │ │ ├── index.less │ │ └── index.tsx │ ├── Project │ │ ├── Database │ │ │ ├── Header │ │ │ │ ├── Filter │ │ │ │ │ └── index.tsx │ │ │ │ ├── Search.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── ParamContext.tsx │ │ │ ├── StatusName.tsx │ │ │ ├── components │ │ │ │ ├── AddDataBaseButton │ │ │ │ │ └── index.tsx │ │ │ │ ├── AddObjectStorage │ │ │ │ │ └── index.tsx │ │ │ │ ├── ChangeOwnerModal │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── DatabaseOwnerSelect │ │ │ │ │ └── index.tsx │ │ │ │ └── LogicDatabase │ │ │ │ │ ├── CreateLogicialDatabase.tsx │ │ │ │ │ ├── ManageLogicDatabase.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── const.ts │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── Notification │ │ │ ├── components │ │ │ │ ├── Channel.tsx │ │ │ │ ├── Message.tsx │ │ │ │ ├── MessageStatus.tsx │ │ │ │ ├── Policy.tsx │ │ │ │ ├── columns.tsx │ │ │ │ ├── index.less │ │ │ │ └── interface.ts │ │ │ └── index.tsx │ │ ├── Project │ │ │ ├── CreateProject │ │ │ │ ├── Drawer.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── ListItem │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── MoreBtn │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ProjectContext.tsx │ │ ├── Sensitive │ │ │ ├── SensitiveContext.ts │ │ │ ├── components │ │ │ │ ├── SensitiveColumn │ │ │ │ │ ├── components │ │ │ │ │ │ ├── EditSensitiveColumnModal.tsx │ │ │ │ │ │ ├── FormSensitiveColumnDrawer.tsx │ │ │ │ │ │ ├── ManualForm.tsx │ │ │ │ │ │ ├── SacnRule.tsx │ │ │ │ │ │ ├── ScanForm.tsx │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── interface.ts │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ └── SensitiveRule │ │ │ │ │ ├── components │ │ │ │ │ ├── CheckboxInput.tsx │ │ │ │ │ ├── DetectWay.tsx │ │ │ │ │ ├── FormSensitiveRuleDrawer.tsx │ │ │ │ │ ├── ViewSensitiveRuleDrawer.tsx │ │ │ │ │ └── index.less │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ └── interface.ts │ │ ├── Setting │ │ │ ├── Info │ │ │ │ ├── TaskList.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── Notifacation │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── Task │ │ │ └── index.tsx │ │ ├── User │ │ │ ├── AddUserModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── ManageModal │ │ │ │ ├── Database │ │ │ │ │ ├── CreateAuth │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Status │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── TaskApplyList │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── UserAuthList │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── Table │ │ │ │ │ ├── CreateAuth │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Status │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── TaskApplyList │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── UserAuthList │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── UpdateUserModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── components │ │ │ ├── DeleteProjectModal.tsx │ │ │ │ └── index.tsx │ │ │ └── SCLayout │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ ├── helper.ts │ │ └── index.tsx │ ├── Secure │ │ ├── Approval │ │ │ ├── component │ │ │ │ ├── AuthNode │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── FormModal │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ └── NodeSelector │ │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── Env │ │ │ ├── components │ │ │ │ ├── EditPropertyComponent.tsx │ │ │ │ ├── EditRuleDrawer.tsx │ │ │ │ ├── EnvironmentInfo.tsx │ │ │ │ ├── EnvironmentTable.tsx │ │ │ │ ├── FormEnvironmentModal.tsx │ │ │ │ ├── InnerEnvironment.tsx │ │ │ │ ├── column.tsx │ │ │ │ └── index.less │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── MaskingAlgorithm │ │ │ ├── components │ │ │ │ └── ViewMaskingAlgorithmDrawer.tsx │ │ │ └── index.tsx │ │ ├── Record │ │ │ ├── RecordPage │ │ │ │ ├── column.tsx │ │ │ │ ├── component.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── RiskLevel │ │ │ ├── components │ │ │ │ ├── Condition.tsx │ │ │ │ ├── CreateApproval.tsx │ │ │ │ ├── InnerRiskLevel.tsx │ │ │ │ ├── RiskLevelInfo.tsx │ │ │ │ ├── RootNodeContent.tsx │ │ │ │ ├── TreeTitle.tsx │ │ │ │ ├── ViewRiskLevelDrawer.tsx │ │ │ │ ├── column.tsx │ │ │ │ ├── index.less │ │ │ │ └── options.ts │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ └── interface.ts │ │ ├── components │ │ │ ├── FormRecordExportModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── RecordPage │ │ │ │ ├── column.tsx │ │ │ │ ├── component.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── SecureLayout │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── SecureSider │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ ├── context.ts │ │ ├── index.less │ │ ├── index.tsx │ │ └── interface.ts │ ├── SpaceIndex │ │ ├── index.less │ │ └── index.tsx │ ├── SqlWorkspace │ │ └── index.tsx │ ├── Task │ │ └── index.tsx │ └── Workspace │ │ ├── ActivityBar │ │ ├── index.tsx │ │ ├── ActivityBarButton │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── Logo.tsx │ │ ├── index.less │ │ └── type.ts │ │ ├── GlobalModals │ │ └── index.tsx │ │ ├── Layout │ │ ├── index.less │ │ └── index.tsx │ │ ├── SideBar │ │ ├── Manager │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ResourceTree │ │ │ ├── Container.tsx │ │ │ ├── DatabaseSearch │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DatabaseSearchModal │ │ │ │ ├── components │ │ │ │ │ ├── DatabaseList.tsx │ │ │ │ │ ├── ObjectList.tsx │ │ │ │ │ └── Search.tsx │ │ │ │ ├── constant.ts │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DatabaseTree │ │ │ │ ├── Title.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DatasourceFilter │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── Layout.tsx │ │ │ ├── Nodes │ │ │ │ ├── database.tsx │ │ │ │ ├── externalTables.tsx │ │ │ │ ├── function.tsx │ │ │ │ ├── package.tsx │ │ │ │ ├── procedure.tsx │ │ │ │ ├── sequence.tsx │ │ │ │ ├── synonym.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── trigger.tsx │ │ │ │ ├── type.tsx │ │ │ │ └── view.tsx │ │ │ ├── SelectPanel │ │ │ │ ├── Datasource │ │ │ │ │ ├── index.less │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── useDataSourceStatus.tsx │ │ │ │ ├── Project │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── TreeNodeMenu │ │ │ │ ├── IconLoadingWrapper.tsx │ │ │ │ ├── config │ │ │ │ │ ├── database.tsx │ │ │ │ │ ├── externalTable.tsx │ │ │ │ │ ├── function.tsx │ │ │ │ │ ├── helper.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── package.tsx │ │ │ │ │ ├── packageBody.tsx │ │ │ │ │ ├── procedure.tsx │ │ │ │ │ ├── sequence.tsx │ │ │ │ │ ├── synonym.tsx │ │ │ │ │ ├── table.tsx │ │ │ │ │ ├── trigger.tsx │ │ │ │ │ ├── type.tsx │ │ │ │ │ └── view.tsx │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ └── type.ts │ │ │ ├── TreeStateStore.tsx │ │ │ ├── helper.ts │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ ├── layout.less │ │ │ ├── type.ts │ │ │ └── useTreeState.tsx │ │ ├── Script │ │ │ ├── ScriptFile │ │ │ │ ├── Item │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── Snippet │ │ │ │ ├── Info.tsx │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ └── info.less │ │ │ └── index.tsx │ │ ├── Task │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── components │ │ │ ├── ListItem │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── MenuList │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── SideTabs │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ ├── index.less │ │ └── index.tsx │ │ ├── components │ │ ├── CreateSequenceModal │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── CreateTable │ │ │ ├── BaseInfo │ │ │ │ ├── LogicTableBaseInfo.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── Columns │ │ │ │ ├── ColumnExtraInfo │ │ │ │ │ ├── Character.tsx │ │ │ │ │ ├── DateSync.tsx │ │ │ │ │ ├── DefaultValue.tsx │ │ │ │ │ ├── Enum.tsx │ │ │ │ │ ├── Generation.tsx │ │ │ │ │ ├── Number.tsx │ │ │ │ │ └── Precision.tsx │ │ │ │ ├── columns.tsx │ │ │ │ ├── helper.ts │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── EditToolbar.tsx │ │ │ ├── Partition │ │ │ │ ├── CreateTablePartitionRuleForm │ │ │ │ │ ├── config.ts │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── RdgFomatter │ │ │ │ ├── CheckboxFormatter.tsx │ │ │ │ ├── DisableFormatter.tsx │ │ │ │ ├── ValueFormatter.tsx │ │ │ │ └── index.less │ │ │ ├── TableCardLayout.tsx │ │ │ ├── TableConstraint │ │ │ │ ├── Check │ │ │ │ │ ├── columns.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Foreign │ │ │ │ │ ├── columns.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Primary │ │ │ │ │ ├── columns.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Unique │ │ │ │ │ ├── columns.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── baseColumn.tsx │ │ │ │ └── index.tsx │ │ │ ├── TableContext.tsx │ │ │ ├── TableIndex │ │ │ │ ├── columns.tsx │ │ │ │ └── index.tsx │ │ │ ├── config │ │ │ │ └── index.tsx │ │ │ ├── helper.ts │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ └── interface.ts │ │ ├── CreateTableColumnForm │ │ │ ├── CheckboxFormatter.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── CreateTriggerPage │ │ │ ├── component │ │ │ │ ├── AdvancedInfoFrom.tsx │ │ │ │ └── BaseInfoForm.tsx │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ └── type.tsx │ │ ├── CreateViewPage │ │ │ ├── component │ │ │ │ ├── BaseInfoForm │ │ │ │ │ └── index.tsx │ │ │ │ ├── ColumnSelector │ │ │ │ │ ├── Item.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── EditableText │ │ │ │ │ └── index.tsx │ │ │ │ ├── ObjectName │ │ │ │ │ └── index.tsx │ │ │ │ └── TableSelector │ │ │ │ │ ├── Item.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── DBPermissionTableContent │ │ │ └── index.tsx │ │ ├── DDLResultSet │ │ │ ├── ColumnModeModal.tsx │ │ │ ├── ResultContext.ts │ │ │ ├── StatusBar.tsx │ │ │ ├── hooks │ │ │ │ ├── components │ │ │ │ │ ├── BlobFormatter │ │ │ │ │ │ ├── BlobViewModal.tsx │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── HexEditor │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── TextFormatter │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.less │ │ │ │ └── useColumns.tsx │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ └── util.tsx │ │ ├── EditableTable │ │ │ ├── Editors │ │ │ │ ├── AntdEditorWrap.tsx │ │ │ │ ├── AutoComplete.tsx │ │ │ │ ├── CaseTextEditor.tsx │ │ │ │ ├── DateEditor.tsx │ │ │ │ ├── NumberEditor.tsx │ │ │ │ ├── SelectEditor.tsx │ │ │ │ └── TextEditor.tsx │ │ │ ├── components │ │ │ │ └── EllipsisCell │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── FunctionPage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── OBClientPage │ │ │ ├── Page.tsx │ │ │ ├── attach.ts │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── PLBatchCompilePage │ │ │ ├── components │ │ │ │ ├── CompileResult │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── HeaderToolbar │ │ │ │ │ └── index.tsx │ │ │ │ ├── PLTable │ │ │ │ │ └── index.tsx │ │ │ │ └── Status │ │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── PLDebugResultSet │ │ │ ├── CursorCell │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DebugLog.tsx │ │ │ ├── DebugVariables.tsx │ │ │ ├── breakpoints.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── PLPage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── PackagePage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ProcedurePage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── RecycleBinPage │ │ │ ├── Page.tsx │ │ │ ├── RecyleConfig │ │ │ │ └── index.tsx │ │ │ ├── context │ │ │ │ └── RecyleConfigContext.ts │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SQLConfirmPage │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ └── type.tsx │ │ ├── SQLExplain │ │ │ ├── column.tsx │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ └── interface.ts │ │ ├── SQLPage │ │ │ ├── ExecDetail │ │ │ │ ├── BasicInfo.tsx │ │ │ │ ├── IOStatistics.tsx │ │ │ │ ├── TimeStatistics.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── ExecPlan │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SQLResultSet │ │ │ ├── DBPermissionTable.tsx │ │ │ ├── DBPermissionTableDrawer.tsx │ │ │ ├── DBTimeline.tsx │ │ │ ├── ExecuteHistory.tsx │ │ │ ├── LintResultTable.tsx │ │ │ ├── MultipleAsyncSQLLintTable.tsx │ │ │ ├── SQLResultLog.tsx │ │ │ ├── columns.tsx │ │ │ ├── const.ts │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SQLResultSetViewPage │ │ │ └── index.tsx │ │ ├── ScriptManageModal │ │ │ └── ScriptEditorModal │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ ├── SequencePage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SessionContextWrap │ │ │ ├── SessionPageWrap │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── SessionSelect │ │ │ │ ├── SelectItem.tsx │ │ │ │ ├── SessionDropdown │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── const.ts │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── context.tsx │ │ │ └── index.tsx │ │ ├── SessionManagementPage │ │ │ ├── Page.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SessionParamPage │ │ │ ├── SessionParamDrawer.tsx │ │ │ ├── SessionParamsTable.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ShowFunctionBaseInfoForm │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ShowProcedureBaseInfoForm │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ShowViewBaseInfoForm │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SynonymPage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── TablePage │ │ │ ├── ColumnTab.tsx │ │ │ ├── Columns │ │ │ │ └── index.tsx │ │ │ ├── Constraints │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── DDL │ │ │ │ └── index.tsx │ │ │ ├── Indexes │ │ │ │ └── index.tsx │ │ │ ├── Partitions │ │ │ │ ├── AddPartitionModal │ │ │ │ │ ├── AddPartitionWithTableNameModal.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── helper.ts │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── ShowTableBaseInfoForm │ │ │ │ ├── LogicTableBaseInfo.tsx │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── TableData │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── context │ │ │ │ └── index.ts │ │ │ ├── helper.ts │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ └── showExecuteModal.tsx │ │ ├── TaskPage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ToolContentWrapper │ │ │ └── index.tsx │ │ ├── ToolPageTabs │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ToolPageTextFormWrapper │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── Trace │ │ │ ├── Node.tsx │ │ │ ├── TraceComponent.tsx │ │ │ ├── TraceList.tsx │ │ │ ├── TraceTable.tsx │ │ │ ├── TraceTree.tsx │ │ │ ├── TraceTreeTable.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── TriggerPage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── TutorialPage │ │ │ ├── helper.ts │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── TypePage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── ViewPage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── context │ │ ├── ActivityBarContext.tsx │ │ ├── ResourceTreeContext.tsx │ │ └── WorkspaceStore.tsx │ │ ├── index.less │ │ └── index.tsx ├── plugins │ ├── 4a │ │ └── index.tsx │ ├── defaultConfig.ts │ ├── odc.ts │ └── register.ts ├── service │ ├── localLoginHistoy.ts │ └── projectHistory.ts ├── store │ ├── auth.ts │ ├── cluster.ts │ ├── common.ts │ ├── datasourceStatus.ts │ ├── debug │ │ ├── debugHistory.ts │ │ ├── hooks.ts │ │ ├── index.ts │ │ └── type.ts │ ├── guideCache.ts │ ├── helper │ │ ├── index.tsx │ │ ├── page │ │ │ ├── index.ts │ │ │ ├── openPage.ts │ │ │ ├── pageParams.ts │ │ │ ├── pages │ │ │ │ ├── base.ts │ │ │ │ ├── create.ts │ │ │ │ ├── index.ts │ │ │ │ └── pl.ts │ │ │ └── util.ts │ │ └── pageKeyGenerate.ts │ ├── login.ts │ ├── modal.ts │ ├── page.ts │ ├── sessionManager │ │ ├── database.ts │ │ ├── hooks.ts │ │ ├── index.ts │ │ ├── session.ts │ │ └── type.ts │ ├── setting.ts │ ├── snippet.ts │ ├── sql │ │ └── index.tsx │ ├── task.ts │ └── utils │ │ └── metaSync │ │ └── index.ts ├── style │ └── theme │ │ ├── antd.dark.less │ │ ├── antd.darkTemplate.css │ │ ├── dark.less │ │ └── white.less ├── svgr │ ├── AddSection.svg │ ├── Add_notes.svg │ ├── Addnotes.svg │ ├── AutomaticRun.svg │ ├── Automaticoperation.svg │ ├── COS.svg │ ├── Cap.svg │ ├── Capitalized.svg │ ├── Compile.svg │ ├── Console-PL.svg │ ├── Console-SQL.svg │ ├── Debug_to_breakpoint.svg │ ├── DeleteSection.svg │ ├── Delete_notes.svg │ ├── Deletenotes.svg │ ├── DragItem.svg │ ├── Enum.svg │ ├── Expain.svg │ ├── Field-Binary.svg │ ├── Field-String.svg │ ├── Field-number.svg │ ├── Field-time.svg │ ├── File.svg │ ├── Format.svg │ ├── Function.svg │ ├── JDBC.svg │ ├── List.svg │ ├── LogoOB.svg │ ├── Lowercase.svg │ ├── Menu.svg │ ├── OBLogo.svg │ ├── OBProxy.svg │ ├── OBS.svg │ ├── OBServer.svg │ ├── Package-body.svg │ ├── Package-header.svg │ ├── Package-type.svg │ ├── Package.svg │ ├── Parameter.svg │ ├── Partition.svg │ ├── Redo.svg │ ├── Roll-back.svg │ ├── S3.svg │ ├── S3_file.svg │ ├── Sequence.svg │ ├── Set.svg │ ├── Snippet.svg │ ├── Source.svg │ ├── SqlProfile.svg │ ├── Step_in.svg │ ├── Step_next.svg │ ├── Step_out.svg │ ├── Step_over.svg │ ├── Stepover.svg │ ├── Stored-procedure.svg │ ├── Submit.svg │ ├── Termination.svg │ ├── Text.svg │ ├── Trace.svg │ ├── Tree.svg │ ├── Undo.svg │ ├── Unfold.svg │ ├── Uppercasing.svg │ ├── View.svg │ ├── Waiting.svg │ ├── Wifi.svg │ ├── Working.svg │ ├── alert.svg │ ├── batch-compile-all.svg │ ├── batch-compile.svg │ ├── clean.svg │ ├── close-query.svg │ ├── command.svg │ ├── cos_file.svg │ ├── csv.svg │ ├── cycle_task.svg │ ├── database.svg │ ├── database_doris.svg │ ├── database_mysql.svg │ ├── database_oceanbase.svg │ ├── database_oracle.svg │ ├── database_outline.svg │ ├── database_pg.svg │ ├── datamock.svg │ ├── dbchange.svg │ ├── defaultRiskLevel.svg │ ├── doris.svg │ ├── drag.svg │ ├── emoji_welcome.svg │ ├── error.svg │ ├── execute.svg │ ├── folder-view.svg │ ├── github.svg │ ├── graphic_cluster.svg │ ├── graphic_server.svg │ ├── graphic_tenant.svg │ ├── highRiskLevel.svg │ ├── homeMenu.svg │ ├── icon_connection.svg │ ├── icon_dashboard.svg │ ├── icon_pin_filled.svg │ ├── icon_pin_outlined.svg │ ├── icon_sort.svg │ ├── icon_tag_filled.svg │ ├── icon_tag_outlined.svg │ ├── icon_task.svg │ ├── index.svg │ ├── index_manage.svg │ ├── lintIcon.svg │ ├── lowRiskLevel.svg │ ├── manager.svg │ ├── menuFunc.svg │ ├── menuPkg.svg │ ├── menuProcedure.svg │ ├── menuSequence.svg │ ├── menuSynonym.svg │ ├── menuTable.svg │ ├── menuTrigger.svg │ ├── menuType.svg │ ├── menuView.svg │ ├── middleRiskLevel.svg │ ├── mock_toolbar.svg │ ├── mysql.svg │ ├── newopen.svg │ ├── ob_logo.svg │ ├── obs_file.svg │ ├── oceanbase_logo.svg │ ├── odc.svg │ ├── odc_black.svg │ ├── odc_logo_color.svg │ ├── odc_status.svg │ ├── operate.svg │ ├── oracle.svg │ ├── oss.svg │ ├── oss_file.svg │ ├── personal_space.svg │ ├── pg.svg │ ├── project_space.svg │ ├── record.svg │ ├── resource.svg │ ├── safety.svg │ ├── security-audit.svg │ ├── source_ob.svg │ ├── sql_file.svg │ ├── sql_zip.svg │ ├── sync_metadata.svg │ ├── synonym.svg │ ├── tabRecycle.svg │ ├── tabSession.svg │ ├── task.svg │ ├── taskFlow.svg │ ├── teamwork_space.svg │ ├── top.svg │ ├── toped.svg │ ├── trigger.svg │ ├── type.svg │ ├── user.svg │ └── variable.svg └── util │ ├── aliyun.ts │ ├── bigNumber.ts │ ├── broadcastChannel.ts │ ├── client │ ├── index.ts │ └── service.ts │ ├── column.ts │ ├── connection.ts │ ├── dataSourceParser.ts │ ├── dataType │ ├── index.ts │ ├── interface.ts │ ├── mysql.ts │ └── oracle.ts │ ├── database.ts │ ├── editor.ts │ ├── env.ts │ ├── events │ ├── index.ts │ └── type.ts │ ├── hooks │ └── useLoop.tsx │ ├── intl.tsx │ ├── logger.ts │ ├── manage.ts │ ├── notification.tsx │ ├── parser │ ├── common │ │ ├── caseInsensitiveStream.ts │ │ └── index.ts │ ├── index.ts │ ├── pl │ │ ├── core.ts │ │ └── index.ts │ └── sql │ │ ├── core.ts │ │ └── index.ts │ ├── pl.ts │ ├── renderTool.tsx │ ├── request │ ├── download.ts │ ├── errorResolve.ts │ ├── index.ts │ ├── service.ts │ └── statusMsg.ts │ ├── route │ └── index.tsx │ ├── sentry.ts │ ├── snippet.ts │ ├── sql.ts │ ├── sqlExport │ ├── dataTypes │ │ ├── mysql │ │ │ ├── index.ts │ │ │ ├── number.ts │ │ │ └── string.ts │ │ └── oracle │ │ │ ├── date.ts │ │ │ ├── index.ts │ │ │ ├── interval.ts │ │ │ ├── number.ts │ │ │ ├── string.ts │ │ │ ├── timestamp.ts │ │ │ ├── timestampLocalZone.ts │ │ │ └── timestampTimeZone.ts │ └── index.ts │ ├── test │ ├── bigNumber.test.ts │ ├── sql.test.ts │ └── util.test.ts │ ├── tracert │ ├── index.ts │ └── userRoutes.tsx │ ├── utils.ts │ ├── valid.ts │ ├── validRule │ └── index.tsx │ └── versionUtils.ts ├── tsconfig.jest.json ├── tsconfig.json └── tsconfig.test.json /.bailingual.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | import: { 3 | type: 'json', 4 | path: 'src/locales/must/strings', 5 | bailingual: { 6 | appName: 'oceanbase-developer-center', 7 | tag: '', 8 | }, 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [Makefile] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | public/* 2 | public/help-web/* 3 | public/help-client/* 4 | public/workers/* 5 | src/workers/* 6 | build/* 7 | config/ 8 | *.test.js 9 | jest.config.js 10 | jestSetup.js 11 | scripts/* 12 | mock/* 13 | dist/* 14 | release/* 15 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "extends": "@umijs/fabric/dist/eslint", 3 | "rules": { 4 | "import/no-extraneous-dependencies": 0, 5 | "no-underscore-dangle": 0, 6 | "no-param-reassign": 0, 7 | "@typescript-eslint/no-parameter-properties": 0, 8 | "@typescript-eslint/method-signature-style": 0, 9 | "prefer-const": 0, 10 | "@typescript-eslint/no-unused-vars": 0, 11 | "@typescript-eslint/array-type": 0, 12 | "@typescript-eslint/no-unused-expressions": 0, 13 | "@typescript-eslint/no-shadow": 0, 14 | "@typescript-eslint/consistent-type-imports": 0, 15 | "@typescript-eslint/no-this-alias": 0, 16 | "@typescript-eslint/dot-notation": 0, 17 | "react/no-array-index-key": 0, 18 | "@typescript-eslint/switch-exhaustiveness-check": 0, 19 | "@typescript-eslint/consistent-indexed-object-style": 0, 20 | "react/no-unescaped-entities": 0 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.github/workflows/bundleSize.yaml: -------------------------------------------------------------------------------- 1 | name: Compressed Size 2 | 3 | on: [pull_request] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v2 11 | - uses: pnpm/action-setup@v2 12 | with: 13 | version: 8 14 | run_install: false 15 | - uses: preactjs/compressed-size-action@v2 16 | with: 17 | build-script: "build:odc" 18 | pattern: "./dist/renderer/*.{js,css,html}" -------------------------------------------------------------------------------- /.github/workflows/copyright.yaml: -------------------------------------------------------------------------------- 1 | name: copyright 2 | on: 3 | push: 4 | branches: 5 | - '*' 6 | 7 | jobs: 8 | do: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout code 12 | uses: actions/checkout@v2 13 | - name: Fix License Header 14 | uses: apache/skywalking-eyes/header@main 15 | with: 16 | mode: fix 17 | - name: Apply Changes 18 | uses: peter-evans/create-pull-request@v3 19 | with: 20 | token: ${{ secrets.GITHUB_TOKEN }} 21 | title: Copyright OceanBase 22 | commit-message: Copyright 23 | delete-branch: true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | pids 2 | logs 3 | node_modules 4 | npm-debug.log 5 | coverage/ 6 | run 7 | dist 8 | .DS_Store 9 | .nyc_output 10 | .basement 11 | config.local.js 12 | *bak 13 | .idea/ 14 | .vscode/ 15 | .umi 16 | .umi-production 17 | speed-measure.json 18 | release 19 | libraries/java/* 20 | libraries/jre/* 21 | libraries/obclient/* 22 | .node 23 | public/help-doc/* 24 | .devcontainer.Dockerfile 25 | .devcontainer.yml 26 | src/plugins/udp 27 | src/plugins/pluginList.ts 28 | .env 29 | config/config.odcPlugin.js 30 | yarn-error.log 31 | yarn.lock -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npm run precommit 5 | -------------------------------------------------------------------------------- /.licenserc.yaml: -------------------------------------------------------------------------------- 1 | header: 2 | license: 3 | spdx-id: Apache-2.0 4 | copyright-owner: OceanBase 5 | copyright-year: '2023' 6 | paths: 7 | - 'src/**/*.ts' 8 | - 'src/**/*.js' 9 | - 'src/**/*.tsx' 10 | - 'src/**/*.css' 11 | - 'scripts/**/*.js' 12 | comment: on-failure 13 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | nodejieba_binary_host_mirror = https://npmmirror.com/mirrors/nodejieba/ 2 | ELECTRON_MIRROR = https://npmmirror.com/mirrors/electron/ 3 | electron_mirror = https://npmmirror.com/mirrors/electron/ 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | public/ 2 | *.js 3 | build/ 4 | public/ 5 | mock/ 6 | .umi/ 7 | .umi-production/ -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "printWidth": 100, 5 | "overrides": [ 6 | { 7 | "files": ".prettierrc", 8 | "options": { "parser": "json" } 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /LEGAL.md: -------------------------------------------------------------------------------- 1 | Legal Disclaimer 2 | 3 | Within this source code, the comments in Chinese shall be the original, governing version. Any comment in other languages are for reference only. In the event of any conflict between the Chinese language version comments and other language version comments, the Chinese language version shall prevail. 4 | 5 | 法律免责声明 6 | 7 | 关于代码注释部分,中文注释为官方版本,其它语言注释仅做参考。中文注释可能与其它语言注释存在不一致,当中文注释与其它语言注释存在不一致时,请以中文注释为准。 8 | -------------------------------------------------------------------------------- /build/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/build/icon.ico -------------------------------------------------------------------------------- /build/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/build/icon.png -------------------------------------------------------------------------------- /build/icons/1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/build/icons/1024x1024.png -------------------------------------------------------------------------------- /build/icons/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/build/icons/256x256.png -------------------------------------------------------------------------------- /build/icons/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/build/icons/512x512.png -------------------------------------------------------------------------------- /build/setting.json: -------------------------------------------------------------------------------- 1 | { 2 | "client.jvm.params": "-Xms512m\n-Xmx2048m", 3 | "client.start.params": "", 4 | "client.electron.params": "disable-http-cache\ndisable-gpu-sandbox" 5 | } -------------------------------------------------------------------------------- /build/webpack.base.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const nodeExternals = require('webpack-node-externals'); 3 | 4 | module.exports = { 5 | output: { 6 | path: path.resolve(__dirname, '../dist/main'), 7 | filename: '[name].js', 8 | }, 9 | node: { 10 | __dirname: false, 11 | __filename: false, 12 | }, 13 | externals: [nodeExternals()], 14 | resolve: { 15 | extensions: ['.tsx', '.ts', '.js', '.json'], 16 | }, 17 | devtool: 'source-map', 18 | }; 19 | -------------------------------------------------------------------------------- /build/webpack.main.prod.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const webpack = require('webpack'); 3 | const merge = require('webpack-merge'); 4 | 5 | const baseConfig = require('./webpack.main.config'); 6 | 7 | module.exports = merge.smart(baseConfig, { 8 | mode: 'production', 9 | }); 10 | -------------------------------------------------------------------------------- /config/config.client.js: -------------------------------------------------------------------------------- 1 | import defineConfig from './defineConfig'; 2 | import routes from './routes'; 3 | 4 | export default { 5 | define: defineConfig('client'), 6 | targets: { 7 | chrome: 83, 8 | }, 9 | proxy: { 10 | // 本地开发或者对内 Site 应用的开发环境的代理配置 11 | '/api/v1/webSocket/obclient': { 12 | target: 'http://localhost:8989', 13 | ws: true, 14 | }, 15 | '/api/': { 16 | target: 'http://localhost:8989', 17 | }, 18 | }, 19 | // 路由配置,客户端不需要 Login 20 | routes: routes 21 | }; 22 | -------------------------------------------------------------------------------- /config/define/client.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | ENV_target: 'client', 3 | ENV_environment: 'private', 4 | } -------------------------------------------------------------------------------- /config/define/default.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | ENV_target: 'web', 3 | ENV_environment: 'private', 4 | } -------------------------------------------------------------------------------- /config/defineConfig.js: -------------------------------------------------------------------------------- 1 | import getVersion from './version'; 2 | import pkg from "@oceanbase-odc/monaco-plugin-ob/package.json" 3 | 4 | const MONACO_VERSION = pkg.version?.replace(/\./g,'_'); 5 | 6 | module.exports = function (type) { 7 | const base = { 8 | RELEASE_DATE: Date.now(), 9 | ODC_VERSION: getVersion(), 10 | HAVEOCP: process.env.HAVEOCP, 11 | MONACO_VERSION 12 | }; 13 | const path = './define/' + (type || 'default') 14 | return Object.assign(base, require(path)); 15 | }; 16 | -------------------------------------------------------------------------------- /config/version.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 获取唯一标识号 3 | */ 4 | import pkg from '../package.json'; 5 | 6 | function getCommitId() { 7 | const DEFAULT_VERSION = '1818'; 8 | try { 9 | const { spawnSync } = require('child_process'); 10 | const git = spawnSync('git', ['version']); 11 | if (git.error) { 12 | return DEFAULT_VERSION; 13 | } 14 | const commitDate = spawnSync('git', ['show', '-s', '--format=%cd']); 15 | if (commitDate.error || !commitDate.stdout) { 16 | return DEFAULT_VERSION; 17 | } 18 | const d = new Date(commitDate.stdout.toString()); 19 | return `${d.getTime()}`; 20 | } catch (e) { 21 | console.error(e); 22 | return DEFAULT_VERSION; 23 | } 24 | } 25 | 26 | function getVersion() { 27 | const versionLeft = pkg.version; 28 | const commitId = getCommitId(); 29 | return `${versionLeft}-${commitId}`; 30 | } 31 | module.exports = getVersion; 32 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testURL: 'http://localhost:8000', 3 | moduleFileExtensions: [ 4 | 'ts', // 增加 ts、tsx,以支持单测文件中引入 typescript 模块 5 | 'tsx', 6 | 'js', 7 | 'jsx', 8 | 'json', 9 | ], 10 | setupFiles: ['/jestSetup.js', 'jest-canvas-mock'], 11 | globals: { 12 | 'ts-jest': { 13 | tsConfig: './tsconfig.jest.json', // 此处指明 ts-jest 编译 typescript 时的配置文件 14 | diagnostics: false, 15 | }, 16 | }, 17 | testPathIgnorePatterns: ['/src/component/CommonIDE/test'], 18 | moduleNameMapper: { 19 | '^@/(.*)': '/src/$1', 20 | '^@@/(.*)': '/src/.umi/$1', 21 | 'ahooks': '/node_modules/ahooks', 22 | }, 23 | }; 24 | -------------------------------------------------------------------------------- /jestSetup.js: -------------------------------------------------------------------------------- 1 | import 'reflect-metadata'; 2 | const supportedCommands = ['copy']; 3 | global.document.queryCommandSupported = (cmd) => supportedCommands.includes(cmd); 4 | global.ENV_target = 'web'; 5 | global.ENV_environment = 'private'; 6 | global.RELEASE_DATE = Date.now(); 7 | -------------------------------------------------------------------------------- /libraries/script/preload.js: -------------------------------------------------------------------------------- 1 | const { contextBridge, ipcRenderer } = require('electron'); 2 | 3 | contextBridge.exposeInMainWorld("ODCClient", { 4 | ipcInvoke(method, ...args) { 5 | return ipcRenderer.invoke(method, ...args) 6 | .then((result) => { 7 | return result; 8 | }); 9 | } 10 | }) -------------------------------------------------------------------------------- /libraries/splash-screen/img/ob_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/libraries/splash-screen/img/ob_logo.png -------------------------------------------------------------------------------- /libraries/splash-screen/img/odc_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/libraries/splash-screen/img/odc_logo.png -------------------------------------------------------------------------------- /libraries/splash-screen/img/splash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/libraries/splash-screen/img/splash.jpg -------------------------------------------------------------------------------- /public/DIN-Alternate-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/DIN-Alternate-Bold.woff -------------------------------------------------------------------------------- /public/alibaba-puhui-title.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/alibaba-puhui-title.woff -------------------------------------------------------------------------------- /public/help/feedback_qrcode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/help/feedback_qrcode.jpg -------------------------------------------------------------------------------- /public/img/Graphic_ODC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/Graphic_ODC.png -------------------------------------------------------------------------------- /public/img/add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/bg.png -------------------------------------------------------------------------------- /public/img/browser_version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/browser_version.png -------------------------------------------------------------------------------- /public/img/chrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/chrome.png -------------------------------------------------------------------------------- /public/img/edge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/edge.png -------------------------------------------------------------------------------- /public/img/en-us/login_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/en-us/login_logo.png -------------------------------------------------------------------------------- /public/img/en-us/menu_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/en-us/menu_logo.png -------------------------------------------------------------------------------- /public/img/en-us/newVersion/drag.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/en-us/newVersion/drag.gif -------------------------------------------------------------------------------- /public/img/en-us/newVersion/record.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/en-us/newVersion/record.jpg -------------------------------------------------------------------------------- /public/img/en-us/newVersion/sqlconsole.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/en-us/newVersion/sqlconsole.jpg -------------------------------------------------------------------------------- /public/img/en-us/newVersion/task.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/en-us/newVersion/task.gif -------------------------------------------------------------------------------- /public/img/en-us/newVersion/workspace.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/en-us/newVersion/workspace.jpg -------------------------------------------------------------------------------- /public/img/en-us/resource_group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/en-us/resource_group.png -------------------------------------------------------------------------------- /public/img/en-us/version_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/en-us/version_icon.png -------------------------------------------------------------------------------- /public/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/favicon.png -------------------------------------------------------------------------------- /public/img/firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/firefox.png -------------------------------------------------------------------------------- /public/img/graphic_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/graphic_empty.png -------------------------------------------------------------------------------- /public/img/login-slice1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/login-slice1.png -------------------------------------------------------------------------------- /public/img/login-slice2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/login-slice2.png -------------------------------------------------------------------------------- /public/img/login-slice3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/login-slice3.png -------------------------------------------------------------------------------- /public/img/login-slice4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/login-slice4.png -------------------------------------------------------------------------------- /public/img/loginbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/loginbg.png -------------------------------------------------------------------------------- /public/img/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/logo2.png -------------------------------------------------------------------------------- /public/img/logo3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/logo3.png -------------------------------------------------------------------------------- /public/img/logov2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/logov2.png -------------------------------------------------------------------------------- /public/img/manage_index_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/manage_index_bg.png -------------------------------------------------------------------------------- /public/img/manage_index_resource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/manage_index_resource.png -------------------------------------------------------------------------------- /public/img/manage_index_risk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/manage_index_risk.png -------------------------------------------------------------------------------- /public/img/manage_index_task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/manage_index_task.png -------------------------------------------------------------------------------- /public/img/menu_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/menu_logo.png -------------------------------------------------------------------------------- /public/img/ob2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/ob2.png -------------------------------------------------------------------------------- /public/img/ob_black_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/ob_black_logo.png -------------------------------------------------------------------------------- /public/img/ocp_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/ocp_logo.png -------------------------------------------------------------------------------- /public/img/ocp_logo_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/ocp_logo_text.png -------------------------------------------------------------------------------- /public/img/odc_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 组件/01-产品Icon/白色/ODC 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/img/oms_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/oms_logo.png -------------------------------------------------------------------------------- /public/img/oms_logo_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/oms_logo_text.png -------------------------------------------------------------------------------- /public/img/portal-create-connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/portal-create-connection.png -------------------------------------------------------------------------------- /public/img/profile.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/profile.jpeg -------------------------------------------------------------------------------- /public/img/role-empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/role-empty.png -------------------------------------------------------------------------------- /public/img/safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/safari.png -------------------------------------------------------------------------------- /public/img/theme-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/theme-dark.png -------------------------------------------------------------------------------- /public/img/theme-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/theme-white.png -------------------------------------------------------------------------------- /public/img/versionImg/archive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/versionImg/archive.jpg -------------------------------------------------------------------------------- /public/img/versionImg/developer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/versionImg/developer.jpg -------------------------------------------------------------------------------- /public/img/versionImg/flow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/versionImg/flow.jpg -------------------------------------------------------------------------------- /public/img/versionImg/inject.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/versionImg/inject.jpg -------------------------------------------------------------------------------- /public/img/versionImg/safe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/versionImg/safe.jpg -------------------------------------------------------------------------------- /public/img/versionImg/user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/versionImg/user.jpg -------------------------------------------------------------------------------- /public/img/zh-cn/login_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-cn/login_logo.png -------------------------------------------------------------------------------- /public/img/zh-cn/menu_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-cn/menu_logo.png -------------------------------------------------------------------------------- /public/img/zh-cn/newVersion/drag.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-cn/newVersion/drag.gif -------------------------------------------------------------------------------- /public/img/zh-cn/newVersion/record.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-cn/newVersion/record.jpg -------------------------------------------------------------------------------- /public/img/zh-cn/newVersion/sqlconsole.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-cn/newVersion/sqlconsole.jpg -------------------------------------------------------------------------------- /public/img/zh-cn/newVersion/task.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-cn/newVersion/task.gif -------------------------------------------------------------------------------- /public/img/zh-cn/newVersion/workspace.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-cn/newVersion/workspace.jpg -------------------------------------------------------------------------------- /public/img/zh-cn/resource_group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-cn/resource_group.png -------------------------------------------------------------------------------- /public/img/zh-cn/version_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-cn/version_icon.png -------------------------------------------------------------------------------- /public/img/zh-tw/login_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-tw/login_logo.png -------------------------------------------------------------------------------- /public/img/zh-tw/menu_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-tw/menu_logo.png -------------------------------------------------------------------------------- /public/img/zh-tw/newVersion/drag.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-tw/newVersion/drag.gif -------------------------------------------------------------------------------- /public/img/zh-tw/newVersion/record.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-tw/newVersion/record.jpg -------------------------------------------------------------------------------- /public/img/zh-tw/newVersion/sqlconsole.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-tw/newVersion/sqlconsole.jpg -------------------------------------------------------------------------------- /public/img/zh-tw/newVersion/task.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-tw/newVersion/task.gif -------------------------------------------------------------------------------- /public/img/zh-tw/newVersion/workspace.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-tw/newVersion/workspace.jpg -------------------------------------------------------------------------------- /public/img/zh-tw/resource_group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-tw/resource_group.png -------------------------------------------------------------------------------- /public/img/zh-tw/version_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/img/zh-tw/version_icon.png -------------------------------------------------------------------------------- /public/rareWordsFont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/public/rareWordsFont.ttf -------------------------------------------------------------------------------- /src/common/exception/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export class InterceptedError extends Error { 18 | constructor(e, public method: string, public uuid: string, public submit: boolean = true) { 19 | super(e); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/common/network/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export * from './exportAndImport'; 18 | export * from './function'; 19 | export * from './procedure'; 20 | export * from './script'; 21 | -------------------------------------------------------------------------------- /src/common/network/interface.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export enum IExecuteStatus { 18 | SUCCESS = 'success', 19 | ERROR = 'error', 20 | CANCEL = 'cancel', 21 | } 22 | -------------------------------------------------------------------------------- /src/component/Action/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import Group from './Group'; 18 | import { ActionButton, ActionLink } from './Item'; 19 | 20 | export default { Group, Button: ActionButton, Link: ActionLink }; 21 | -------------------------------------------------------------------------------- /src/component/AskEventTrackingModal/index.less: -------------------------------------------------------------------------------- 1 | .infolist { 2 | width: 240px; 3 | padding: 16px 12px; 4 | :global { 5 | .ant-list-split { 6 | padding: 0 !important; 7 | .ant-list-item { 8 | padding: 0 0 0 8px !important; 9 | border: none !important; 10 | } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/component/BatchImportButton/index.less: -------------------------------------------------------------------------------- 1 | .batch-import { 2 | .tip { 3 | color: var(--text-color-secondary); 4 | font-size: 12; 5 | line-height: 20px; 6 | } 7 | .desc { 8 | margin-top: 4; 9 | color: var(--text-color-hint); 10 | font-size: 12; 11 | line-height: 20px; 12 | } 13 | :global { 14 | .ant-upload.ant-upload-drag { 15 | height: 160px; 16 | } 17 | } 18 | } 19 | 20 | .preview { 21 | padding: 16px; 22 | background: var(--background-tertraiy-color); 23 | } 24 | -------------------------------------------------------------------------------- /src/component/BigSelect/index.less: -------------------------------------------------------------------------------- 1 | .select-wrapper { 2 | } 3 | .select { 4 | color: #000000; 5 | font-weight: 600; 6 | font-size: 16px; 7 | line-height: 24px; 8 | opacity: 0.85; 9 | &:global(.ant-select-single):not(.ant-select-customize-input) { 10 | :global { 11 | .ant-select-selector { 12 | padding: 0; 13 | } 14 | .ant-select-selection-item { 15 | padding-right: 24px; 16 | font-weight: bold; 17 | } 18 | .ant-select-arrow { 19 | right: 0; 20 | color: rgba(0, 0, 0, 0.65); 21 | } 22 | } 23 | } 24 | } 25 | .logo { 26 | height: 24px; 27 | font-size: 24px; 28 | line-height: 24px; 29 | } 30 | .select-footer { 31 | padding: 10px 10px 4px; 32 | border-top: 1px solid rgba(0, 0, 0, 0.06); 33 | } 34 | -------------------------------------------------------------------------------- /src/component/Button/FIlterIcon/index.less: -------------------------------------------------------------------------------- 1 | .icon { 2 | padding: 5px; 3 | color: var(--icon-color-normal); 4 | font-size: 13px; 5 | cursor: pointer; 6 | &:hover { 7 | background-color: var(--hover-color); 8 | } 9 | &.iconActive { 10 | color: var(--icon-color-focus); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/component/CheckboxTag/index.less: -------------------------------------------------------------------------------- 1 | .tag { 2 | display: inline-block; 3 | padding: 1px 8px; 4 | line-height: 20px; 5 | word-break: keep-all; 6 | border-radius: 2px; 7 | cursor: pointer; 8 | &:hover { 9 | background-color: var(--hover-color); 10 | } 11 | &.selected { 12 | color: var(--text-color-link); 13 | background-color: var(--odc-color1-bgcolor); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/component/CommonFilter/index.less: -------------------------------------------------------------------------------- 1 | .commonFilter { 2 | padding: 12px; 3 | } 4 | .filters { 5 | width: 300px; 6 | max-height: 300px; 7 | padding: 12px; 8 | overflow: auto; 9 | border: 1px solid var(--odc-border-color); 10 | :global { 11 | .ant-checkbox-wrapper { 12 | display: flex; 13 | margin-bottom: 8px; 14 | } 15 | } 16 | } 17 | 18 | .footer { 19 | display: flex; 20 | justify-content: space-between; 21 | a { 22 | color: @odc-text-color-secondary-dark; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/component/CommonTable/component/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { FilterContent } from './FilterContent'; 18 | export { OperationContent } from './OperationContent'; 19 | export { TitleContent } from './TitleContent'; 20 | -------------------------------------------------------------------------------- /src/component/ConnectionPopover/index.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@/func.less'; 2 | 3 | .ellipsis { 4 | .odc-text-ellipsis(); 5 | } 6 | -------------------------------------------------------------------------------- /src/component/CreateSynonymModal/index.less: -------------------------------------------------------------------------------- 1 | .synonymModal { 2 | :global { 3 | .ant-modal-close-x { 4 | width: 48px; 5 | height: 48px; 6 | line-height: 48px; 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/component/DDLResultSetFilter/index.less: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | width: 320px; 3 | } 4 | 5 | .columns { 6 | width: 100%; 7 | max-height: 300px; 8 | margin: 8px 0; 9 | padding: 8px; 10 | overflow: auto; 11 | border: 1px solid #d9d9d9; 12 | border-radius: 4px; 13 | 14 | .column { 15 | max-width: 200px; 16 | overflow: hidden; 17 | text-overflow: ellipsis; 18 | } 19 | 20 | :global { 21 | .ant-checkbox-group-item { 22 | display: block; 23 | max-width: 300px; 24 | overflow: hidden; 25 | white-space: nowrap; 26 | text-overflow: ellipsis; 27 | } 28 | } 29 | } 30 | 31 | .footer { 32 | display: flex; 33 | justify-content: space-between; 34 | 35 | .select { 36 | margin-right: 8px; 37 | cursor: pointer; 38 | } 39 | 40 | .deselect { 41 | cursor: pointer; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/component/Drawer/index.less: -------------------------------------------------------------------------------- 1 | .footer { 2 | position: absolute; 3 | right: 0; 4 | bottom: 0; 5 | width: 100%; 6 | padding: 10px 16px; 7 | text-align: right; 8 | background: var(--background-primary-color); 9 | border-top: 1px solid var(--divider-color); 10 | } 11 | 12 | .content { 13 | position: absolute; 14 | top: 55px; 15 | right: 0; 16 | bottom: 53px; 17 | left: 0; 18 | padding: 16px 16px 24px 16px; 19 | overflow: auto; 20 | } 21 | -------------------------------------------------------------------------------- /src/component/DropdownMenu/index.less: -------------------------------------------------------------------------------- 1 | .button { 2 | display: flex; 3 | align-items: center; 4 | height: 32px; 5 | padding: 0 8px; 6 | color: rgba(255, 255, 255, 0.85); 7 | font-family: PingFangSC-Regular; 8 | line-height: 32px; 9 | 10 | &:hover { 11 | background: #f4f4f4; 12 | cursor: pointer; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/component/Empty/DataSourceEmpty/index.less: -------------------------------------------------------------------------------- 1 | .subTitle { 2 | color: var(--neutral-black45-color); 3 | font-size: 14px; 4 | line-height: 22px; 5 | text-align: center; 6 | } 7 | 8 | .title { 9 | margin-top: -4px; 10 | margin-bottom: 8px; 11 | color: --text-color-primary; 12 | font-weight: 500; 13 | font-size: 16px; 14 | line-height: 24px; 15 | text-align: center; 16 | } 17 | -------------------------------------------------------------------------------- /src/component/Empty/ProjectEmpty/index.less: -------------------------------------------------------------------------------- 1 | .subTitle { 2 | color: var(--neutral-black45-color); 3 | font-size: 14px; 4 | line-height: 22px; 5 | text-align: center; 6 | } 7 | 8 | .title { 9 | margin-top: -4px; 10 | margin-bottom: 8px; 11 | color: var(--text-color-primary); 12 | font-weight: 500; 13 | font-size: 16px; 14 | line-height: 24px; 15 | text-align: center; 16 | } 17 | -------------------------------------------------------------------------------- /src/component/Empty/SQLConsoleEmpty/index.less: -------------------------------------------------------------------------------- 1 | .description { 2 | margin-bottom: 8px; 3 | color: var(--text-color-secondary); 4 | font-size: 12px; 5 | line-height: 22px; 6 | text-align: center; 7 | opacity: 0.65; 8 | } 9 | 10 | .tips { 11 | color: var(--text-color-hint); 12 | font-size: 12px; 13 | line-height: 20px; 14 | text-align: center; 15 | } 16 | -------------------------------------------------------------------------------- /src/component/Empty/ScanRuleEmpty/index.less: -------------------------------------------------------------------------------- 1 | .scanRuleEmptyWrapper { 2 | flex-grow: 1; 3 | } 4 | -------------------------------------------------------------------------------- /src/component/ExecuteSQLModal/index.less: -------------------------------------------------------------------------------- 1 | .executeSqlModal { 2 | :global { 3 | .ant-modal-body { 4 | padding: 18px 16px; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/component/ExportCard/index.less: -------------------------------------------------------------------------------- 1 | .card { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100%; 5 | } 6 | 7 | .header { 8 | display: flex; 9 | flex: 0; 10 | flex-basis: 40px; 11 | align-items: center; 12 | justify-content: space-between; 13 | height: 40px; 14 | padding: 12px; 15 | border-bottom: 1px solid var(--divider-color); 16 | } 17 | 18 | .search { 19 | display: flex; 20 | flex: 0; 21 | align-items: center; 22 | padding: 12px 12px; 23 | background: inherit; 24 | } 25 | 26 | .content { 27 | flex: 1; 28 | padding: 0 0 0 12px; 29 | overflow: auto; 30 | } 31 | 32 | .cardDisabled { 33 | background-color: var(--background-tertraiy-color); 34 | } 35 | -------------------------------------------------------------------------------- /src/component/FormItemPanel/index.less: -------------------------------------------------------------------------------- 1 | .label { 2 | color: var(--text-color-primary); 3 | } 4 | .header { 5 | display: flex; 6 | justify-content: space-between; 7 | margin-bottom: 8px; 8 | line-height: 20px; 9 | } 10 | -------------------------------------------------------------------------------- /src/component/GrammerHelpSider/ItemTypes.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export const ItemTypes = { 18 | BOX: 'box', 19 | }; 20 | -------------------------------------------------------------------------------- /src/component/GrammerHelpSider/component/CustomDragLayer/index.less: -------------------------------------------------------------------------------- 1 | .dragLayer { 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | z-index: 9999; 6 | width: '100%'; 7 | height: '100%'; 8 | pointer-events: none; 9 | } 10 | 11 | .dragBox { 12 | position: relative; 13 | display: 'inline-block'; 14 | padding: 0 8px; 15 | color: #1890ff; 16 | font-size: 12px; 17 | font-family: 'PingFangSC-Semibold'; 18 | line-height: 24px; 19 | background: #fff; 20 | border: 1px solid #d9d9d9; 21 | border-radius: 2px; 22 | } 23 | 24 | .dragIcon { 25 | position: absolute; 26 | top: -7px; 27 | left: -7px; 28 | width: 12px; 29 | height: 12px; 30 | overflow: hidden; 31 | color: #008f00; 32 | line-height: 12px; 33 | background: #fff; 34 | border-radius: 7px; 35 | box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.1); 36 | } 37 | -------------------------------------------------------------------------------- /src/component/HeaderBtn/index.less: -------------------------------------------------------------------------------- 1 | .button { 2 | display: flex; 3 | align-items: center; 4 | height: 32px; 5 | padding: 0 8px; 6 | color: rgba(255, 255, 255, 0.85); 7 | font-family: PingFangSC-Regular; 8 | line-height: 32px; 9 | border-radius: 3px; 10 | 11 | &:hover { 12 | // background: #f4f4f4; 13 | background: #3f4759; 14 | cursor: pointer; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/component/HelpMenus/components/ModalHelpFeedBack/index.less: -------------------------------------------------------------------------------- 1 | .modalFeedback { 2 | height: 203px; 3 | text-align: center; 4 | 5 | :global { 6 | .ant-modal-body { 7 | padding: 16px 20px 33px; 8 | font-family: Helvetica; 9 | } 10 | 11 | h3 { 12 | margin-bottom: 28px; 13 | color: var(--text-color-primary); 14 | font-size: 14px; 15 | font-family: PingFangSC-Medium; 16 | line-height: 22px; 17 | } 18 | 19 | h4 { 20 | display: flex; 21 | align-items: center; 22 | margin-bottom: 4px; 23 | color: var(--text-color-hint); 24 | font-size: 12px; 25 | font-family: PingFangSC-Regular; 26 | line-height: 20px; 27 | } 28 | 29 | .qrcode { 30 | width: 100px; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/component/HelpMenus/index.less: -------------------------------------------------------------------------------- 1 | .helpNav { 2 | display: flex; 3 | align-items: center; 4 | padding: 0; 5 | color: rgba(255, 255, 255, 0.85); 6 | line-height: 32px; 7 | cursor: pointer; 8 | &:hover { 9 | // background: #f4f4f4; 10 | } 11 | :global { 12 | .anticon-question-circle { 13 | margin-right: 5px; 14 | overflow: hidden; 15 | font-size: 18px; 16 | line-height: 1; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/component/Input/Keymap/helper.ts: -------------------------------------------------------------------------------- 1 | import { formatMessage } from '@/util/intl'; 2 | import { KeyCode } from 'monaco-editor'; 3 | 4 | /** 5 | * 校验是否为合法的editor keymap 6 | * 1. 不能全部为shift,alt,meta,ctrl 7 | */ 8 | export const validForEditorKeymap = (value: string) => { 9 | if (!value) { 10 | return Promise.resolve(); 11 | } 12 | const keys = value.split(','); 13 | for (const key of keys) { 14 | if (![KeyCode.Ctrl, KeyCode.Shift, KeyCode.Alt, KeyCode.Meta].includes(parseInt(key))) { 15 | return Promise.resolve(); 16 | } 17 | } 18 | return Promise.reject( 19 | new Error( 20 | formatMessage({ 21 | id: 'src.component.Input.Keymap.A2ADE368', 22 | defaultMessage: '快捷键不能全部为辅助键', 23 | }), 24 | ), 25 | ); 26 | }; 27 | -------------------------------------------------------------------------------- /src/component/Loading/index.less: -------------------------------------------------------------------------------- 1 | .loading { 2 | position: fixed; 3 | top: 0; 4 | right: 0; 5 | bottom: 0; 6 | left: 0; 7 | display: flex; 8 | align-items: center; 9 | justify-content: center; 10 | } 11 | -------------------------------------------------------------------------------- /src/component/LockResultSetHint/index.less: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | background: #fff; 3 | border-radius: 4px; 4 | box-shadow: 0 0 4px 0 rgba(171, 171, 171, 0.5); 5 | 6 | .header { 7 | display: flex; 8 | align-items: center; 9 | justify-content: space-between; 10 | padding: 8px 8px 0 8px; 11 | color: #1890ff; 12 | font-size: 12px; 13 | line-height: 14px; 14 | } 15 | 16 | .desc { 17 | padding: 0 8px; 18 | color: @odc-text-color-secondary-dark; 19 | font-size: 10px; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/component/Login/_util.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /src/component/Manage/DeleteModal/index.less: -------------------------------------------------------------------------------- 1 | .errors { 2 | color: #ff4d4f; 3 | font-size: 12px; 4 | } 5 | -------------------------------------------------------------------------------- /src/component/Manage/DetailModal/index.less: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | justify-content: space-between; 4 | } 5 | .content { 6 | padding: 16px 0; 7 | } 8 | .detailDrawer { 9 | :global { 10 | .ant-drawer-header { 11 | padding: 12px 16px; 12 | } 13 | .ant-drawer-body { 14 | padding: 12px 16px 24px; 15 | .ant-divider-horizontal { 16 | margin: 12px 0; 17 | } 18 | .ant-btn-link { 19 | height: unset; 20 | padding: 0; 21 | } 22 | } 23 | .ant-drawer-footer { 24 | display: flex; 25 | justify-content: flex-end; 26 | } 27 | .ant-descriptions-view { 28 | .ant-descriptions-row:last-child { 29 | .ant-descriptions-item { 30 | padding-bottom: 0; 31 | } 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/component/Manage/ResourceSelector/index.less: -------------------------------------------------------------------------------- 1 | .infoBlock { 2 | padding: 12px; 3 | background: var(--background-primary-color); 4 | border-radius: 2px; 5 | } 6 | 7 | .connectionPopover { 8 | padding: 0; 9 | } 10 | 11 | .labelName { 12 | margin-left: -12px; 13 | padding-left: 12px; 14 | } 15 | 16 | .title { 17 | padding-top: 12px; 18 | } 19 | 20 | .hide:global(.ant-select-item-option) { 21 | display: none; 22 | } 23 | -------------------------------------------------------------------------------- /src/component/Manage/UserResource/index.less: -------------------------------------------------------------------------------- 1 | .name { 2 | :global { 3 | .ant-tooltip-inner { 4 | color: #000; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/component/MonacoEditor/config.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export const fontSizeMap = { 18 | Small: 10, 19 | Normal: 12, 20 | Large: 14, 21 | }; 22 | export function getFontSize(fontSizeType: string) { 23 | return fontSizeMap[fontSizeType] || 12; 24 | } 25 | -------------------------------------------------------------------------------- /src/component/MonacoEditor/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | position: absolute; 3 | top: 0px; 4 | right: 0px; 5 | bottom: 0px; 6 | left: 0px; 7 | } 8 | .editor { 9 | width: 100%; 10 | height: 100%; 11 | } 12 | 13 | .diffEditor { 14 | :global { 15 | .monaco-editor { 16 | .margin, 17 | .monaco-editor-background { 18 | background: var(--background-tertraiy-color); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/component/MultiLineOverflowText/index.less: -------------------------------------------------------------------------------- 1 | .overflowText { 2 | position: relative; 3 | padding-bottom: 20px; 4 | overflow: hidden; 5 | line-height: 20px; 6 | &.overflow { 7 | &::after { 8 | position: absolute; 9 | bottom: 0; 10 | display: block; 11 | padding-left: 20px; 12 | background: linear-gradient(to right, transparent, var(--background-primary-color) 50%); 13 | content: '...'; 14 | } 15 | &:not(.showMore)::after { 16 | right: 0; 17 | } 18 | &.showMore::after { 19 | right: 40px; 20 | } 21 | .more:global(.ant-btn-link) { 22 | padding-left: 30px; 23 | } 24 | } 25 | 26 | .more:global(.ant-btn-link) { 27 | position: absolute; 28 | right: 0; 29 | bottom: 0; 30 | height: unset; 31 | padding: 0; 32 | } 33 | .content { 34 | word-break: break-all; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/component/ODCSetting/index.less: -------------------------------------------------------------------------------- 1 | .box { 2 | height: 560px; 3 | position: relative; 4 | .menu { 5 | position: absolute; 6 | z-index: 1; 7 | right: 20px; 8 | top: 0px; 9 | width: 140px; 10 | padding: 12px 8px; 11 | :global { 12 | .ant-menu.ant-menu-vertical { 13 | border-right: none; 14 | border-left: 1px solid var(--odc-border-color); 15 | .ant-menu-item { 16 | height: 28px; 17 | line-height: 28px; 18 | } 19 | } 20 | } 21 | } 22 | .content { 23 | position: absolute; 24 | top: 0px; 25 | bottom: 0px; 26 | left: 0px; 27 | right: 0px; 28 | overflow-y: auto; 29 | padding: 16px; 30 | padding-right: 140px; 31 | } 32 | } 33 | 34 | .modal { 35 | :global { 36 | .ant-modal-body { 37 | padding: 0; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/component/ObjectInfoView/index.less: -------------------------------------------------------------------------------- 1 | .textFrom { 2 | padding: 25px 0 0 25px; 3 | .textFromLine { 4 | display: flex; 5 | margin-bottom: 16px; 6 | font-size: 12px; 7 | line-height: 20px; 8 | .textFromLabel { 9 | margin-right: 5px; 10 | color: #000 85%; 11 | font-family: PingFangSC-Regular; 12 | white-space: nowrap; 13 | } 14 | .textFromContent { 15 | color: #000 65%; 16 | font-family: PingFangSC-Regular; 17 | word-break: break-all; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/component/PartitionRange/PartitionValueInput.less: -------------------------------------------------------------------------------- 1 | .inputGroupWrap { 2 | display: inline-block; 3 | margin-right: 16px !important; 4 | margin-bottom: 8px; 5 | margin-left: 0 !important; 6 | white-space: nowrap; 7 | 8 | :global { 9 | .ant-input-group { 10 | width: auto; 11 | } 12 | .anticon-delete { 13 | margin-left: 4px; 14 | } 15 | .ant-input { 16 | width: 50px; 17 | } 18 | } 19 | } 20 | 21 | .rangeColumFormItem { 22 | width: calc(33.3% - 16px); 23 | min-width: 150px; 24 | margin-right: 16px !important; 25 | } 26 | 27 | .divRef { 28 | position: absolute; 29 | top: -9999px; 30 | padding: 0 12px; 31 | } 32 | .tooltipinput { 33 | :global { 34 | .ant-input-group-addon { 35 | max-width: 120px; 36 | overflow: hidden; 37 | white-space: nowrap; 38 | text-overflow: ellipsis; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/component/PropertyModal/index.less: -------------------------------------------------------------------------------- 1 | .unit { 2 | :global(.ant-input-number-group-addon) { 3 | padding: 0px 8px; 4 | background-color: transparent; 5 | border: 1px solid transparent; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/component/RadioTag/index.less: -------------------------------------------------------------------------------- 1 | .tag { 2 | display: inline-block; 3 | padding: 1px 8px; 4 | line-height: 20px; 5 | word-break: keep-all; 6 | border-radius: 2px; 7 | cursor: pointer; 8 | &:hover { 9 | background-color: var(--hover-color); 10 | } 11 | &.selected { 12 | color: var(--text-color-link); 13 | background-color: var(--odc-color1-bgcolor); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/component/RiskLevelLabel/index.less: -------------------------------------------------------------------------------- 1 | .tag { 2 | :global { 3 | .ant-tag { 4 | border-color: transparent !important; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/component/SQLCodePreviewer/index.less: -------------------------------------------------------------------------------- 1 | .editor { 2 | position: absolute; 3 | top: 0; 4 | left: 0; 5 | z-index: -1; 6 | } 7 | -------------------------------------------------------------------------------- /src/component/SQLConfig/index.less: -------------------------------------------------------------------------------- 1 | .sqlconfig { 2 | margin-left: 8px; 3 | padding: 5px; 4 | &:hover { 5 | background: var(--hover-color); 6 | cursor: pointer; 7 | } 8 | } 9 | .sqlconfigGroup { 10 | background-color: var(--background-tertraiy-color); 11 | border-radius: 2px; 12 | width: 100%; 13 | padding: 8px 12px; 14 | margin-bottom: 16px; 15 | } 16 | -------------------------------------------------------------------------------- /src/component/SQLContent/index.less: -------------------------------------------------------------------------------- 1 | .sqlContent { 2 | .content { 3 | position: relative; 4 | box-sizing: border-box; 5 | height: 128px; 6 | max-height: 360px; 7 | padding-top: 8px; 8 | background: var(--background-tertraiy-color); 9 | :global { 10 | .monaco-editor { 11 | .margin, 12 | .monaco-editor-background { 13 | background: var(--background-tertraiy-color); 14 | } 15 | } 16 | } 17 | } 18 | .files { 19 | display: flex; 20 | flex-direction: column; 21 | max-height: 360px; 22 | overflow-y: auto; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/component/SQLLintResult/index.less: -------------------------------------------------------------------------------- 1 | .item { 2 | display: flex; 3 | align-items: center; 4 | padding-left: 20px; 5 | 6 | .icon { 7 | flex-grow: 0; 8 | flex-shrink: 0; 9 | margin-right: 12px; 10 | color: var(--icon-orange-color); 11 | font-size: 14px; 12 | } 13 | 14 | .desc { 15 | flex-grow: 1; 16 | flex-shrink: 1; 17 | } 18 | } 19 | 20 | .collapse { 21 | &:global(.ant-collapse) { 22 | border: none !important; 23 | 24 | :global { 25 | .ant-collapse-item { 26 | border: none !important; 27 | 28 | .ant-collapse-header { 29 | padding-bottom: 0; 30 | } 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/component/SQLLintResult/type.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export interface ISQLLintReuslt { 18 | sql: string; 19 | violations: { 20 | col: number; 21 | level: number; 22 | localizedMessage: string; 23 | row: number; 24 | type?: string; 25 | }[]; 26 | } 27 | -------------------------------------------------------------------------------- /src/component/ScriptPage/index.less: -------------------------------------------------------------------------------- 1 | .stackList { 2 | display: flex; 3 | height: 28px; 4 | line-height: 28px; 5 | border-bottom: 1px solid var(--divider-color); 6 | 7 | :global { 8 | .stack-item { 9 | position: relative; 10 | width: 150px; 11 | padding-right: 12px; 12 | padding-left: 12px; 13 | overflow: hidden; 14 | text-align: center; 15 | text-overflow: ellipsis; 16 | border-right: 1px solid var(--odc-border-color); 17 | cursor: pointer; 18 | } 19 | 20 | .icon-active { 21 | position: absolute; 22 | top: 50%; 23 | right: 5px; 24 | display: inline-block; 25 | width: 8px; 26 | height: 8px; 27 | margin-top: -4px; 28 | overflow: hidden; 29 | background: #178bf6; 30 | border-radius: 8px; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/component/SearchFilter/index.less: -------------------------------------------------------------------------------- 1 | .searchFilter { 2 | padding: 12px; 3 | .footer { 4 | display: flex; 5 | :global { 6 | .ant-space-item { 7 | flex: 1; 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/component/SelectTransfer/index.less: -------------------------------------------------------------------------------- 1 | .viewTree { 2 | color: #000; 3 | :global { 4 | .ant-tree-treenode { 5 | width: calc(100% - 12px); 6 | .ant-tree-node-content-wrapper { 7 | width: 100%; 8 | .ant-tree-title { 9 | width: 100%; 10 | } 11 | } 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/component/StatusSwitch/index.less: -------------------------------------------------------------------------------- 1 | .popconfirm { 2 | :global { 3 | .ant-popover-inner-content { 4 | width: 100%; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/component/Table/TableCard/index.less: -------------------------------------------------------------------------------- 1 | .card { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100%; 5 | .header { 6 | display: flex; 7 | flex: 0; 8 | flex-basis: 36px; 9 | flex-direction: row; 10 | align-items: center; 11 | justify-content: space-between; 12 | padding-bottom: 12px; 13 | .title { 14 | } 15 | .extra { 16 | padding-right: 8px; 17 | } 18 | } 19 | .table { 20 | flex-grow: 1; 21 | flex-shrink: 1; 22 | overflow: hidden; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/component/Task/AlterDdlTask/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .ddl-alter { 2 | .hour { 3 | margin-left: 8px; 4 | } 5 | .sqlContent { 6 | :global { 7 | .ant-form-item-row, 8 | .ant-form-item-control-input, 9 | .ant-form-item-control-input-content { 10 | height: 100%; 11 | } 12 | .ant-form-item-control-input-content { 13 | border: 1px solid var(--odc-border-color); 14 | } 15 | } 16 | } 17 | :global { 18 | .ant-alert { 19 | align-items: flex-start; 20 | .ant-alert-icon { 21 | margin: 4px 8px 8px; 22 | } 23 | } 24 | .ant-drawer-footer { 25 | display: flex; 26 | justify-content: flex-end; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/component/Task/AlterDdlTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { getItems } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/ApplyDatabasePermission/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .createModal { 2 | :global { 3 | .ant-drawer-footer { 4 | display: flex; 5 | justify-content: flex-end; 6 | } 7 | .ant-form-item-label { 8 | .ant-form-item-optional { 9 | display: none; 10 | } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/component/Task/ApplyDatabasePermission/DetailContent/index.less: -------------------------------------------------------------------------------- 1 | .table { 2 | :global { 3 | .ant-pagination { 4 | padding-right: 0; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/component/Task/ApplyDatabasePermission/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as ApplyDatabasePermissionTaskContent } from './DetailContent'; 19 | export * from './CreateModal'; 20 | -------------------------------------------------------------------------------- /src/component/Task/ApplyPermission/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .applyPermission { 2 | :global { 3 | .ant-drawer-footer { 4 | display: flex; 5 | justify-content: flex-end; 6 | } 7 | } 8 | } 9 | 10 | .rolesOptions { 11 | max-width: 380px; 12 | :global { 13 | .ant-typography { 14 | white-space: wrap; 15 | color: rgba(0, 0, 0, 0.45); 16 | margin-bottom: 0px; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/component/Task/ApplyPermission/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as ApplyPermissionTaskContent } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/ApplyTablePermission/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .createModal { 2 | :global { 3 | .ant-drawer-footer { 4 | display: flex; 5 | justify-content: flex-end; 6 | } 7 | } 8 | } 9 | 10 | .projectEmptyBox { 11 | display: flex; 12 | flex-direction: column; 13 | align-items: center; 14 | justify-content: center; 15 | } 16 | -------------------------------------------------------------------------------- /src/component/Task/ApplyTablePermission/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as ApplyTablePermissionTaskContent } from './DetailContent'; 19 | export * from './CreateModal'; 20 | -------------------------------------------------------------------------------- /src/component/Task/AsyncTask/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .asyncTask { 2 | .hide { 3 | display: none; 4 | } 5 | .tip { 6 | color: var(--text-color-secondary); 7 | font-size: 12; 8 | line-height: 20px; 9 | } 10 | .desc { 11 | margin-top: 4; 12 | color: var(--text-color-hint); 13 | font-size: 12; 14 | line-height: 20px; 15 | } 16 | .hour { 17 | margin-left: 8px; 18 | } 19 | .sqlContent { 20 | :global { 21 | .ant-form-item-row, 22 | .ant-form-item-control-input, 23 | .ant-form-item-control-input-content { 24 | height: 100%; 25 | } 26 | .ant-form-item-control-input-content { 27 | border: 1px solid var(--odc-border-color); 28 | } 29 | } 30 | } 31 | :global { 32 | .ant-drawer-footer { 33 | display: flex; 34 | justify-content: flex-end; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/component/Task/AsyncTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as AsyncTaskContent } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/DataArchiveTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as DataArchiveTaskContent } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/DataClearTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as DataClearTaskContent } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/DataMockerTask/CreateModal/RuleContent/index.less: -------------------------------------------------------------------------------- 1 | .main { 2 | display: flex; 3 | width: 100%; 4 | } 5 | .items { 6 | flex-grow: 1; 7 | flex-shrink: 1; 8 | word-break: break-all; 9 | } 10 | .tools { 11 | flex-grow: 0; 12 | flex-shrink: 0; 13 | padding-left: 10px; 14 | } 15 | -------------------------------------------------------------------------------- /src/component/Task/DataMockerTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { getItems } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/ExportTask/CreateModal/ExportForm/index.less: -------------------------------------------------------------------------------- 1 | .odd { 2 | background: var(--background-tertraiy-color); 3 | } 4 | .even { 5 | background: var(--background-secondry-color); 6 | } 7 | .objLine { 8 | margin-bottom: 8px; 9 | color: var(--text-color-secondary); 10 | font-family: PingFangSC-Regular; 11 | line-height: 20px; 12 | .objLineLabel { 13 | color: var(--text-color-primary); 14 | font-family: PingFangSC-Regular; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/component/Task/ExportTask/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .drawerFooter { 2 | position: absolute; 3 | right: 0; 4 | bottom: 0; 5 | display: flex; 6 | align-items: center; 7 | justify-content: space-between; 8 | width: 100%; 9 | padding: 10px 16px; 10 | background: var(--background-primary-color); 11 | border-top: 1px solid var(--divider-color); 12 | } 13 | .drawerContent { 14 | position: absolute; 15 | top: 55px; 16 | right: 0; 17 | bottom: 53px; 18 | left: 0; 19 | padding: 16px 16px 24px 16px; 20 | overflow: auto; 21 | } 22 | -------------------------------------------------------------------------------- /src/component/Task/ExportTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default as ExportTaskContent } from '../component/DataTransferModal'; 18 | export { default } from './CreateModal'; 19 | -------------------------------------------------------------------------------- /src/component/Task/ImportTask/CreateModal/ImportForm/FileSelecterPanel/index.less: -------------------------------------------------------------------------------- 1 | .fileImportFiles { 2 | width: 100%; 3 | padding: 10px; 4 | background-color: var(--background-tertraiy-color); 5 | :global { 6 | .ant-tree-treenode { 7 | .ant-tree-checkbox { 8 | margin-right: 0; 9 | } 10 | .ant-tree-iconEle { 11 | color: var(--icon-color-disable); 12 | font-size: 14px; 13 | } 14 | } 15 | } 16 | } 17 | .fileImportUpload { 18 | height: 136px !important; 19 | display: flex; 20 | align-items: center; 21 | justify-content: center; 22 | flex-direction: column; 23 | } 24 | -------------------------------------------------------------------------------- /src/component/Task/ImportTask/CreateModal/ImportForm/index.less: -------------------------------------------------------------------------------- 1 | .odd { 2 | background: #f0f2f5; 3 | } 4 | .even { 5 | background: #fff; 6 | } 7 | .objLine { 8 | margin-bottom: 8px; 9 | color: var(--text-color-secondary); 10 | font-family: PingFangSC-Regular; 11 | line-height: 20px; 12 | .objLineLabel { 13 | color: var(--text-color-primary); 14 | font-family: PingFangSC-Regular; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/component/Task/ImportTask/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .drawerFooter { 2 | position: absolute; 3 | right: 0; 4 | bottom: 0; 5 | display: flex; 6 | align-items: center; 7 | justify-content: space-between; 8 | width: 100%; 9 | padding: 10px 16px; 10 | background: var(--background-primary-color); 11 | border-top: 1px solid var(--divider-color); 12 | } 13 | .drawerContent { 14 | position: absolute; 15 | top: 55px; 16 | right: 0; 17 | bottom: 53px; 18 | left: 0; 19 | padding: 16px 16px 24px 16px; 20 | overflow: auto; 21 | } 22 | -------------------------------------------------------------------------------- /src/component/Task/ImportTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default as ImportTaskContent } from '../component/DataTransferModal'; 18 | export { default } from './CreateModal'; 19 | -------------------------------------------------------------------------------- /src/component/Task/LogicDatabaseAsyncTask/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .asyncTask { 2 | .hide { 3 | display: none; 4 | } 5 | .tip { 6 | color: var(--text-color-secondary); 7 | font-size: 12; 8 | line-height: 20px; 9 | } 10 | .desc { 11 | margin-top: 4; 12 | color: var(--text-color-hint); 13 | font-size: 12; 14 | line-height: 20px; 15 | } 16 | .hour { 17 | margin-left: 8px; 18 | } 19 | .sqlContent { 20 | :global { 21 | .ant-form-item-row, 22 | .ant-form-item-control-input, 23 | .ant-form-item-control-input-content { 24 | height: 100%; 25 | } 26 | .ant-form-item-control-input-content { 27 | border: 1px solid var(--odc-border-color); 28 | } 29 | } 30 | } 31 | :global { 32 | .ant-drawer-footer { 33 | display: flex; 34 | justify-content: flex-end; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/component/Task/LogicDatabaseAsyncTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as LogicDatabaseAsyncTaskContent } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/MutipleAsyncTask/CreateModal/MultipleAsyncContext.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export const MultipleAsyncContext = React.createContext<{ 4 | projectId: number; 5 | projectMap: Record; 6 | }>({ 7 | projectId: null, 8 | projectMap: {}, 9 | }); 10 | -------------------------------------------------------------------------------- /src/component/Task/MutipleAsyncTask/components/Template/index.tsx: -------------------------------------------------------------------------------- 1 | export { default as CreateTemplate } from './CreateTemplate'; 2 | export { default as EditTemplate } from './EditTemplate'; 3 | export { default as ManageTemplate } from './ManageTemplate'; 4 | export { default as SelectTemplate } from './SelectTemplate'; 5 | export { default as ShowTemplate } from './ShowTemplate'; 6 | -------------------------------------------------------------------------------- /src/component/Task/MutipleAsyncTask/index.tsx: -------------------------------------------------------------------------------- 1 | export { default } from './CreateModal'; 2 | export { default as MutipleAsyncTaskContent } from './DetailContent'; 3 | -------------------------------------------------------------------------------- /src/component/Task/PartitionTask/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .tableWrapper { 2 | :global { 3 | .ant-spin-container { 4 | padding-bottom: 0; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/component/Task/PartitionTask/DetailContent/index.less: -------------------------------------------------------------------------------- 1 | .next-time:global(.ant-collapse) { 2 | :global { 3 | .ant-collapse-item > .ant-collapse-header, 4 | .ant-collapse-content > .ant-collapse-content-box { 5 | padding: 0; 6 | } 7 | .ant-collapse-content > .ant-collapse-content-box { 8 | padding-right: 20px; 9 | text-align: right; 10 | } 11 | .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box { 12 | padding-top: 0; 13 | padding-bottom: 0; 14 | } 15 | .ant-collapse-item-active { 16 | .ant-collapse-header { 17 | padding-bottom: 0; 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/component/Task/PartitionTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as PartitionTaskContent } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/PermissionApplication/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // export { default as ImportTaskContent } from '../component/DataTransferModal'; 18 | export { default } from './CreateModal'; 19 | -------------------------------------------------------------------------------- /src/component/Task/ResultSetExportTask/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .drawer { 2 | .hide { 3 | display: none; 4 | } 5 | .tip { 6 | color: var(--text-color-secondary); 7 | font-size: 12; 8 | line-height: 20px; 9 | } 10 | .desc { 11 | margin-top: 4; 12 | color: var(--text-color-hint); 13 | font-size: 12; 14 | line-height: 20px; 15 | } 16 | .hour { 17 | margin-left: 8px; 18 | } 19 | .sqlContent { 20 | :global { 21 | .ant-form-item-row, 22 | .ant-form-item-control-input, 23 | .ant-form-item-control-input-content { 24 | height: 100%; 25 | } 26 | .ant-form-item-control-input-content { 27 | border: 1px solid var(--odc-border-color); 28 | } 29 | } 30 | } 31 | :global { 32 | .ant-drawer-footer { 33 | display: flex; 34 | justify-content: flex-end; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/component/Task/ResultSetExportTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal/index'; 18 | export { getItems } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/SQLPlanTask/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .sql-plan { 2 | .hide { 3 | display: none; 4 | } 5 | .tip { 6 | color: var(--text-color-secondary); 7 | font-size: 12; 8 | line-height: 20px; 9 | } 10 | .desc { 11 | margin-top: 4; 12 | color: var(--text-color-hint); 13 | font-size: 12; 14 | line-height: 20px; 15 | } 16 | .hour { 17 | margin-left: 8px; 18 | } 19 | .sqlContent { 20 | :global { 21 | .ant-form-item-row, 22 | .ant-form-item-control-input, 23 | .ant-form-item-control-input-content { 24 | height: 100%; 25 | } 26 | .ant-form-item-control-input-content { 27 | border: 1px solid var(--odc-border-color); 28 | } 29 | } 30 | } 31 | :global { 32 | .ant-drawer-footer { 33 | display: flex; 34 | justify-content: flex-end; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/component/Task/SQLPlanTask/CreateModal/interface.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export enum TriggerStrategy { 18 | DAY = 'DAY', 19 | WEEK = 'WEEK', 20 | MONTH = 'MONTH', 21 | CRON = 'CRON', 22 | } 23 | -------------------------------------------------------------------------------- /src/component/Task/SQLPlanTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as SqlPlanTaskContent } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/ShadowSyncTask/CreateModal/SelectPanel/index.less: -------------------------------------------------------------------------------- 1 | .objectTrees { 2 | height: 400px; 3 | border: 1px solid var(--odc-border-color); 4 | } 5 | 6 | a.delete { 7 | position: absolute; 8 | top: 0; 9 | right: 0; 10 | display: flex; 11 | align-items: center; 12 | width: 22px; 13 | height: 22px; 14 | padding-left: 3px; 15 | color: var(--text-color-secondary) !important; 16 | background: var(--background-tertraiy-color) !important; 17 | } 18 | -------------------------------------------------------------------------------- /src/component/Task/ShadowSyncTask/CreateModal/index.less: -------------------------------------------------------------------------------- 1 | .drawer { 2 | :global { 3 | .ant-drawer-footer { 4 | display: flex; 5 | justify-content: flex-end; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/component/Task/ShadowSyncTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { getItems } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/StructureComparisonTask/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default } from './CreateModal'; 18 | export { default as StructureComparisonTaskContent } from './DetailContent'; 19 | -------------------------------------------------------------------------------- /src/component/Task/TaskDetailContext.tsx: -------------------------------------------------------------------------------- 1 | import type { ICycleTaskRecord, TaskRecord, TaskRecordParameters } from '@/d.ts'; 2 | import React from 'react'; 3 | import { IState } from './Content'; 4 | 5 | interface ITaskDetailContext { 6 | handleDetailVisible: ( 7 | task: TaskRecord | ICycleTaskRecord, 8 | visible?: boolean, 9 | ) => void; 10 | setState: (patch: Partial | ((prevState: IState) => Partial)) => void; 11 | } 12 | 13 | export const TaskDetailContext = React.createContext(null); 14 | -------------------------------------------------------------------------------- /src/component/Task/component/ArchiveRangeTip/index.less: -------------------------------------------------------------------------------- 1 | .blockCard { 2 | width: 100%; 3 | background: var(--background-tertraiy-color); 4 | padding: 12px; 5 | } 6 | -------------------------------------------------------------------------------- /src/component/Task/component/CommonDetailModal/TaskProgress/index.less: -------------------------------------------------------------------------------- 1 | .subTaskTable { 2 | :global { 3 | .ant-table-tbody > tr.ant-table-row-selected > td { 4 | background: var(--background-primary-color); 5 | } 6 | 7 | .ant-table-row, 8 | .ant-table-thead { 9 | background: var(--background-primary-color); 10 | 11 | .ant-table-cell:first-child { 12 | border-left: 1px solid var(--odc-border-color); 13 | } 14 | 15 | .ant-table-cell { 16 | border-right: 1px solid var(--odc-border-color); 17 | border-bottom: 1px solid var(--odc-border-color); 18 | } 19 | } 20 | 21 | .ant-table-thead { 22 | .ant-table-cell { 23 | border-top: 1px solid var(--odc-border-color); 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/component/Task/component/DataTransferModal/index.less: -------------------------------------------------------------------------------- 1 | .spaceBlock { 2 | margin-top: 8px; 3 | } 4 | -------------------------------------------------------------------------------- /src/component/Task/component/DatabaseSelect/index.less: -------------------------------------------------------------------------------- 1 | .popover { 2 | :global { 3 | .ant-popover-inner { 4 | border-radius: 5px; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/component/Task/component/PartitionPolicyFormTable/PreviewSQLModal/index.less: -------------------------------------------------------------------------------- 1 | .modal { 2 | :global { 3 | .ant-modal-body { 4 | padding: 10px 16px; 5 | } 6 | } 7 | } 8 | .wrapper { 9 | height: 390px; 10 | position: relative; 11 | background: var(--background-tertraiy-color); 12 | padding: 11px 12px 8px; 13 | } 14 | .tabs { 15 | :global { 16 | .ant-tabs-nav .ant-tabs-tab { 17 | padding: 4px 12px; 18 | } 19 | .ant-tabs-nav { 20 | margin-bottom: 10px; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/component/Task/component/PartitionPolicyFormTable/RuleFormItem/index.less: -------------------------------------------------------------------------------- 1 | .pickerLabel { 2 | display: flex; 3 | justify-content: space-between; 4 | align-items: center; 5 | .picker { 6 | display: inline-block; 7 | opacity: 0; 8 | width: 0; 9 | height: 0; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/component/Task/component/PartitionPolicyFormTable/const.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export enum START_DATE { 18 | CURRENT_DATE = 'CURRENT_DATE', 19 | CUSTOM_DATE = 'CUSTOM_DATE', 20 | } 21 | -------------------------------------------------------------------------------- /src/component/Task/component/PartitionTextArea/index.less: -------------------------------------------------------------------------------- 1 | .inputLabel { 2 | position: relative; 3 | padding: 0 11px; 4 | color: rgba(0, 0, 0, 0.85); 5 | font-weight: normal; 6 | font-size: 12px; 7 | text-align: center; 8 | background-color: #fafafa; 9 | border: 1px solid #d9d9d9; 10 | border-radius: 2px 0 0 2px; 11 | border-right: 0; 12 | transition: all 0.3s; 13 | margin: 8px -8px 8px 8px; 14 | width: auto; 15 | white-space: nowrap; 16 | display: flex; 17 | align-items: center; 18 | } 19 | -------------------------------------------------------------------------------- /src/component/Task/component/TaskdurationItem/index.less: -------------------------------------------------------------------------------- 1 | .durationInputNumber { 2 | :global { 3 | .ant-input-number-handler-down-disabled, 4 | .ant-input-number-handler-up-disabled { 5 | .ant-input-number-handler-down-inner { 6 | color: #d9d9d9; 7 | } 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/component/Toolbar/statefulIcon/index.less: -------------------------------------------------------------------------------- 1 | .disabled { 2 | color: var(--icon-color-disable); 3 | 4 | &:hover { 5 | cursor: auto; 6 | } 7 | } 8 | 9 | .loading, 10 | .loading:global(.anticon) { 11 | color: #3fa3ff; 12 | background: var(--hover-color); 13 | outline: 5px solid var(--hover-color); 14 | &:hover { 15 | cursor: progress; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/component/TreeFilter/index.less: -------------------------------------------------------------------------------- 1 | .treeFilter { 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: space-between; 5 | width: 240px; 6 | :global { 7 | .ant-tree { 8 | min-height: 220px; 9 | max-height: 220px; 10 | padding: 16px; 11 | overflow-y: auto; 12 | } 13 | .ant-tree-switcher { 14 | width: 16px; 15 | &:not(.ant-tree-switcher-noop) { 16 | width: unset; 17 | padding-right: 6px; 18 | } 19 | } 20 | .ant-tree-node-content-wrapper { 21 | &:hover, 22 | &.ant-tree-node-selected { 23 | background: none; 24 | } 25 | } 26 | } 27 | .footer { 28 | display: flex; 29 | justify-content: space-between; 30 | padding: 7px 8px 7px 3px; 31 | border-top: 1px solid var(--odc-border-color); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/component/UserPopover/index.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@/func.less'; 2 | .userPopover { 3 | max-width: 240px; 4 | :global { 5 | .ant-space-vertical { 6 | max-width: 100%; 7 | } 8 | } 9 | .ellipsis { 10 | .odc-text-ellipsis(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/component/ViewColumn/index.less: -------------------------------------------------------------------------------- 1 | .list { 2 | padding: 16px; 3 | padding-bottom: 0; 4 | border: 1px solid #d9d9d9; 5 | border-radius: 4px; 6 | 7 | .row { 8 | display: flex; 9 | align-items: center; 10 | justify-content: space-between; 11 | margin-bottom: 16px; 12 | 13 | &:hover { 14 | cursor: move; 15 | } 16 | } 17 | 18 | .dragging { 19 | cursor: move; 20 | } 21 | 22 | .close { 23 | padding-left: 8px; 24 | opacity: 0.75; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/component/WindowManager/DefaultPage.less: -------------------------------------------------------------------------------- 1 | .item { 2 | display: flex; 3 | align-items: center; 4 | width: 360px; 5 | height: 44px; 6 | margin-top: 12px; 7 | padding: 0px 16px; 8 | background-color: var(--background-tertraiy-color); 9 | cursor: pointer; 10 | &:hover { 11 | background-color: var(--hover-color); 12 | } 13 | .icon { 14 | margin-right: 13px; 15 | color: var(--icon-color-disable); 16 | font-size: 16px; 17 | } 18 | .label { 19 | color: var(--text-color-primary); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/component/YamlEditor/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | position: absolute; 3 | top: 0px; 4 | right: 0px; 5 | bottom: 0px; 6 | left: 0px; 7 | } 8 | .editor { 9 | width: 100%; 10 | height: 100%; 11 | } 12 | -------------------------------------------------------------------------------- /src/component/helpDoc/index.less: -------------------------------------------------------------------------------- 1 | .c-helpdoc { 2 | p { 3 | margin: 0; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/component/logicIcon/index.less: -------------------------------------------------------------------------------- 1 | .logicIcon { 2 | display: inline-flex; 3 | align-items: center; 4 | justify-content: center; 5 | width: 16px; 6 | height: 16px; 7 | margin: 0 4px; 8 | font-weight: 500; 9 | background-color: var(--brand-blue1-color); 10 | border-radius: 8px; 11 | .font { 12 | color: var(--brand-blue6-color); 13 | font-size: 20px; 14 | transform: scale(0.5); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/component/logicIcon/index.tsx: -------------------------------------------------------------------------------- 1 | import { formatMessage } from '@/util/intl'; 2 | import styles from './index.less'; 3 | export default () => { 4 | return ( 5 | 6 | 7 | {formatMessage({ id: 'src.component.logicIcon.70D6BF68', defaultMessage: '逻' })} 8 | 9 | 10 | ); 11 | }; 12 | -------------------------------------------------------------------------------- /src/func.less: -------------------------------------------------------------------------------- 1 | .odc-text-ellipsis { 2 | overflow: hidden; 3 | white-space: nowrap; 4 | text-overflow: ellipsis; 5 | } 6 | -------------------------------------------------------------------------------- /src/layout/DefaultContainer.less: -------------------------------------------------------------------------------- 1 | .content { 2 | position: relative; 3 | min-width: 720px; 4 | height: 100%; 5 | // margin: 24px; 6 | // padding-top: @layout-header-height; 7 | overflow-x: hidden; 8 | } 9 | -------------------------------------------------------------------------------- /src/layout/MenuContext.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import { createContext } from 'react'; 18 | 19 | export default createContext(null); 20 | -------------------------------------------------------------------------------- /src/layout/SpaceContainer/Sider/DropMenu/index.less: -------------------------------------------------------------------------------- 1 | .dropmenu { 2 | &.small { 3 | padding-left: 4px; 4 | } 5 | 6 | padding-left: 12px; 7 | :global { 8 | .ant-popover-content { 9 | .ant-popover-arrow { 10 | display: none; 11 | } 12 | .ant-popover-inner { 13 | .ant-popover-inner-content { 14 | min-width: 120px; 15 | padding: 0; 16 | .ant-menu { 17 | .ant-menu-item { 18 | height: 32px; 19 | margin: 0; 20 | padding: 5px 12px; 21 | line-height: 22px; 22 | &:hover { 23 | color: var(--text-color-primary); 24 | background-color: var(--hover-color); 25 | } 26 | } 27 | } 28 | } 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/layout/SpaceContainer/Sider/HelpItem/index.less: -------------------------------------------------------------------------------- 1 | .menu { 2 | .ant-popover-content { 3 | .ant-popover-inner { 4 | .ant-popover-inner-content { 5 | padding: 0; 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/layout/SpaceContainer/Sider/MineItem/index.less: -------------------------------------------------------------------------------- 1 | .userMenu { 2 | width: 160px; 3 | 4 | .userName { 5 | font-weight: bold; 6 | } 7 | 8 | .userName, 9 | .userRoles { 10 | display: inline-block; 11 | max-width: 100%; 12 | overflow: hidden; 13 | white-space: nowrap; 14 | text-overflow: ellipsis; 15 | word-break: keep-all; 16 | } 17 | 18 | :global { 19 | .ant-divider-horizontal { 20 | margin: 0; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/layout/SpaceContainer/Sider/SettingItem/index.less: -------------------------------------------------------------------------------- 1 | .menu { 2 | .ant-popover-content { 3 | .ant-popover-inner { 4 | .ant-popover-inner-content { 5 | padding: 0; 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/layout/SpaceContainer/Sider/SpaceSelect/index.less: -------------------------------------------------------------------------------- 1 | .space-switch { 2 | &:global(.ant-select) { 3 | :global { 4 | .ant-select-selector { 5 | padding: 0 7px; 6 | border: none; 7 | } 8 | } 9 | } 10 | :global { 11 | .ant-select-arrow { 12 | display: none; 13 | } 14 | } 15 | &:not(.collapsed):hover { 16 | :global { 17 | .ant-select-arrow { 18 | display: block; 19 | } 20 | } 21 | } 22 | } 23 | .synergy, 24 | .private { 25 | font-size: 16px; 26 | line-height: 16px; 27 | } 28 | 29 | .synergy { 30 | background: #1890ff; 31 | } 32 | .private { 33 | background: #52c41a; 34 | } 35 | -------------------------------------------------------------------------------- /src/layout/SpaceContainer/index.less: -------------------------------------------------------------------------------- 1 | .content { 2 | position: absolute; 3 | top: 0; 4 | left: 0; 5 | display: flex; 6 | flex-direction: column; 7 | width: 100%; 8 | height: 100%; 9 | overflow: hidden; 10 | background-color: var(--background-primary-color); 11 | .alert { 12 | flex: 0; 13 | width: 100%; 14 | p { 15 | margin: 0px; 16 | } 17 | } 18 | .mainBox { 19 | flex: 1; 20 | width: 100%; 21 | overflow: hidden; 22 | display: flex; 23 | flex-direction: row; 24 | } 25 | } 26 | .main { 27 | flex-grow: 1; 28 | flex-shrink: 1; 29 | height: 100%; 30 | overflow: hidden; 31 | background-color: var(--background-secondry-color); 32 | } 33 | -------------------------------------------------------------------------------- /src/loading.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import Loading from './component/Loading'; 18 | export default function () { 19 | return ( 20 | <> 21 | 22 | 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/en-US.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export default {}; 18 | -------------------------------------------------------------------------------- /src/locales/zh-CN.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export default {}; 18 | -------------------------------------------------------------------------------- /src/locales/zh-TW.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export default {}; 18 | -------------------------------------------------------------------------------- /src/page/Auth/Autoauth/index.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@/func.less'; 2 | .ellipsis { 3 | .odc-text-ellipsis(); 4 | } 5 | .actions { 6 | min-width: 100px; 7 | } 8 | 9 | .title { 10 | white-space: pre; 11 | } 12 | 13 | .ruleDetail { 14 | padding: 16px; 15 | background: var(--background-tertraiy-color); 16 | } 17 | 18 | .detail { 19 | padding-top: 0; 20 | .header { 21 | display: flex; 22 | justify-content: space-between; 23 | padding-bottom: 12px; 24 | color: var(--text-color-primary); 25 | } 26 | .card { 27 | padding-bottom: 12px; 28 | } 29 | .label { 30 | padding-bottom: 6px; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/page/Auth/Role/component/ResourceSelector/index.less: -------------------------------------------------------------------------------- 1 | .noOptional { 2 | :global { 3 | .ant-form-item-label > label { 4 | .ant-form-item-optional { 5 | display: none; 6 | } 7 | } 8 | .ant-tabs-tab + .ant-tabs-tab { 9 | margin: 0; 10 | } 11 | .ant-tabs-card > .ant-tabs-nav .ant-tabs-tab { 12 | padding: 0 16px; 13 | line-height: 28px; 14 | } 15 | .ant-tabs-top { 16 | margin-top: 5px; 17 | .ant-tabs-ink-bar { 18 | top: 0; 19 | bottom: unset; 20 | } 21 | } 22 | } 23 | } 24 | .resource-header { 25 | display: flex; 26 | justify-content: space-between; 27 | padding: 12px 12px 0; 28 | } 29 | 30 | .resource-header-sys { 31 | display: flex; 32 | justify-content: space-between; 33 | padding: 0 12px; 34 | } 35 | -------------------------------------------------------------------------------- /src/page/Auth/User/index.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@/func.less'; 2 | .name { 3 | color: @odc-text-color-dark; 4 | } 5 | .ellipsis { 6 | .odc-text-ellipsis(); 7 | } 8 | .actions { 9 | min-width: 100px; 10 | } 11 | .actionBtn { 12 | color: #1890ff; 13 | font-size: 12px; 14 | cursor: pointer; 15 | } 16 | 17 | .title { 18 | white-space: pre; 19 | } 20 | 21 | .pre-item { 22 | display: flex; 23 | align-items: center; 24 | line-height: 22px; 25 | } 26 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/Content/List/ConnectionNameItem/index.less: -------------------------------------------------------------------------------- 1 | .activeStatus:global(.anticon) { 2 | color: #1890ff; 3 | font-size: 24px; 4 | } 5 | 6 | .container { 7 | display: flex; 8 | align-items: center; 9 | width: 100%; 10 | height: 100%; 11 | &.isActive { 12 | cursor: pointer; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/Content/List/IconBtn/index.less: -------------------------------------------------------------------------------- 1 | .iconBtn { 2 | color: var(--icon-color-normal); 3 | font-size: 14px; 4 | cursor: pointer; 5 | &:hover { 6 | color: var(--icon-color-focus); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/Content/List/MoreBtn/index.less: -------------------------------------------------------------------------------- 1 | .menu { 2 | :global { 3 | .ant-dropdown-menu-title-content { 4 | padding-left: 6px; 5 | } 6 | .ant-dropdown-menu-item-icon { 7 | color: var(--icon-color-normal); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/Content/index.less: -------------------------------------------------------------------------------- 1 | .content { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100%; 5 | } 6 | 7 | .header { 8 | display: flex; 9 | flex-grow: 0; 10 | flex-shrink: 0; 11 | align-items: center; 12 | justify-content: space-between; 13 | height: 40px; 14 | } 15 | .bar { 16 | flex-grow: 0; 17 | flex-shrink: 0; 18 | padding: 10px 0; 19 | } 20 | .list { 21 | flex-grow: 1; 22 | flex-shrink: 1; 23 | overflow-x: hidden; 24 | overflow-y: auto; 25 | } 26 | 27 | .connectionPopover { 28 | padding: 0; 29 | :global { 30 | .ant-popover-inner-content { 31 | padding: 0; 32 | } 33 | } 34 | } 35 | 36 | .pre-item { 37 | display: flex; 38 | align-items: center; 39 | line-height: 22px; 40 | } 41 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/Header/FIlterIcon/index.less: -------------------------------------------------------------------------------- 1 | .icon { 2 | padding: 5px; 3 | color: var(--icon-color-normal); 4 | font-size: 13px; 5 | cursor: pointer; 6 | &:hover { 7 | background-color: var(--hover-color); 8 | } 9 | &.iconActive { 10 | color: var(--icon-color-focus); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/Header/index.less: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-between; 5 | height: 50px; 6 | border-bottom: 1px solid var(--odc-border-color); 7 | } 8 | .right { 9 | padding-right: 16px; 10 | } 11 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/NewDatasourceDrawer/Form/DBTypeItem/index.less: -------------------------------------------------------------------------------- 1 | .select { 2 | :global { 3 | .ant-radio-button-wrapper { 4 | display: flex; 5 | align-items: center; 6 | height: 40px; 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/NewDatasourceDrawer/Form/ExtraConfig/index.less: -------------------------------------------------------------------------------- 1 | .main:global(.ant-collapse) { 2 | :global { 3 | .ant-collapse-item { 4 | .ant-collapse-header { 5 | padding: 0px; 6 | padding-top: 8px; 7 | } 8 | .ant-collapse-content-box { 9 | padding: 12px 0; 10 | .ant-tabs-nav { 11 | margin-bottom: 4px; 12 | } 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/NewDatasourceDrawer/Form/InitScriptItem/index.less: -------------------------------------------------------------------------------- 1 | .sqlContent { 2 | :global { 3 | .ant-form-item-row, 4 | .ant-form-item-control-input, 5 | .ant-form-item-control-input-content { 6 | height: 100%; 7 | } 8 | .ant-form-item-control-input-content { 9 | border: 1px solid var(--odc-border-color); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/NewDatasourceDrawer/Form/JDBCParamsItem/index.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/src/page/Datasource/Datasource/NewDatasourceDrawer/Form/JDBCParamsItem/index.less -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/NewDatasourceDrawer/Form/components/ErrorTip/index.tsx: -------------------------------------------------------------------------------- 1 | import { Typography } from 'antd'; 2 | import type { BaseType } from 'antd/lib/typography/Base'; 3 | 4 | const ErrorTip: React.FC<{ 5 | errorMessage: string; 6 | }> = ({ errorMessage }) => { 7 | return ( 8 | !!errorMessage && ( 9 |
10 | {errorMessage} 11 |
12 | ) 13 | ); 14 | }; 15 | 16 | export default ErrorTip; 17 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/NewDatasourceDrawer/Form/helper.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /src/page/Datasource/Datasource/NewDatasourceDrawer/index.less: -------------------------------------------------------------------------------- 1 | .pre-item { 2 | display: flex; 3 | align-items: center; 4 | line-height: 22px; 5 | } 6 | 7 | .new-datasource-dropdown { 8 | background: #fff; 9 | padding: 4px; 10 | box-shadow: 0 3px 6px -4px rgb(0 0 0 / 12%), 0 6px 16px 0 rgb(0 0 0 / 8%), 11 | 0 9px 28px 8px rgb(0 0 0 / 5%); 12 | 13 | :global { 14 | .ant-dropdown-menu { 15 | color: red; 16 | box-shadow: none; 17 | display: flex; 18 | > li { 19 | min-width: 200px; 20 | } 21 | .ant-dropdown-menu-item-group-list { 22 | margin: 0; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/page/Datasource/Info/Header/index.less: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-between; 5 | height: 50px; 6 | border-bottom: 1px solid var(--odc-border-color); 7 | } 8 | .right { 9 | padding-right: 16px; 10 | } 11 | -------------------------------------------------------------------------------- /src/page/Datasource/Info/Header/index.tsx: -------------------------------------------------------------------------------- 1 | import { ReloadOutlined } from '@ant-design/icons'; 2 | import { Space } from 'antd'; 3 | import React, { useContext } from 'react'; 4 | import ParamContext from '../ParamContext'; 5 | import Filter from './Filter'; 6 | import FilterIcon from '@/page/Datasource/Datasource/Header/FIlterIcon'; 7 | 8 | import styles from './index.less'; 9 | import Search from './Search'; 10 | 11 | interface IProps {} 12 | 13 | const Header: React.FC = function () { 14 | const context = useContext(ParamContext); 15 | 16 | return ( 17 | 18 | 19 | 20 | { 22 | context.reload?.(); 23 | }} 24 | > 25 | 26 | 27 | 28 | ); 29 | }; 30 | 31 | export default Header; 32 | -------------------------------------------------------------------------------- /src/page/Datasource/Info/NewDataBaseButton/index.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/src/page/Datasource/Info/NewDataBaseButton/index.less -------------------------------------------------------------------------------- /src/page/Datasource/Info/ParamContext.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export interface IFilterParams { 4 | existed: boolean; 5 | belongsToProject: boolean; 6 | } 7 | 8 | interface IParamContext { 9 | searchValue: string; 10 | setSearchValue?: (v: string) => void; 11 | filterParams?: IFilterParams; 12 | setFilterParams?: (params: IFilterParams) => void; 13 | reload?: () => void; 14 | } 15 | 16 | const ParamContext: React.Context = React.createContext({ 17 | searchValue: null, 18 | }); 19 | 20 | export default ParamContext; 21 | -------------------------------------------------------------------------------- /src/page/Datasource/Session/SessionManagementPage/index.less: -------------------------------------------------------------------------------- 1 | .header { 2 | padding: 9px 8px; 3 | border-bottom: 1px solid #e9e9e9; 4 | } 5 | 6 | .search { 7 | width: 160px; 8 | margin-left: 18px; 9 | font-size: 12px; 10 | 11 | :global { 12 | .ant-input { 13 | font-size: 12px; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/page/ExternalIntegration/SSO/NewSSODrawerButton/SSOForm/partForm.less: -------------------------------------------------------------------------------- 1 | .SAMLCheckBoxConfigDiv { 2 | height: 100px; 3 | width: 100%; 4 | background: #0000000a; 5 | position: relative; 6 | .SAMLCopyButton { 7 | position: absolute; 8 | top: 6px; 9 | right: 16px; 10 | padding: 0px 3px; 11 | border: 1px solid transparent; 12 | border-radius: 6px; 13 | } 14 | .SAMLCopyButton:hover { 15 | background-color: rgba(0, 0, 0, 0.06); 16 | } 17 | .SAMLConfigContent { 18 | height: 100%; 19 | width: 100%; 20 | overflow: auto; 21 | word-wrap: break-word; 22 | white-space: pre-wrap; 23 | padding: 10px; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/page/ExternalIntegration/SqlInterceptor/component/FormModal/index.less: -------------------------------------------------------------------------------- 1 | .interceptor { 2 | .editor { 3 | :global { 4 | .ant-form-item-control-input { 5 | padding-top: 12px; 6 | border: 1px solid var(--odc-border-color); 7 | } 8 | .ant-form-item-control-input-content { 9 | position: relative; 10 | height: 280px; 11 | } 12 | } 13 | } 14 | .block { 15 | width: 100%; 16 | margin-bottom: 12px; 17 | padding: 8px 16px 16px; 18 | background: var(--background-tertraiy-color); 19 | border-radius: 2px; 20 | :global { 21 | .ant-btn-link { 22 | padding: 0; 23 | } 24 | .ant-form-item { 25 | margin-bottom: 0; 26 | } 27 | } 28 | } 29 | :global { 30 | .ant-drawer-footer { 31 | display: flex; 32 | justify-content: flex-end; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/page/ExternalIntegration/SqlInterceptor/index.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@/func.less'; 2 | .name { 3 | color: @odc-text-color-dark; 4 | } 5 | .ellipsis { 6 | .odc-text-ellipsis(); 7 | } 8 | .actions { 9 | min-width: 100px; 10 | } 11 | 12 | .title { 13 | white-space: pre; 14 | } 15 | 16 | .editor { 17 | position: relative; 18 | width: 100%; 19 | height: 280px; 20 | } 21 | 22 | .block-wrapper { 23 | width: 100%; 24 | .block { 25 | width: 100%; 26 | padding: 8px; 27 | background: var(--background-tertraiy-color); 28 | border-radius: 2px; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/page/Gateway/index.less: -------------------------------------------------------------------------------- 1 | .logo { 2 | position: absolute; 3 | top: 40%; 4 | left: 50%; 5 | display: flex; 6 | flex-direction: column; 7 | align-items: center; 8 | transform: translateX(-50%); 9 | } 10 | -------------------------------------------------------------------------------- /src/page/Lock/index.less: -------------------------------------------------------------------------------- 1 | .lockpage { 2 | position: fixed; 3 | top: 0; 4 | right: 0; 5 | bottom: 0; 6 | left: 0; 7 | display: flex; 8 | flex-direction: column; 9 | align-items: center; 10 | justify-content: center; 11 | background: linear-gradient(90deg, rgba(8, 111, 255, 0.3), rgba(255, 255, 255, 0.3)); 12 | } 13 | .bg { 14 | position: absolute; 15 | top: 0; 16 | left: 0; 17 | z-index: -1; 18 | display: flex; 19 | align-items: center; 20 | justify-content: center; 21 | width: 100%; 22 | height: 100%; 23 | opacity: 0.2; 24 | filter: blur(6px); 25 | } 26 | -------------------------------------------------------------------------------- /src/page/Project/Database/Header/index.less: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-between; 5 | height: 50px; 6 | border-bottom: 1px solid var(--odc-border-color); 7 | } 8 | .right { 9 | padding-right: 16px; 10 | } 11 | -------------------------------------------------------------------------------- /src/page/Project/Database/Header/index.tsx: -------------------------------------------------------------------------------- 1 | import { ReloadOutlined } from '@ant-design/icons'; 2 | import { Space } from 'antd'; 3 | import React, { useContext } from 'react'; 4 | import ParamContext from '../ParamContext'; 5 | import Filter from './Filter'; 6 | import FilterIcon from '@/page/Datasource/Datasource/Header/FIlterIcon'; 7 | 8 | import styles from './index.less'; 9 | import Search from './Search'; 10 | 11 | interface IProps {} 12 | 13 | const Header: React.FC = function () { 14 | const context = useContext(ParamContext); 15 | 16 | return ( 17 | 18 | 19 | 20 | { 22 | context.reload?.(); 23 | }} 24 | > 25 | 26 | 27 | 28 | ); 29 | }; 30 | 31 | export default Header; 32 | -------------------------------------------------------------------------------- /src/page/Project/Database/ParamContext.tsx: -------------------------------------------------------------------------------- 1 | import { ConnectType } from '@/d.ts'; 2 | import { DBType } from '@/d.ts/database'; 3 | import React from 'react'; 4 | import { IEnvironment } from '@/d.ts/environment'; 5 | 6 | export interface IFilterParams { 7 | environmentId: number[]; 8 | connectType: ConnectType[]; 9 | type: DBType[]; 10 | } 11 | 12 | interface IParamContext { 13 | searchValue: string; 14 | setSearchValue?: (v: string) => void; 15 | filterParams?: IFilterParams; 16 | setFilterParams?: (params: IFilterParams) => void; 17 | reload?: () => void; 18 | envList?: IEnvironment[]; 19 | } 20 | 21 | const ParamContext: React.Context = React.createContext({ 22 | searchValue: null, 23 | sortType: null, 24 | connectType: [], 25 | }); 26 | 27 | export default ParamContext; 28 | -------------------------------------------------------------------------------- /src/page/Project/Database/components/ChangeOwnerModal/index.less: -------------------------------------------------------------------------------- 1 | .roleForm { 2 | :global { 3 | .ant-form-item-label { 4 | .ant-form-item-optional { 5 | display: none; 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/page/Project/Database/components/LogicDatabase/index.less: -------------------------------------------------------------------------------- 1 | .exportCard { 2 | .doubleExportCardContainer { 3 | display: flex; 4 | width: 100%; 5 | } 6 | .content { 7 | flex: 1 1 50%; 8 | width: 50%; 9 | height: 480px; 10 | overflow-y: auto; 11 | border: 1px solid var(--odc-border-color); 12 | border-right-width: 0; 13 | .centerContainer { 14 | display: flex; 15 | align-items: center; 16 | justify-content: center; 17 | height: 100%; 18 | } 19 | } 20 | .content + .content { 21 | border-right-width: 1px; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/page/Project/Database/components/LogicDatabase/index.tsx: -------------------------------------------------------------------------------- 1 | export { default as CreateLogicialDatabase } from './CreateLogicialDatabase'; 2 | export { default as ManageLogicDatabase } from './ManageLogicDatabase'; 3 | -------------------------------------------------------------------------------- /src/page/Project/Database/const.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据库管理员的最大个数 3 | */ 4 | export const DB_OWNER_MAX_COUNT = 3; 5 | -------------------------------------------------------------------------------- /src/page/Project/Database/index.less: -------------------------------------------------------------------------------- 1 | .disable { 2 | cursor: not-allowed; 3 | color: var(--mask-color); 4 | &:hover { 5 | cursor: not-allowed; 6 | color: var(--mask-color); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/page/Project/Project/CreateProject/index.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/src/page/Project/Project/CreateProject/index.less -------------------------------------------------------------------------------- /src/page/Project/Project/MoreBtn/index.less: -------------------------------------------------------------------------------- 1 | .content { 2 | padding: 4px 0px 4px 0px; 3 | background-color: white; 4 | box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 5 | 0 9px 28px 8px rgba(0, 0, 0, 0.05); 6 | } 7 | -------------------------------------------------------------------------------- /src/page/Project/Sensitive/components/SensitiveColumn/index.less: -------------------------------------------------------------------------------- 1 | .hover { 2 | &:hover { 3 | cursor: pointer; 4 | } 5 | } 6 | 7 | .selectPopover { 8 | :global { 9 | .ant-popover-title { 10 | min-height: max-content; 11 | padding: 12px 12px 0px; 12 | border-bottom: none; 13 | } 14 | .ant-popover-inner-content { 15 | padding: 8px 12px 12px; 16 | } 17 | .ant-popover-inner > .ant-popover-inner-content > div > div > table > tbody { 18 | display: flex; 19 | flex-direction: column; 20 | gap: 8px; 21 | } 22 | .ant-descriptions-row > th, 23 | .ant-descriptions-row > td { 24 | padding: 0px; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/page/Project/Sensitive/components/SensitiveRule/index.less: -------------------------------------------------------------------------------- 1 | .hover { 2 | &:hover { 3 | cursor: pointer; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/page/Project/Sensitive/index.less: -------------------------------------------------------------------------------- 1 | .sensitive { 2 | height: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /src/page/Project/Setting/Info/index.less: -------------------------------------------------------------------------------- 1 | .TaskList { 2 | border: 1px solid var(--odc-border-color); 3 | width: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /src/page/Project/Setting/Notifacation/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export default function Notifacation() { 18 | return
Notifacation
; 19 | } 20 | -------------------------------------------------------------------------------- /src/page/Project/Setting/index.less: -------------------------------------------------------------------------------- 1 | .setting { 2 | display: flex; 3 | flex-direction: row; 4 | height: 100%; 5 | .menu { 6 | height: 100%; 7 | padding-right: 12px; 8 | border-right: 1px solid var(--divider-color); 9 | > :global(.ant-menu.ant-menu-vertical) { 10 | border-right: none; 11 | :global { 12 | .ant-menu-item { 13 | width: 120px; 14 | height: 28px; 15 | line-height: 28px; 16 | } 17 | } 18 | } 19 | } 20 | .content { 21 | height: 100%; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/page/Project/User/AddUserModal/index.less: -------------------------------------------------------------------------------- 1 | .transfer { 2 | :global { 3 | .ant-transfer-list { 4 | width: 325px; 5 | height: 360px; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/page/Project/User/ManageModal/Database/CreateAuth/index.less: -------------------------------------------------------------------------------- 1 | .createModal { 2 | :global { 3 | .ant-drawer-footer { 4 | display: flex; 5 | justify-content: flex-end; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/page/Project/User/ManageModal/Database/index.less: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | justify-content: space-between; 4 | margin-bottom: 12px; 5 | } 6 | .content { 7 | flex: 1; 8 | padding-top: 4px; 9 | } 10 | -------------------------------------------------------------------------------- /src/page/Project/User/ManageModal/Table/CreateAuth/index.less: -------------------------------------------------------------------------------- 1 | .createModal { 2 | :global { 3 | .ant-drawer-footer { 4 | display: flex; 5 | justify-content: flex-end; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/page/Project/User/ManageModal/Table/index.less: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | justify-content: space-between; 4 | margin-bottom: 12px; 5 | } 6 | .content { 7 | flex: 1; 8 | padding-top: 4px; 9 | } 10 | -------------------------------------------------------------------------------- /src/page/Project/User/ManageModal/index.less: -------------------------------------------------------------------------------- 1 | .detailDrawer { 2 | :global { 3 | .ant-drawer-header { 4 | padding: 12px 16px; 5 | } 6 | .ant-drawer-body { 7 | display: flex; 8 | flex-direction: column; 9 | padding: 16px; 10 | .ant-divider-horizontal { 11 | margin: 12px 0; 12 | } 13 | .ant-btn-link { 14 | height: unset; 15 | padding: 0; 16 | } 17 | > div { 18 | height: 100%; 19 | } 20 | } 21 | .ant-drawer-footer { 22 | display: flex; 23 | justify-content: flex-end; 24 | } 25 | .ant-descriptions-view { 26 | .ant-descriptions-row:last-child { 27 | .ant-descriptions-item { 28 | padding-bottom: 0; 29 | } 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/page/Project/User/UpdateUserModal/index.less: -------------------------------------------------------------------------------- 1 | .modal { 2 | :global { 3 | .ant-modal-header, 4 | .ant-modal-body { 5 | padding: 12px 16px; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/page/Project/helper.ts: -------------------------------------------------------------------------------- 1 | import { IProject } from '@/d.ts/project'; 2 | import { UserStore } from '@/store/login'; 3 | 4 | /** 5 | * 已归档项目 6 | * 数据库页:隐藏顶部按钮、列表checkbox,操作列以及列数据库名称不可点击 7 | * 工单页: 隐藏新建按钮 8 | * 成员页:隐藏新建按钮和操作列 9 | * 敏感表页:隐藏添加、checkbox、操作列 10 | * 消息页: 11 | * 隐藏tab-推送规则下的列表checkbox,启用状态、操作列 12 | * 隐藏tab-推送通道下的新建按钮,操作列 13 | * 设置页:禁用项目名称修改、描述、展示操作按钮删除项目 14 | */ 15 | export const isProjectArchived = (project: IProject) => { 16 | return !!project?.archived; 17 | }; 18 | 19 | export const getSessionStorageKey = (userStore: UserStore) => { 20 | return `projectSearch-${userStore?.organizationId}-${userStore?.user?.id}`; 21 | }; 22 | -------------------------------------------------------------------------------- /src/page/Secure/Approval/component/FormModal/index.less: -------------------------------------------------------------------------------- 1 | .taskModal { 2 | .infoLabel { 3 | padding: 4px 0 4px 0; 4 | font-size: 12px; 5 | line-height: 1.5715; 6 | } 7 | .infoBlock { 8 | width: 100%; 9 | padding: 12px; 10 | background: var(--neutral-grey6-color); 11 | border-radius: 2px; 12 | :global { 13 | .ant-space-item { 14 | .ant-form-item { 15 | margin-bottom: 0; 16 | } 17 | } 18 | } 19 | } 20 | :global { 21 | .ant-drawer-footer { 22 | display: flex; 23 | justify-content: flex-end; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/page/Secure/Approval/index.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@/func.less'; 2 | .ellipsis { 3 | .odc-text-ellipsis(); 4 | } 5 | .actions { 6 | min-width: 100px; 7 | } 8 | 9 | .title { 10 | white-space: pre; 11 | } 12 | -------------------------------------------------------------------------------- /src/page/Secure/Env/index.less: -------------------------------------------------------------------------------- 1 | .extra { 2 | display: flex; 3 | justify-content: space-between; 4 | align-items: center; 5 | height: 28px; 6 | .groupTitle { 7 | font-weight: 500; 8 | font-size: 12px; 9 | padding: 0px 12px; 10 | font-weight: 500; 11 | color: var(--code-normal-color); 12 | line-height: 20px; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/page/Secure/RiskLevel/index.less: -------------------------------------------------------------------------------- 1 | .riskLevel { 2 | height: 100%; 3 | padding-top: 12px; 4 | } 5 | -------------------------------------------------------------------------------- /src/page/Secure/components/FormRecordExportModal/index.less: -------------------------------------------------------------------------------- 1 | .exportModal { 2 | .formLabel { 3 | padding: 4px 0; 4 | } 5 | :global { 6 | .ant-drawer-footer { 7 | display: flex; 8 | justify-content: flex-end; 9 | } 10 | } 11 | } 12 | 13 | .connectionPopover { 14 | padding: 0; 15 | } 16 | 17 | .labelName { 18 | margin-left: -12px; 19 | padding-left: 12px; 20 | } 21 | -------------------------------------------------------------------------------- /src/page/Secure/components/SecureLayout/index.less: -------------------------------------------------------------------------------- 1 | .secureLayout { 2 | display: flex; 3 | height: 100%; 4 | overflow: hidden; 5 | .sider { 6 | flex: 0 0 144px; 7 | height: 100%; 8 | } 9 | .content { 10 | flex-grow: 1; 11 | flex-shrink: 1; 12 | width: calc(100% - 148px); 13 | height: 100%; 14 | padding-bottom: 12px; 15 | padding-left: 16px; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/page/Secure/components/SecureSider/index.less: -------------------------------------------------------------------------------- 1 | .secureSider { 2 | width: 148px; 3 | height: 100%; 4 | padding: 0 12px 12px 0; 5 | overflow: auto; 6 | overflow-x: hidden; 7 | border-right: 1px solid var(--divider-color); 8 | } 9 | 10 | .siderItemList { 11 | margin-top: 12px; 12 | .item { 13 | display: flex; 14 | align-items: center; 15 | justify-content: space-between; 16 | margin: 4px 0px; 17 | padding: 0px 12px; 18 | color: var(--text-color-primary); 19 | line-height: 28px; 20 | cursor: pointer; 21 | &:hover { 22 | background-color: var(--hover-color); 23 | .plus { 24 | display: block; 25 | } 26 | } 27 | &.selected { 28 | color: var(--text-color-link); 29 | background-color: var(--brand-blue1-color); 30 | border-radius: 2px; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/page/Secure/index.less: -------------------------------------------------------------------------------- 1 | .secure { 2 | padding-top: 0px !important; 3 | } 4 | -------------------------------------------------------------------------------- /src/page/Workspace/ActivityBar/ActivityBarButton/index.less: -------------------------------------------------------------------------------- 1 | .icon { 2 | padding: 6px; 3 | color: var(--text-color-inverse); 4 | font-size: 16px; 5 | border-radius: 2px; 6 | cursor: pointer; 7 | &.active { 8 | color: var(--icon-color-focus); 9 | background-color: var(--focus-color); 10 | } 11 | &:not(.active):hover { 12 | color: var(--text-color-primary); 13 | background-color: var(--hover-color); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/page/Workspace/ActivityBar/index.less: -------------------------------------------------------------------------------- 1 | .bar { 2 | display: flex; 3 | flex-direction: column; 4 | align-items: center; 5 | justify-content: space-between; 6 | width: 40px; 7 | height: 100%; 8 | overflow: hidden; 9 | background-color: var(--tab-background-color); 10 | .top { 11 | display: flex; 12 | flex-direction: column; 13 | align-items: center; 14 | } 15 | .bottom { 16 | margin-bottom: 14px; 17 | } 18 | .logo { 19 | padding: 8px 8px 12px 8px; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/Manager/index.less: -------------------------------------------------------------------------------- 1 | .manager { 2 | padding: 8px; 3 | padding-top: 0px; 4 | } 5 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/ResourceTree/DatabaseSearch/index.less: -------------------------------------------------------------------------------- 1 | .closeIcon { 2 | color: var(--icon-color-disable); 3 | cursor: pointer; 4 | &:hover { 5 | color: var(--icon-color-normal); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/ResourceTree/DatabaseTree/index.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/src/page/Workspace/SideBar/ResourceTree/DatabaseTree/index.less -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/ResourceTree/DatasourceFilter/index.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oceanbase/odc-client/0f47b2925546414f8b4bbbc4ec731081ec822284/src/page/Workspace/SideBar/ResourceTree/DatasourceFilter/index.less -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/ResourceTree/SelectPanel/Project/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | align-items: stretch; 5 | height: 100%; 6 | padding-left: 12px; 7 | .search { 8 | flex-grow: 0; 9 | flex-shrink: 0; 10 | width: 100%; 11 | padding: 0px 12px 4px 0px; 12 | } 13 | .list { 14 | flex: 1; 15 | padding-right: 12px; 16 | overflow: auto; 17 | overflow-x: hidden; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/ResourceTree/SelectPanel/index.less: -------------------------------------------------------------------------------- 1 | .closeBtn { 2 | font-size: 14px; 3 | vertical-align: middle; 4 | &:hover { 5 | color: var(--icon-color-focus); 6 | } 7 | &.closeBtnDisable { 8 | color: var(--icon-color-disable); 9 | :hover { 10 | color: var(--icon-color-disable); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/ResourceTree/TreeNodeMenu/IconLoadingWrapper.tsx: -------------------------------------------------------------------------------- 1 | import Icon, { LoadingOutlined } from '@ant-design/icons'; 2 | import { useState } from 'react'; 3 | 4 | const IconLoadingWrapper = ({ icon }) => { 5 | const [loading, setLoading] = useState(false); 6 | 7 | const handleClick = () => { 8 | setLoading(true); 9 | setTimeout(() => { 10 | setLoading(false); 11 | }, 1000); 12 | }; 13 | 14 | return ( 15 |
16 | {loading ? : } 17 |
18 | ); 19 | }; 20 | 21 | export default IconLoadingWrapper; 22 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/ResourceTree/TreeNodeMenu/index.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@/func.less'; 2 | 3 | .ellipsis { 4 | .odc-text-ellipsis(); 5 | } 6 | .actionItem { 7 | padding: 0px 4px; 8 | font-size: 14px; 9 | } 10 | 11 | .fullWidthTitle { 12 | display: block; 13 | min-width: 100%; 14 | height: 100%; 15 | line-height: 24px; 16 | } 17 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/Script/ScriptFile/index.less: -------------------------------------------------------------------------------- 1 | .script { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100%; 5 | padding: 0px 12px; 6 | .search { 7 | flex: 0; 8 | padding-bottom: 4px; 9 | } 10 | .list { 11 | flex: 1; 12 | min-height: 0px; 13 | overflow: auto; 14 | overflow-x: hidden; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/Script/Snippet/index.less: -------------------------------------------------------------------------------- 1 | .script { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100%; 5 | .search { 6 | flex: 0; 7 | padding: 0px 12px; 8 | padding-bottom: 4px; 9 | } 10 | .list { 11 | flex: 1; 12 | min-height: 0px; 13 | padding: 0px 8px; 14 | overflow: auto; 15 | overflow-x: hidden; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/Task/index.less: -------------------------------------------------------------------------------- 1 | .taskSider { 2 | width: 100%; 3 | padding: 0px 12px; 4 | } 5 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/components/MenuList/index.less: -------------------------------------------------------------------------------- 1 | .menuList { 2 | width: 100%; 3 | .menuItem { 4 | display: flex; 5 | align-items: center; 6 | width: 100%; 7 | height: 28px; 8 | padding: 0px 2px 0px 12px; 9 | overflow: hidden; 10 | color: var(--text-color-primary); 11 | font-size: 12px; 12 | white-space: nowrap; 13 | text-overflow: ellipsis; 14 | cursor: pointer; 15 | &:hover { 16 | background-color: var(--hover-color); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/page/Workspace/SideBar/index.less: -------------------------------------------------------------------------------- 1 | .sideBar { 2 | position: relative; 3 | display: flex; 4 | flex-flow: column; 5 | align-items: stretch; 6 | width: 100%; 7 | height: 100%; 8 | background-color: var(--background-tertraiy-color); 9 | 10 | .title { 11 | flex-grow: 0; 12 | flex-shrink: 0; 13 | padding: 12px; 14 | font-weight: bold; 15 | font-size: 14px; 16 | line-height: 22px; 17 | } 18 | .content { 19 | position: absolute; 20 | top: 0px; 21 | right: 0px; 22 | bottom: 4px; 23 | left: 0px; 24 | z-index: -9999; 25 | overflow-x: hidden; 26 | overflow-y: auto; 27 | &.active { 28 | z-index: unset; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/page/Workspace/components/CreateSequenceModal/index.less: -------------------------------------------------------------------------------- 1 | .groupInput { 2 | :global { 3 | .ant-form-item-explain { 4 | position: absolute; 5 | bottom: 0; 6 | max-width: 100%; 7 | transform: translateY(100%); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/page/Workspace/components/CreateTable/BaseInfo/index.less: -------------------------------------------------------------------------------- 1 | .form:global(.ant-form) { 2 | padding: 12px; 3 | :global { 4 | label { 5 | font-size: 12px; 6 | } 7 | } 8 | 9 | .divider { 10 | margin-top: 0; 11 | margin-bottom: 16px; 12 | } 13 | 14 | .submitButton { 15 | font-size: 12px; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/page/Workspace/components/CreateTable/Columns/index.less: -------------------------------------------------------------------------------- 1 | .main { 2 | position: relative; 3 | height: 100%; 4 | overflow: hidden; 5 | .contentWithExtraColumn { 6 | padding-bottom: 200px; 7 | } 8 | .content { 9 | display: flex; 10 | flex-direction: column; 11 | height: 100%; 12 | overflow: hidden; 13 | } 14 | .bottom { 15 | position: absolute; 16 | bottom: 0; 17 | left: 0; 18 | width: 100%; 19 | height: 200px; 20 | padding: 12px; 21 | overflow-y: auto; 22 | background: var(--background-secondry-color); 23 | border-top: 1px solid var(--divider-color); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/page/Workspace/components/CreateTable/Partition/CreateTablePartitionRuleForm/index.less: -------------------------------------------------------------------------------- 1 | .form:global(.ant-form) { 2 | position: relative; 3 | margin-top: 16px; 4 | padding-left: 16px; 5 | 6 | :global { 7 | label { 8 | font-size: 12px; 9 | } 10 | } 11 | 12 | .divider { 13 | margin-top: 0; 14 | margin-bottom: 16px; 15 | } 16 | 17 | .submitButton { 18 | font-size: 12px; 19 | } 20 | 21 | .footer { 22 | position: absolute; 23 | bottom: 0; 24 | display: flex; 25 | align-items: center; 26 | justify-content: flex-end; 27 | width: 100%; 28 | height: 40px; 29 | padding-right: 16px; 30 | box-shadow: rgba(184, 198, 211, 0.4) 0 -2px 8px 0; 31 | 32 | .button { 33 | margin-right: 8px; 34 | font-size: 12px; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/page/Workspace/components/CreateTable/RdgFomatter/ValueFormatter.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export default function WrapValueFormatter(func) { 18 | return ({ row }) => { 19 | return func(row) || ''; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /src/page/Workspace/components/CreateTable/RdgFomatter/index.less: -------------------------------------------------------------------------------- 1 | :global(.rdg-row:not(.rdg-row-selected)) { 2 | :global(.rdg-cell:not(.rdg-cell-selected)) { 3 | .disableCell { 4 | position: absolute; 5 | right: 0; 6 | left: 0; 7 | height: 100%; 8 | background: var(--background-normal-color); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/page/Workspace/components/CreateTableColumnForm/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | border: 1px solid #e9e9e9; 3 | } 4 | 5 | .divider { 6 | margin-top: 24px; 7 | margin-bottom: 16px; 8 | } 9 | 10 | .submitButton { 11 | font-size: 12px; 12 | } 13 | 14 | .footer { 15 | position: absolute; 16 | bottom: 0; 17 | display: flex; 18 | align-items: center; 19 | justify-content: flex-end; 20 | width: 100%; 21 | height: 40px; 22 | padding-right: 16px; 23 | background: var(--background-secondry-color); 24 | box-shadow: var(--mask-color) 0 -2px 8px 0; 25 | 26 | .button { 27 | margin-right: 8px; 28 | font-size: 12px; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/page/Workspace/components/DDLResultSet/hooks/components/HexEditor/index.less: -------------------------------------------------------------------------------- 1 | .cell { 2 | display: inline-block; 3 | text-align: center; 4 | vertical-align: middle; 5 | cursor: default; 6 | // user-select: none; 7 | &:hover { 8 | background-color: var(--hover-color); 9 | } 10 | &.cellSeleced { 11 | background: var(--hover-color); 12 | outline: #1890ff solid 1px; 13 | } 14 | } 15 | .addCell { 16 | display: inline-block; 17 | color: #333; 18 | text-align: center; 19 | background-color: #ededed; 20 | cursor: pointer; 21 | &:hover { 22 | background-color: #e5e5e5; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/page/Workspace/components/DDLResultSet/hooks/index.less: -------------------------------------------------------------------------------- 1 | .textNull { 2 | color: var(--text-color-secondary); 3 | } 4 | -------------------------------------------------------------------------------- /src/page/Workspace/components/EditableTable/components/EllipsisCell/index.less: -------------------------------------------------------------------------------- 1 | .cellEllipsis { 2 | display: block; 3 | overflow: hidden; 4 | white-space: pre; 5 | text-overflow: ellipsis; 6 | } 7 | -------------------------------------------------------------------------------- /src/page/Workspace/components/EditableTable/index.less: -------------------------------------------------------------------------------- 1 | .fillGrid { 2 | height: 100%; 3 | } 4 | .removeBordered { 5 | &:global(.rdg) { 6 | border: none; 7 | outline: none; 8 | } 9 | } 10 | :global { 11 | .rdg-cell.rdg-cell-editing { 12 | overflow: visible; 13 | } 14 | .rdg-antd-editor.ant-popover { 15 | padding: 0; 16 | .ant-popover-content { 17 | .ant-popover-arrow { 18 | display: none; 19 | } 20 | .ant-popover-inner-content { 21 | position: relative; 22 | max-width: unset; 23 | padding: 0; 24 | } 25 | } 26 | } 27 | .rdg-antd-anchor { 28 | width: 100%; 29 | margin-top: -3px; 30 | } 31 | .rdg-cell .Select { 32 | max-height: 30px; 33 | font-weight: normal; 34 | font-size: 12px; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/page/Workspace/components/OBClientPage/index.less: -------------------------------------------------------------------------------- 1 | .main { 2 | &.simpleHeader { 3 | :global { 4 | .ant-card-head { 5 | padding-left: 0px; 6 | } 7 | .ant-card-head > .ant-card-head-wrapper > .ant-card-head-title { 8 | padding-top: 0px; 9 | } 10 | } 11 | } 12 | &:global(.ant-card) { 13 | display: flex; 14 | flex-direction: column; 15 | height: 100%; 16 | :global { 17 | .ant-card-body { 18 | flex-grow: 1; 19 | padding: 10px 8px; 20 | } 21 | } 22 | } 23 | } 24 | 25 | .upload { 26 | &:global(.ant-upload.ant-upload-drag) { 27 | width: 100%; 28 | height: 90px; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/page/Workspace/components/PLBatchCompilePage/index.less: -------------------------------------------------------------------------------- 1 | .plWrapper { 2 | width: 100%; 3 | } 4 | .resultWrapper { 5 | width: 100%; 6 | } 7 | 8 | .pageWrapper { 9 | position: absolute; 10 | top: 0; 11 | right: 0; 12 | bottom: 0; 13 | left: 0; 14 | } 15 | -------------------------------------------------------------------------------- /src/page/Workspace/components/PLDebugResultSet/CursorCell/index.less: -------------------------------------------------------------------------------- 1 | .viewBtn { 2 | width: 24px; 3 | color: var(--text-color-hint); 4 | font-size: 14px; 5 | background: var(--background-secondry-color); 6 | border-left: 1px solid var(--odc-border-color); 7 | cursor: pointer; 8 | 9 | &:hover { 10 | color: var(--text-color-secondary); 11 | } 12 | } 13 | 14 | .cursor-modal { 15 | :global { 16 | .ant-modal-body { 17 | padding-top: 0; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/page/Workspace/components/SQLConfirmPage/index.less: -------------------------------------------------------------------------------- 1 | .errorLog { 2 | .log { 3 | margin-top: 6px; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/page/Workspace/components/SQLPage/ExecPlan/index.less: -------------------------------------------------------------------------------- 1 | .explainDrawer { 2 | :global { 3 | .ant-drawer-body { 4 | padding-top: 16px; 5 | } 6 | .ant-spin-nested-loading + div { 7 | z-index: 9 !important; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/page/Workspace/components/SQLPage/index.less: -------------------------------------------------------------------------------- 1 | .spinWidth100 { 2 | width: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /src/page/Workspace/components/ScriptManageModal/ScriptEditorModal/index.less: -------------------------------------------------------------------------------- 1 | .sqlContent { 2 | :global { 3 | .ant-form-item-control-input, 4 | .ant-form-item-control-input-content { 5 | height: 100%; 6 | } 7 | .ant-form-item-control-input-content { 8 | border: 1px solid var(--odc-border-color); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/page/Workspace/components/SessionContextWrap/SessionPageWrap/index.less: -------------------------------------------------------------------------------- 1 | .sessionWrap { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | height: 100%; 6 | .content { 7 | position: relative; 8 | flex: 1; 9 | min-height: 0px; 10 | overflow: hidden; 11 | border-top: 1px solid var(--divider-color); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/page/Workspace/components/SessionContextWrap/SessionSelect/const.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export const DEFALT_WIDTH = 320; 18 | export const DEFALT_HEIGHT = 215; 19 | -------------------------------------------------------------------------------- /src/page/Workspace/components/SessionManagementPage/index.less: -------------------------------------------------------------------------------- 1 | .header { 2 | padding: 9px 8px; 3 | border-bottom: 1px solid #e9e9e9; 4 | } 5 | 6 | .search { 7 | width: 160px; 8 | margin-left: 18px; 9 | font-size: 12px; 10 | 11 | :global { 12 | .ant-input { 13 | font-size: 12px; 14 | } 15 | } 16 | } 17 | .wrap { 18 | height: 100%; 19 | :global { 20 | .ant-spin-container { 21 | display: flex; 22 | flex-direction: column; 23 | height: 100%; 24 | } 25 | } 26 | .table { 27 | flex: 1; 28 | } 29 | .toolbar { 30 | &.simpleHeader { 31 | padding-bottom: 5px; 32 | } 33 | flex: 0; 34 | } 35 | .datasourceSelect { 36 | flex: 0; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/page/Workspace/components/ShowFunctionBaseInfoForm/index.less: -------------------------------------------------------------------------------- 1 | .form { 2 | &:global(.ant-form) { 3 | width: 600px; 4 | margin-top: 24px; 5 | 6 | :global { 7 | label { 8 | font-size: 12px; 9 | } 10 | } 11 | 12 | .divider { 13 | margin-top: 0; 14 | margin-bottom: 16px; 15 | } 16 | 17 | .submitButton { 18 | font-size: 12px; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/page/Workspace/components/ShowProcedureBaseInfoForm/index.less: -------------------------------------------------------------------------------- 1 | .form { 2 | width: 600px; 3 | margin-top: 24px; 4 | 5 | :global { 6 | label { 7 | font-size: 12px; 8 | } 9 | } 10 | 11 | .divider { 12 | margin-top: 0; 13 | margin-bottom: 16px; 14 | } 15 | 16 | .submitButton { 17 | font-size: 12px; 18 | } 19 | } 20 | .box { 21 | margin-top: 25px; 22 | margin-left: 25px; 23 | } 24 | .line { 25 | margin-bottom: 16px; 26 | font-size: 12px; 27 | line-height: 20px; 28 | .title { 29 | margin-right: 5px; 30 | color: #000 85%; 31 | font-family: PingFangSC-Regular; 32 | } 33 | .content { 34 | color: #000 65%; 35 | font-family: PingFangSC-Regular; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/page/Workspace/components/ShowViewBaseInfoForm/index.less: -------------------------------------------------------------------------------- 1 | .form { 2 | &:global(.ant-form) { 3 | width: 600px; 4 | margin-top: 24px; 5 | 6 | :global { 7 | label { 8 | font-size: 12px; 9 | } 10 | } 11 | 12 | .divider { 13 | margin-top: 0; 14 | margin-bottom: 16px; 15 | } 16 | 17 | .submitButton { 18 | font-size: 12px; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/page/Workspace/components/SynonymPage/index.less: -------------------------------------------------------------------------------- 1 | .synonymPage { 2 | height: 100%; 3 | :global { 4 | .ant-tabs-content-left { 5 | &.ant-tabs-content { 6 | height: 100%; 7 | .ant-tabs-tabpane { 8 | height: 100%; 9 | display: none !important; 10 | &.ant-tabs-tabpane-active { 11 | display: block !important; 12 | padding-left: 0 !important; 13 | } 14 | } 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/page/Workspace/components/TablePage/Constraints/index.less: -------------------------------------------------------------------------------- 1 | .itembox { 2 | border: 1px solid var(--odc-border-color); 3 | } 4 | .title { 5 | height: 30px; 6 | padding: 5px 0; 7 | line-height: 20px; 8 | } 9 | -------------------------------------------------------------------------------- /src/page/Workspace/components/TablePage/ShowTableBaseInfoForm/index.less: -------------------------------------------------------------------------------- 1 | .form { 2 | &:global(.ant-form) { 3 | width: 600px; 4 | margin-top: 24px; 5 | 6 | :global { 7 | label { 8 | font-size: 12px; 9 | } 10 | } 11 | 12 | .divider { 13 | margin-top: 0; 14 | margin-bottom: 16px; 15 | } 16 | 17 | .submitButton { 18 | font-size: 12px; 19 | } 20 | 21 | .footer { 22 | position: absolute; 23 | bottom: 0; 24 | display: flex; 25 | flex-direction: row-reverse; 26 | align-items: center; 27 | width: 100%; 28 | height: 40px; 29 | padding-right: 8px; 30 | box-shadow: rgba(184, 198, 211, 0.4) 0 -2px 8px 0; 31 | 32 | .button { 33 | margin-right: 8px; 34 | font-size: 12px; 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/page/Workspace/components/TablePage/TableData/index.less: -------------------------------------------------------------------------------- 1 | .spin { 2 | height: 100%; 3 | :global { 4 | .ant-spin-container { 5 | height: 100%; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/page/Workspace/components/TaskPage/index.less: -------------------------------------------------------------------------------- 1 | .task { 2 | height: 100%; 3 | padding: 4px 12px 12px; 4 | } 5 | -------------------------------------------------------------------------------- /src/page/Workspace/components/ToolPageTabs/index.less: -------------------------------------------------------------------------------- 1 | .propsTab { 2 | height: 100%; 3 | :global { 4 | .ant-tabs-nav-wrap { 5 | display: block; 6 | } 7 | .ant-tabs-content-holder { 8 | background-color: var(--background-primary-color); 9 | } 10 | .ant-tabs-content { 11 | padding-left: 0; 12 | border-left: none; 13 | } 14 | 15 | .ant-tabs-ink-bar.ant-tabs-ink-bar-animated { 16 | left: 0; 17 | } 18 | 19 | .ant-tabs-tab { 20 | margin: 0 !important; 21 | padding: 8px 16px !important; 22 | font-size: 12px !important; 23 | text-align: left !important; 24 | 25 | &.ant-tabs-tab-active { 26 | background: var(--hover-color); 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/page/Workspace/components/ToolPageTextFormWrapper/index.less: -------------------------------------------------------------------------------- 1 | .odc-toolPage-textFrom { 2 | padding: 25px 0 0 25px; 3 | .odc-toolPage-textFrom-line { 4 | margin-bottom: 16px; 5 | font-size: 12px; 6 | line-height: 20px; 7 | .odc-toolPage-textFrom-label { 8 | margin-right: 5px; 9 | color: #000 85%; 10 | font-family: PingFangSC-Regular; 11 | } 12 | .odc-toolPage-textFrom-content { 13 | color: #000 65%; 14 | font-family: PingFangSC-Regular; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/page/Workspace/components/TypePage/index.less: -------------------------------------------------------------------------------- 1 | .typePage { 2 | height: 100%; 3 | :global { 4 | .ant-tabs-content-left { 5 | &.ant-tabs-content { 6 | height: 100%; 7 | .ant-tabs-tabpane { 8 | display: none !important; 9 | height: 100%; 10 | &.ant-tabs-tabpane-active { 11 | display: block !important; 12 | padding-left: 0 !important; 13 | } 14 | } 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/page/Workspace/index.less: -------------------------------------------------------------------------------- 1 | .content { 2 | position: relative; 3 | min-height: 100%; 4 | } 5 | 6 | .splitContainer { 7 | position: absolute; 8 | top: 0; 9 | right: 0; 10 | bottom: 0; 11 | // box-shadow: -1px 0 4px 0 rgba(184, 198, 211, 0.4); 12 | 13 | .sider { 14 | z-index: 10; 15 | // box-shadow: 1px 0 4px 0 rgba(184, 198, 211, 0.4); 16 | height: 100%; 17 | background: #f7f9fb; 18 | border-right: 1px solid var(--divider-color); 19 | &:global(.ant-layout-sider) { 20 | background: var(--background-tertraiy-color); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/store/helper/page/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export * from './openPage'; 18 | export * from './pageParams'; 19 | export * from './util'; 20 | -------------------------------------------------------------------------------- /src/svgr/Add_notes.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/AutomaticRun.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Automaticoperation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/COS.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Console-PL.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Debug_to_breakpoint.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Delete_notes.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Enum.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Expain.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Format.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/List.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Menu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Package.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Redo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Step_in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Step_next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Step_out.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Step_over.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Stepover.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Termination.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Trace.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Undo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Waiting.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/Working.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/command.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/cycle_task.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/defaultRiskLevel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/execute.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/highRiskLevel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/homeMenu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/icon_pin_filled.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/icon_sort.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/icon_tag_filled.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/lintIcon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/lowRiskLevel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/manager.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/menuPkg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/menuSynonym.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/menuTable.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/menuTrigger.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/menuType.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/menuView.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/middleRiskLevel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/newopen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/odc_black.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/svgr/odc_logo_color.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/oracle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/oss.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/top.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/toped.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/svgr/trigger.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/util/client/service.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export default async function ipcInvoke(method, ...args) { 18 | return window.ODCClient.ipcInvoke?.(method, ...args); 19 | } 20 | -------------------------------------------------------------------------------- /src/util/database.ts: -------------------------------------------------------------------------------- 1 | import { IDatabase, DBType } from '@/d.ts/database'; 2 | 3 | export const isLogicalDatabase = (db: IDatabase) => { 4 | return db?.type === DBType.LOGICAL; 5 | }; 6 | 7 | export const isPhysicalDatabase = (db: IDatabase) => { 8 | return db?.type === DBType.PHYSICAL; 9 | }; 10 | -------------------------------------------------------------------------------- /src/util/parser/common/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export { default as CaseInsensitiveStream } from './caseInsensitiveStream'; 18 | -------------------------------------------------------------------------------- /src/util/parser/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 OceanBase 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | export * from './pl'; 18 | -------------------------------------------------------------------------------- /tsconfig.jest.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json" 3 | // "compilerOptions": { 4 | // "esModuleInterop": true 5 | // },s 6 | } 7 | --------------------------------------------------------------------------------