refactor: 💡 update console-ui theme (#8951)

 Closes: https://github.com/alibaba/nacos/issues/8950
This commit is contained in:
heimanba 2022-08-11 21:40:54 +08:00 committed by GitHub
parent 0c61c5d5eb
commit 8cede1cf84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 28869 additions and 585 deletions

28116
console-ui/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -53,9 +53,9 @@
"husky": "^3.1.0", "husky": "^3.1.0",
"lint-staged": "^9.5.0", "lint-staged": "^9.5.0",
"mini-css-extract-plugin": "^0.9.0", "mini-css-extract-plugin": "^0.9.0",
"node-sass": "^4.13.0",
"optimize-css-assets-webpack-plugin": "^5.0.3", "optimize-css-assets-webpack-plugin": "^5.0.3",
"prettier": "1.19.1", "prettier": "1.19.1",
"sass": "^1.54.0",
"sass-loader": "^8.0.0", "sass-loader": "^8.0.0",
"style-loader": "^1.1.2", "style-loader": "^1.1.2",
"uglifyjs-webpack-plugin": "^2.2.0", "uglifyjs-webpack-plugin": "^2.2.0",
@ -65,11 +65,12 @@
"webpack-dev-server": "^3.11.0" "webpack-dev-server": "^3.11.0"
}, },
"dependencies": { "dependencies": {
"@alifd/next": "^1.17.4", "@alifd/next": "^1.19.4",
"@alifd/theme-design-pro": "0.x",
"axios": "^0.21.1", "axios": "^0.21.1",
"moment": "^2.23.0", "moment": "^2.23.0",
"qs": "^6.8.2",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"qs": "^6.8.2",
"react": "^16.12.0", "react": "^16.12.0",
"react-dom": "^16.12.0", "react-dom": "^16.12.0",
"react-redux": "^7.1.3", "react-redux": "^7.1.3",

View File

@ -0,0 +1,83 @@
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { withRouter } from 'react-router-dom';
import { Icon, Message } from '@alifd/next';
import PropTypes from 'prop-types';
//
function createFakeElement(value) {
const fakeElement = document.createElement('textarea');
fakeElement.style.border = '0';
fakeElement.style.padding = '0';
fakeElement.style.margin = '0';
fakeElement.style.position = 'absolute';
fakeElement.style.left = '-999px';
fakeElement.style.top = `${window.pageYOffset || document.documentElement.scrollTop}px`;
fakeElement.setAttribute('readonly', '');
fakeElement.value = value;
return fakeElement;
}
function copyText(value) {
const element = createFakeElement(value);
document.body.appendChild(element);
//
element.focus();
element.select();
element.setSelectionRange(0, element.value.length);
document.execCommand('copy');
document.body.removeChild(element);
Message.success('Success copied!');
}
@withRouter
class Copy extends React.Component {
static displayName = 'Copy';
static propTypes = {
style: PropTypes.object,
value: PropTypes.string,
textNode: PropTypes.string,
className: PropTypes.string,
showIcon: PropTypes.bool,
};
render() {
const { style = {}, value, textNode, className, showIcon = true } = this.props;
return (
<div className={className} onClick={() => (showIcon ? '' : copyText(value))} style={style}>
{textNode || value}
{showIcon && (
<Icon
title="复制"
className="copy-icon"
size="small"
type="copy"
onClick={() => copyText(value)}
/>
)}
</div>
);
}
}
export default Copy;

View File

@ -101,11 +101,11 @@ class DeleteDialog extends React.Component {
<div> <div>
<h3>{this.state.isok ? locale.deletedSuccessfully : locale.deleteFailed}</h3> <h3>{this.state.isok ? locale.deletedSuccessfully : locale.deleteFailed}</h3>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>Data ID:</span> <span style={{ color: '#999', marginRight: 5 }}>Data ID</span>
<span style={{ color: '#c7254e' }}>{this.state.dataId}</span> <span style={{ color: '#c7254e' }}>{this.state.dataId}</span>
</p> </p>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>Group:</span> <span style={{ color: '#999', marginRight: 5 }}>Group</span>
<span style={{ color: '#c7254e' }}>{this.state.group}</span> <span style={{ color: '#c7254e' }}>{this.state.group}</span>
</p> </p>
{this.state.isok ? '' : <p style={{ color: 'red' }}>{this.state.message}</p>} {this.state.isok ? '' : <p style={{ color: 'red' }}>{this.state.message}</p>}

View File

@ -165,13 +165,12 @@ class NameSpaceList extends React.Component {
const namespacesBtn = namespaceList.map((obj, index) => { const namespacesBtn = namespaceList.map((obj, index) => {
const style = const style =
obj.namespace === nownamespace obj.namespace === nownamespace
? { color: '#00C1DE', paddingRight: 10, border: 'none', fontSize: 12 } ? { color: '#209BFA', paddingRight: 10, border: 'none', fontSize: 14 }
: { color: '#666', paddingRight: 10, border: 'none', fontSize: 12 }; : { color: '#666', paddingRight: 10, border: 'none', fontSize: 14 };
return ( return (
<div key={index} style={{ float: 'left', cursor: 'pointer' }}> <div key={index} style={{ cursor: 'pointer' }}>
{index === 0 ? '' : <span style={{ marginRight: 5, marginLeft: 5 }}>|</span>} {index === 0 ? '' : <span style={{ marginRight: 8, color: '#999' }}>|</span>}
<span <span
type={'light'}
style={style} style={style}
onClick={this.changeNameSpace.bind(this, obj.namespace, obj.namespaceShowName)} onClick={this.changeNameSpace.bind(this, obj.namespace, obj.namespaceShowName)}
key={index} key={index}
@ -181,23 +180,23 @@ class NameSpaceList extends React.Component {
</div> </div>
); );
}); });
return <div style={{ paddingTop: 9 }}>{namespacesBtn}</div>; return namespacesBtn;
} }
render() { render() {
const namespaceList = this.state.namespaceList || []; const namespaceList = this.state.namespaceList || [];
const title = this.props.title || ''; const title = this.props.title || '';
const namespacestyle = {
marginTop: 5,
marginBottom: '10px',
paddingBottom: '10px',
borderBottom: '1px solid #ccc',
};
return ( return (
<div <div
className={namespaceList.length ? 'namespacewrapper' : ''} className={namespaceList.length ? 'namespacewrapper' : ''}
style={namespaceList.length ? namespacestyle : {}} style={{
display: 'flex',
height: 40,
alignItems: 'center',
marginTop: 8,
marginBottom: 16,
}}
> >
{} {}
{title ? ( {title ? (
@ -218,7 +217,7 @@ class NameSpaceList extends React.Component {
) : ( ) : (
'' ''
)} )}
<div style={{ float: 'left' }}>{this.rendernamespace(namespaceList)}</div> {this.rendernamespace(namespaceList)}
</div> </div>
); );
} }

View File

@ -0,0 +1,69 @@
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { Provider, connect } from 'react-redux';
import { withRouter } from 'react-router-dom';
import PropTypes from 'prop-types';
import Copy from '../Copy';
@withRouter
@connect(state => ({ ...state.locale }))
class PageTitle extends React.Component {
static propTypes = {
title: PropTypes.string,
desc: PropTypes.string,
nameSpace: PropTypes.bool,
locale: PropTypes.object,
};
getNameSpace(locale, desc, nameSpace) {
if (!nameSpace) {
return desc;
}
return (
<span style={{ display: 'flex', alignItems: 'center', marginLeft: 16 }}>
{locale.NameSpace.namespaceID}
<Copy
style={{
marginLeft: 16,
height: 32,
display: 'flex',
alignItems: 'center',
background: 'rgb(239, 243, 248)',
padding: '0px 8px',
minWidth: 220,
}}
value={desc}
/>
</span>
);
}
render() {
const { title, desc, nameSpace, locale } = this.props;
return (
<div style={{ display: 'flex', alignItems: 'center', marginTop: 8, marginBottom: 8 }}>
<span style={{ fontSize: 28, height: 40, fontWeight: 500 }}>{title}</span>
<span style={{ marginLeft: 4 }}>
{desc && desc !== 'undefined' ? this.getNameSpace(locale, desc, nameSpace) : ''}
</span>
</div>
);
}
}
export default PageTitle;

View File

@ -0,0 +1,43 @@
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import PropTypes from 'prop-types';
import { Provider, connect } from 'react-redux';
import './index.scss';
@connect(state => ({ ...state.locale }))
class QueryResult extends React.Component {
static displayName = 'QueryResult';
static propTypes = {
locale: PropTypes.object,
total: PropTypes.number,
};
render() {
const { locale = {}, total } = this.props;
return (
<div className="query_result_wrapper">
{locale.ConfigurationManagement.queryResults}
<strong style={{ fontWeight: 'bold' }}> {total} </strong>
{locale.ConfigurationManagement.articleMeetRequirements}
</div>
);
}
}
export default QueryResult;

View File

@ -0,0 +1,21 @@
/*!
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.query_result_wrapper{
font-size: 16px;
margin-bottom: 16px;
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", STHeiti, "Microsoft YaHei";
}

View File

@ -20,6 +20,7 @@ import $ from 'jquery';
import { Button } from '@alifd/next'; import { Button } from '@alifd/next';
import NameSpaceList from '../NameSpaceList'; import NameSpaceList from '../NameSpaceList';
import { setParams, request } from '../../globalLib'; import { setParams, request } from '../../globalLib';
import PageTitle from '../PageTitle';
import './index.scss'; import './index.scss';
@ -261,7 +262,7 @@ class RegionGroup extends React.Component {
render() { render() {
return ( return (
<div> <div style={{ marginTop: this.state.left ? 0 : -30 }}>
<div ref={ref => (this.mainRef = ref)} className="clearfix"> <div ref={ref => (this.mainRef = ref)} className="clearfix">
<div style={{ overflow: 'hidden' }}> <div style={{ overflow: 'hidden' }}>
<div id="left" style={{ float: 'left', display: 'inline-block', marginRight: 20 }}> <div id="left" style={{ float: 'left', display: 'inline-block', marginRight: 20 }}>
@ -270,7 +271,7 @@ class RegionGroup extends React.Component {
style={{ display: 'inline-block', verticalAlign: 'top' }} style={{ display: 'inline-block', verticalAlign: 'top' }}
> >
{typeof this.state.left === 'string' ? ( {typeof this.state.left === 'string' ? (
<h5 style={this.styles.title}>{this.state.left}</h5> <PageTitle title={this.state.left} />
) : ( ) : (
this.state.left this.state.left
)} )}
@ -314,13 +315,11 @@ class RegionGroup extends React.Component {
</div> </div>
</div> </div>
{this.props.namespaceCallBack && ( {this.props.namespaceCallBack && (
<div>
<NameSpaceList <NameSpaceList
ref={this.nameSpaceList} ref={this.nameSpaceList}
namespaceCallBack={this.props.namespaceCallBack} namespaceCallBack={this.props.namespaceCallBack}
setNowNameSpace={this.props.setNowNameSpace} setNowNameSpace={this.props.setNowNameSpace}
/> />
</div>
)} )}
</div> </div>
</div> </div>

View File

@ -114,11 +114,11 @@ class SuccessDialog extends React.Component {
</h3> </h3>
)} )}
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>Data ID:</span> <span style={{ color: '#999', marginRight: 5 }}>Data ID</span>
<span style={{ color: '#c7254e' }}>{this.state.dataId}</span> <span style={{ color: '#c7254e' }}>{this.state.dataId}</span>
</p> </p>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>Group:</span> <span style={{ color: '#999', marginRight: 5 }}>Group</span>
<span style={{ color: '#c7254e' }}>{this.state.group}</span> <span style={{ color: '#c7254e' }}>{this.state.group}</span>
</p> </p>
{this.state.isok ? '' : <p style={{ color: 'red' }}>{this.state.message}</p>} {this.state.isok ? '' : <p style={{ color: 'red' }}>{this.state.message}</p>}

View File

@ -55,6 +55,8 @@ import reducers from './reducers';
import { changeLanguage } from './reducers/locale'; import { changeLanguage } from './reducers/locale';
import './index.scss'; import './index.scss';
import '@alifd/theme-design-pro/variables.css';
import '@alifd/theme-design-pro/dist/next.var.css';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
module.hot && module.hot.accept(); module.hot && module.hot.accept();

View File

@ -14,6 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
html, html,
body, body,
:global(#root) { :global(#root) {
@ -64,7 +65,23 @@ body,
:global(.viewFramework-product-navbar .product-nav-list li .active) { :global(.viewFramework-product-navbar .product-nav-list li .active) {
background-color: #fff !important; background-color: #fff !important;
} }
.next-menu .next-menu-icon-arrow-down {
transform: rotate(0deg)!important;
}
li.next-menu-item:not(.next-disabled):hover, li.next-menu-item:not(.next-disabled).next-selected:hover, li.next-menu-item:not(.next-disabled).next-selected:focus:hover {
background: #E4F3FE;
background: var(--nav-normal-sub-nav-hover-bg-color, #E4F3FE);
color: #209BFA;
color: var(--nav-normal-sub-nav-hover-text-color, #209BFA);
}
.next-menu.next-normal .next-menu-item.next-selected{
background: #E4F3FE!important;;
background: var(--nav-normal-sub-nav-selected-bg-color, #E4F3FE)!important;
color: #209BFA!important;
color: var(--nav-normal-sub-nav-selected-text-color, #209BFA)!important;
}
.clearfix:after { .clearfix:after {
content: '.'; content: '.';
clear: both; clear: both;
@ -78,6 +95,12 @@ body,
zoom: 1; zoom: 1;
} }
.copy-icon {
cursor: pointer;
margin-left: 4px;
color: var(--color-link-1, #298dff);
}
.layouttitle { .layouttitle {
height: 40px; height: 40px;
width: 200px; width: 200px;
@ -578,7 +601,7 @@ form.vertical-margin-lg .form-group {
.namespacewrapper { .namespacewrapper {
padding: 5px 15px; padding: 5px 15px;
overflow: hidden; overflow: hidden;
background-color: #eee; background-color: #efefef;
} }
/* /*

View File

@ -59,7 +59,7 @@ class MainLayout extends React.Component {
isCurrentPath(url) { isCurrentPath(url) {
const { location } = this.props; const { location } = this.props;
return url === location.pathname ? 'current-path' : undefined; return url === location.pathname ? 'current-path next-selected' : undefined;
} }
defaultOpenKeys() { defaultOpenKeys() {
@ -86,10 +86,18 @@ class MainLayout extends React.Component {
const { locale = {}, version, functionMode } = this.props; const { locale = {}, version, functionMode } = this.props;
const MenuData = getMenuData(functionMode); const MenuData = getMenuData(functionMode);
return ( return (
<> <section
className="next-shell next-shell-desktop next-shell-brand"
style={{ minHeight: '100vh' }}
>
<Header /> <Header />
<div className="main-container"> <section className="next-shell-sub-main">
<div className="left-panel"> <div className="main-container next-shell-main">
<div className="left-panel next-aside-navigation">
<div
className="next-shell-navigation next-shell-mini next-shell-aside"
style={{ padding: 0 }}
>
{this.isShowGoBack() ? ( {this.isShowGoBack() ? (
<div className="go-back" onClick={() => this.goBack()}> <div className="go-back" onClick={() => this.goBack()}>
<Icon type="arrow-left" /> <Icon type="arrow-left" />
@ -102,7 +110,7 @@ class MainLayout extends React.Component {
</h1> </h1>
<Menu <Menu
defaultOpenKeys={this.defaultOpenKeys()} defaultOpenKeys={this.defaultOpenKeys()}
className="nav-menu" className="next-nav next-normal next-active next-right next-no-arrow next-nav-embeddable"
openMode="single" openMode="single"
> >
{MenuData.map((subMenu, idx) => { {MenuData.map((subMenu, idx) => {
@ -137,9 +145,11 @@ class MainLayout extends React.Component {
</> </>
)} )}
</div> </div>
<div className="right-panel">{this.props.children}</div>
</div> </div>
</> <div className="right-panel next-shell-sub-main">{this.props.children}</div>
</div>
</section>
</section>
); );
} }
} }

View File

@ -1396,30 +1396,27 @@ h6 {
.main-container { .main-container {
height: calc(100vh - 66px); height: calc(100vh - 66px);
.left-panel, background-color: #fff!important;
.right-panel {
float: left;
height: 100%;
}
.left-panel {
width: 180px;
background-color: #eaedf1;
}
.right-panel { .right-panel {
background-color: #fff;
width: calc(100% - 180px); width: calc(100% - 180px);
padding: 10px; padding: 12px 32px;
overflow: scroll; overflow: scroll;
} }
.nav-title { .nav-title {
margin: 0; margin: 0;
// background-color: #E4F3FE;
text-align: center; text-align: center;
font-size: 14px; font-size: 14px;
font-weight: bold; font-weight: bold;
line-height: 70px; height: 72px;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
background-color: #d9dee4; border-bottom: var(--shell-brand-navigation-ver-divider-size, 1px) var(--shell-brand-navigation-ver-divider-style, solid) var(--shell-brand-navigation-ver-divider-color, #EEEEEE);
display: flex;
justify-content: center;
align-items: center;
span { span {
margin-left: 5px; margin-left: 5px;
} }

View File

@ -75,11 +75,12 @@ const I18N_CONF = {
modifyPasswordFailed: 'Modify password failed', modifyPasswordFailed: 'Modify password failed',
}, },
NameSpace: { NameSpace: {
public_tips: 'public namespace ID is empty by default',
namespace: 'Namespaces', namespace: 'Namespaces',
prompt: 'Notice', prompt: 'Notice',
namespaceDetails: 'Namespace details', namespaceDetails: 'Namespace details',
namespaceName: 'Name', namespaceName: 'Name',
namespaceID: 'ID:', namespaceID: 'ID',
configuration: 'Number of Configurations', configuration: 'Number of Configurations',
description: 'Description', description: 'Description',
removeNamespace: 'Remove the namespace', removeNamespace: 'Remove the namespace',
@ -225,8 +226,7 @@ const I18N_CONF = {
groupCanNotBeEmpty: 'Group cannot be empty', groupCanNotBeEmpty: 'Group cannot be empty',
pleaseInputIp: 'Enter IP', pleaseInputIp: 'Enter IP',
query: 'Search', query: 'Search',
queryResultsQuery: 'Search Results: Found', articleMeetRequirements: 'configuration items.',
articleMeetRequirementsConfiguration: 'configuration items.',
}, },
HistoryRollback: { HistoryRollback: {
details: 'Details', details: 'Details',
@ -238,8 +238,7 @@ const I18N_CONF = {
group: 'Enter Group', group: 'Enter Group',
groupCanNotBeEmpty: 'Group cannot be empty', groupCanNotBeEmpty: 'Group cannot be empty',
query: 'Search', query: 'Search',
queryResult: 'Search Results: Found', articleMeetRequirements: 'configuration items.',
articleMeet: 'configuration items.',
lastUpdateTime: 'Last Modified At', lastUpdateTime: 'Last Modified At',
operator: 'Operator', operator: 'Operator',
operation: 'Operation', operation: 'Operation',
@ -255,11 +254,11 @@ const I18N_CONF = {
deleteAction: 'Delete', deleteAction: 'Delete',
recipientFrom: 'Collapse', recipientFrom: 'Collapse',
moreAdvancedOptions: 'Advanced Options', moreAdvancedOptions: 'Advanced Options',
home: 'Application:', home: 'Application',
actionType: 'Action Type:', actionType: 'Action Type',
operator: 'Operator:', operator: 'Operator',
sourceIp: 'Source IP', sourceIp: 'Source IP',
configureContent: 'Configuration Content:', configureContent: 'Configuration Content',
back: 'Back', back: 'Back',
}, },
DashboardCard: { DashboardCard: {
@ -271,10 +270,11 @@ const I18N_CONF = {
questionnaire2: 'questionnaire', questionnaire2: 'questionnaire',
ad: ad:
'a ACM front-end monitoring questionnaire, the time limit to receive Ali cloud voucher details shoved stamp: the', 'a ACM front-end monitoring questionnaire, the time limit to receive Ali cloud voucher details shoved stamp: the',
noLongerDisplay4: 'no longer display:', noLongerDisplay4: 'no longer display',
createConfiguration: 'Create Configuration',
removeConfiguration: 'Delete Configuration', removeConfiguration: 'Delete Configuration',
sureDelete: 'Are you sure you want to delete the following configuration?', sureDelete: 'Are you sure you want to delete the following configuration?',
environment: 'Region:', environment: 'Region',
configurationManagement: 'Configurations', configurationManagement: 'Configurations',
details: 'Details', details: 'Details',
sampleCode: 'Code Example', sampleCode: 'Code Example',
@ -283,12 +283,12 @@ const I18N_CONF = {
more: 'More', more: 'More',
version: 'Historical Versions', version: 'Historical Versions',
listenerQuery: 'Configuration Listening Query', listenerQuery: 'Configuration Listening Query',
failedEntry: 'Failed Entry:', failedEntry: 'Failed Entry',
successfulEntry: 'Successful Entry:', successfulEntry: 'Successful Entry',
unprocessedEntry: 'Unprocessed Entry:', unprocessedEntry: 'Unprocessed Entry',
pubNoData: 'No results found.', pubNoData: 'No results found.',
configurationManagement8: 'configuration management', configurationManagement8: 'configuration management',
queryResults: 'Search Results: Found', queryResults: 'Found',
articleMeetRequirements: 'configuration items', articleMeetRequirements: 'configuration items',
fuzzyd: "Add wildcard '*' for fuzzy query", fuzzyd: "Add wildcard '*' for fuzzy query",
defaultFuzzyd: 'Default fuzzy query mode opened', defaultFuzzyd: 'Default fuzzy query mode opened',
@ -296,9 +296,8 @@ const I18N_CONF = {
defaultFuzzyg: 'Default fuzzy query mode opened', defaultFuzzyg: 'Default fuzzy query mode opened',
query: 'Search', query: 'Search',
advancedQuery9: 'Advanced Query', advancedQuery9: 'Advanced Query',
application0: 'Application:',
app1: 'Enter App Name\n', app1: 'Enter App Name\n',
tags: 'Tags:', tags: 'Tags',
pleaseEnterTag: 'Enter Tag', pleaseEnterTag: 'Enter Tag',
application: 'Application', application: 'Application',
operation: 'Operation', operation: 'Operation',
@ -343,9 +342,9 @@ const I18N_CONF = {
getNamespace403: 'Without permission to access ${namespaceName} namespace!', getNamespace403: 'Without permission to access ${namespaceName} namespace!',
startCloning: 'Start Clone', startCloning: 'Start Clone',
cloningConfiguration: 'Clone config', cloningConfiguration: 'Clone config',
source: 'Source :', source: 'Source ',
configurationNumber: 'Items:', configurationNumber: 'Items',
target: 'Target:', target: 'Target',
selectNamespace: 'Select Namespace', selectNamespace: 'Select Namespace',
selectedEntry: '| Selected Entry', selectedEntry: '| Selected Entry',
cloneSelectedAlertTitle: 'Clone config', cloneSelectedAlertTitle: 'Clone config',
@ -371,11 +370,11 @@ const I18N_CONF = {
'Notice: You are going to add configuration to a new group, please make sure that the version of Pandora which clients are using is higher than 3.4.0, otherwise this configuration may be unreadable to clients.', 'Notice: You are going to add configuration to a new group, please make sure that the version of Pandora which clients are using is higher than 3.4.0, otherwise this configuration may be unreadable to clients.',
dataIdLength: 'Collapse', dataIdLength: 'Collapse',
collapse: 'Advanced Options', collapse: 'Advanced Options',
tags: 'Tags:', tags: 'Tags',
pleaseEnterTag: 'Enter Tag', pleaseEnterTag: 'Enter Tag',
groupIdCannotBeLonger: 'Application:', groupIdCannotBeLonger: 'Application',
description: 'Description:', description: 'Description',
targetEnvironment: 'Format:', targetEnvironment: 'Format',
configurationFormat: 'Configuration Content', configurationFormat: 'Configuration Content',
configureContentsOf: 'Press F1 to view in full screen', configureContentsOf: 'Press F1 to view in full screen',
fullScreen: 'Press Esc to exit', fullScreen: 'Press Esc to exit',
@ -391,13 +390,13 @@ const I18N_CONF = {
cover: 'Cover', cover: 'Cover',
getNamespaceFailed: 'get the namespace failed', getNamespaceFailed: 'get the namespace failed',
selectedEntry: '| Selected Entry', selectedEntry: '| Selected Entry',
homeApplication: 'Home Application:', homeApplication: 'Home Application',
tags: 'tags:', tags: 'tags',
startCloning: 'Start Clone', startCloning: 'Start Clone',
source: 'Source :', source: 'Source ',
configurationNumber: 'Items:', configurationNumber: 'Items',
target: 'Target:', target: 'Target',
conflict: 'Conflict:', conflict: 'Conflict',
selectNamespace: 'Select Namespace', selectNamespace: 'Select Namespace',
configurationCloning: 'Clone', configurationCloning: 'Clone',
}, },
@ -426,17 +425,17 @@ const I18N_CONF = {
homeApplication: 'Group name cannot be empty', homeApplication: 'Group name cannot be empty',
collapse: 'Collapse', collapse: 'Collapse',
groupNotEmpty: 'Advanced Options', groupNotEmpty: 'Advanced Options',
tags: 'Tags:', tags: 'Tags',
pleaseEnterTag: 'Enter Tag', pleaseEnterTag: 'Enter Tag',
targetEnvironment: 'Application:', targetEnvironment: 'Application',
description: 'Description:', description: 'Description',
format: 'Format:', format: 'Format',
configcontent: 'Configuration Content', configcontent: 'Configuration Content',
escExit: 'Press F1 to view in full screen', escExit: 'Press F1 to view in full screen',
releaseBeta: 'Press Esc to exit ', releaseBeta: 'Press Esc to exit ',
release: 'Beta Publish', release: 'Beta Publish',
stopPublishBeta: 'Stop Beta', stopPublishBeta: 'Stop Beta',
betaPublish: 'Beta Publish:', betaPublish: 'Beta Publish',
betaSwitchPrompt: 'Not checked by default.', betaSwitchPrompt: 'Not checked by default.',
publish: 'Publish', publish: 'Publish',
back: 'Back', back: 'Back',
@ -452,19 +451,19 @@ const I18N_CONF = {
publicSpace: 'OK', publicSpace: 'OK',
confirmModify: 'Edit Namespace', confirmModify: 'Edit Namespace',
editNamespace: 'Loading...', editNamespace: 'Loading...',
load: 'Namespace:', load: 'Namespace',
namespace: 'Namespace cannot be empty', namespace: 'Namespace cannot be empty',
namespaceDesc: 'Namespace description cannot be empty', namespaceDesc: 'Namespace description cannot be empty',
description: 'Description:', description: 'Description',
}, },
ExportDialog: { ExportDialog: {
selectedEntry: '| Selected Entry', selectedEntry: '| Selected Entry',
application: 'Application:', application: 'Application',
tags: 'Tags:', tags: 'Tags',
exportBtn: 'Export', exportBtn: 'Export',
exportConfiguration: 'Export ( ', exportConfiguration: 'Export ( ',
source: 'Source', source: 'Source',
items: 'Items:', items: 'Items',
}, },
ImportDialog: { ImportDialog: {
terminate: 'Terminate', terminate: 'Terminate',
@ -473,8 +472,8 @@ const I18N_CONF = {
zipFileFormat: 'Only upload. zip file format', zipFileFormat: 'Only upload. zip file format',
uploadFile: 'Upload File', uploadFile: 'Upload File',
importLabel: 'Import ( ', importLabel: 'Import ( ',
target: 'Target:', target: 'Target',
conflict: 'Conflict:', conflict: 'Conflict',
beSureExerciseCaution: 'Caution: data will be imported directly after uploading.', beSureExerciseCaution: 'Caution: data will be imported directly after uploading.',
}, },
ShowCodeing: { ShowCodeing: {
@ -507,12 +506,12 @@ const I18N_CONF = {
cancel: 'Cancel', cancel: 'Cancel',
newnamespce: 'Create Namespace', newnamespce: 'Create Namespace',
loading: 'Loading...', loading: 'Loading...',
name: 'Namespace:', name: 'Namespace',
namespaceId: 'Namespace ID(automatically generated if not filled):', namespaceId: 'Namespace ID(automatically generated if not filled)',
namespaceIdTooLong: 'The namespace ID length cannot exceed 128', namespaceIdTooLong: 'The namespace ID length cannot exceed 128',
namespacenotnull: 'Namespace cannot be empty', namespacenotnull: 'Namespace cannot be empty',
namespacedescnotnull: 'Namespace description cannot be empty', namespacedescnotnull: 'Namespace description cannot be empty',
description: 'Description:', description: 'Description',
namespaceIdAlreadyExist: 'namespaceId already exist', namespaceIdAlreadyExist: 'namespaceId already exist',
newnamespceFailedMessage: newnamespceFailedMessage:
'namespaceId format is incorrect/namespaceId length greater than 128/namespaceId already exist', 'namespaceId format is incorrect/namespaceId length greater than 128/namespaceId already exist',
@ -526,11 +525,11 @@ const I18N_CONF = {
configurationDetails: 'Configuration Details', configurationDetails: 'Configuration Details',
collapse: 'Collapse', collapse: 'Collapse',
more: 'Advanced Options', more: 'Advanced Options',
home: 'Application:', home: 'Application',
tags: 'Tags:', tags: 'Tags',
description: 'Description:', description: 'Description',
betaRelease: 'Beta Publish:', betaRelease: 'Beta Publish',
configuration: 'Configuration Content:', configuration: 'Configuration Content',
back: 'Back', back: 'Back',
versionComparison: 'Version Comparison', versionComparison: 'Version Comparison',
dialogCurrentArea: 'Current Version', dialogCurrentArea: 'Current Version',
@ -551,9 +550,9 @@ const I18N_CONF = {
configurationRollback: 'Configuration Rollback', configurationRollback: 'Configuration Rollback',
collapse: 'Collapse', collapse: 'Collapse',
more: 'Advanced Options', more: 'Advanced Options',
home: 'Application:', home: 'Application',
actionType: 'Action Type:', actionType: 'Action Type',
configuration: 'Configuration Content:', configuration: 'Configuration Content',
back: 'Back', back: 'Back',
rollbackSuccessful: 'Rollback Successful', rollbackSuccessful: 'Rollback Successful',
rollbackDelete: 'Delete', rollbackDelete: 'Delete',

View File

@ -74,6 +74,7 @@ const I18N_CONF = {
modifyPasswordFailed: '修改密码失败', modifyPasswordFailed: '修改密码失败',
}, },
NameSpace: { NameSpace: {
public_tips: 'public命名空间ID默认空',
namespace: '命名空间', namespace: '命名空间',
prompt: '提示', prompt: '提示',
namespaceDetails: '命名空间详情', namespaceDetails: '命名空间详情',
@ -224,8 +225,7 @@ const I18N_CONF = {
groupCanNotBeEmpty: 'Group不能为空', groupCanNotBeEmpty: 'Group不能为空',
pleaseInputIp: '请输入IP', pleaseInputIp: '请输入IP',
query: '查询', query: '查询',
queryResultsQuery: '查询结果共查询到', articleMeetRequirements: '条满足要求的配置',
articleMeetRequirementsConfiguration: '条满足要求的配置',
}, },
HistoryRollback: { HistoryRollback: {
details: '详情', details: '详情',
@ -237,8 +237,7 @@ const I18N_CONF = {
group: '请输入Group', group: '请输入Group',
groupCanNotBeEmpty: 'Group不能为空', groupCanNotBeEmpty: 'Group不能为空',
query: '查询', query: '查询',
queryResult: '查询结果共查询到', articleMeetRequirements: '条满足要求的配置',
articleMeet: '条满足要求的配置',
lastUpdateTime: '最后更新时间', lastUpdateTime: '最后更新时间',
operator: '操作人', operator: '操作人',
operation: '操作', operation: '操作',
@ -254,11 +253,11 @@ const I18N_CONF = {
deleteAction: '删除', deleteAction: '删除',
recipientFrom: '收起', recipientFrom: '收起',
moreAdvancedOptions: '更多高级选项', moreAdvancedOptions: '更多高级选项',
home: '归属应用:', home: '归属应用',
actionType: '操作类型:', actionType: '操作类型',
configureContent: '配置内容:', configureContent: '配置内容',
operator: '操作人:', operator: '操作人',
sourceIp: '来源 IP:', sourceIp: '来源 IP',
back: '返回', back: '返回',
}, },
DashboardCard: { DashboardCard: {
@ -268,11 +267,12 @@ const I18N_CONF = {
ConfigurationManagement: { ConfigurationManagement: {
exportBtn: '导出', exportBtn: '导出',
questionnaire2: '问卷调查', questionnaire2: '问卷调查',
ad: ' ACM 前端监控调查问卷限时领取阿里云代金券\t 详情猛戳', ad: ' ACM 前端监控调查问卷限时领取阿里云代金券\t 详情猛戳',
noLongerDisplay4: '不再显示', noLongerDisplay4: '不再显示',
createConfiguration: '创建配置',
removeConfiguration: '删除配置', removeConfiguration: '删除配置',
sureDelete: '确定要删除以下配置吗', sureDelete: '确定要删除以下配置吗',
environment: '地域', environment: '地域',
configurationManagement: '配置列表', configurationManagement: '配置列表',
details: '详情', details: '详情',
sampleCode: '示例代码', sampleCode: '示例代码',
@ -281,12 +281,12 @@ const I18N_CONF = {
more: '更多', more: '更多',
version: '历史版本', version: '历史版本',
listenerQuery: '监听查询', listenerQuery: '监听查询',
failedEntry: '失败的条目:', failedEntry: '失败的条目',
successfulEntry: '成功的条目:', successfulEntry: '成功的条目',
unprocessedEntry: '未处理的条目:', unprocessedEntry: '未处理的条目',
pubNoData: '没有数据', pubNoData: '没有数据',
configurationManagement8: '配置管理', configurationManagement8: '配置管理',
queryResults: '查询结果共查询', queryResults: '查询',
articleMeetRequirements: '条满足要求的配置', articleMeetRequirements: '条满足要求的配置',
fuzzyd: "添加通配符'*'进行模糊查询", fuzzyd: "添加通配符'*'进行模糊查询",
defaultFuzzyd: '已开启默认模糊查询', defaultFuzzyd: '已开启默认模糊查询',
@ -294,11 +294,10 @@ const I18N_CONF = {
defaultFuzzyg: '已开启默认模糊查询', defaultFuzzyg: '已开启默认模糊查询',
query: '查询', query: '查询',
advancedQuery9: '高级查询', advancedQuery9: '高级查询',
application0: '归属应用:',
app1: '请输入应用名', app1: '请输入应用名',
tags: '标签:', tags: '标签',
pleaseEnterTag: '请输入标签', pleaseEnterTag: '请输入标签',
application: '归属应用:', application: '归属应用',
operation: '操作', operation: '操作',
export: '导出查询结果', export: '导出查询结果',
newExport: '新版导出查询结果', newExport: '新版导出查询结果',
@ -340,9 +339,9 @@ const I18N_CONF = {
getNamespace403: '没有 ${namespaceName} 命名空间的访问权限', getNamespace403: '没有 ${namespaceName} 命名空间的访问权限',
startCloning: '开始克隆', startCloning: '开始克隆',
cloningConfiguration: '克隆配置', cloningConfiguration: '克隆配置',
source: '源空间', source: '源空间',
configurationNumber: '配置数量', configurationNumber: '配置数量',
target: '目标空间', target: '目标空间',
selectNamespace: '请选择命名空间', selectNamespace: '请选择命名空间',
selectedEntry: '| 选中的条目', selectedEntry: '| 选中的条目',
cloneSelectedAlertTitle: '配置克隆', cloneSelectedAlertTitle: '配置克隆',
@ -365,15 +364,15 @@ const I18N_CONF = {
moreAdvanced: 'Group不能为空', moreAdvanced: 'Group不能为空',
groupNotEmpty: 'Group ID长度不能超过127字符', groupNotEmpty: 'Group ID长度不能超过127字符',
annotation: annotation:
'您正在往一个自定义分组新增配置请确保客户端使用的Pandora版本高于3.4.0否则可能读取不到该配置', '您正在往一个自定义分组新增配置请确保客户端使用的Pandora版本高于3.4.0否则可能读取不到该配置',
dataIdLength: '收起', dataIdLength: '收起',
collapse: '更多高级选项', collapse: '更多高级选项',
tags: '标签:', tags: '标签',
pleaseEnterTag: '请输入标签', pleaseEnterTag: '请输入标签',
groupIdCannotBeLonger: '归属应用:', groupIdCannotBeLonger: '归属应用',
description: '描述:', description: '描述',
targetEnvironment: '配置格式:', targetEnvironment: '配置格式',
configurationFormat: '配置内容:', configurationFormat: '配置内容',
configureContentsOf: '按F1显示全屏', configureContentsOf: '按F1显示全屏',
fullScreen: '按Esc退出全屏', fullScreen: '按Esc退出全屏',
escExit: '发布', escExit: '发布',
@ -388,13 +387,13 @@ const I18N_CONF = {
cover: '覆盖', cover: '覆盖',
getNamespaceFailed: '获取命名空间失败', getNamespaceFailed: '获取命名空间失败',
selectedEntry: '| 选中的条目', selectedEntry: '| 选中的条目',
homeApplication: '归属应用:', homeApplication: '归属应用',
tags: '标签:', tags: '标签',
startCloning: '开始克隆', startCloning: '开始克隆',
source: '源空间', source: '源空间',
configurationNumber: '配置数量', configurationNumber: '配置数量',
target: '目标空间', target: '目标空间',
conflict: '相同配置:', conflict: '相同配置',
selectNamespace: '请选择命名空间', selectNamespace: '请选择命名空间',
configurationCloning: '配置克隆', configurationCloning: '配置克隆',
}, },
@ -423,17 +422,17 @@ const I18N_CONF = {
homeApplication: 'Group不能为空', homeApplication: 'Group不能为空',
collapse: '收起', collapse: '收起',
groupNotEmpty: '更多高级选项', groupNotEmpty: '更多高级选项',
tags: '标签:', tags: '标签',
pleaseEnterTag: '请输入标签', pleaseEnterTag: '请输入标签',
targetEnvironment: '归属应用:', targetEnvironment: '归属应用',
description: '描述:', description: '描述',
format: '配置格式:', format: '配置格式',
configcontent: '配置内容', configcontent: '配置内容',
escExit: '按F1显示全屏', escExit: '按F1显示全屏',
releaseBeta: '按Esc退出全屏', releaseBeta: '按Esc退出全屏',
release: '发布Beta', release: '发布Beta',
stopPublishBeta: '停止Beta', stopPublishBeta: '停止Beta',
betaPublish: 'Beta发布:', betaPublish: 'Beta发布',
betaSwitchPrompt: '默认不要勾选', betaSwitchPrompt: '默认不要勾选',
publish: '发布', publish: '发布',
back: '返回', back: '返回',
@ -449,19 +448,19 @@ const I18N_CONF = {
publicSpace: '确认修改', publicSpace: '确认修改',
confirmModify: '编辑命名空间', confirmModify: '编辑命名空间',
editNamespace: '加载中...', editNamespace: '加载中...',
load: '命名空间名', load: '命名空间名',
namespace: '命名空间不能为空', namespace: '命名空间不能为空',
namespaceDesc: '命名空间描述不能为空', namespaceDesc: '命名空间描述不能为空',
description: '描述', description: '描述',
}, },
ExportDialog: { ExportDialog: {
selectedEntry: '| 选中的条目', selectedEntry: '| 选中的条目',
application: '归属应用:', application: '归属应用',
tags: '标签:', tags: '标签',
exportBtn: '导出', exportBtn: '导出',
exportConfiguration: '导出配置', exportConfiguration: '导出配置',
source: '源空间', source: '源空间',
items: '配置数量', items: '配置数量',
}, },
ImportDialog: { ImportDialog: {
terminate: '终止导入', terminate: '终止导入',
@ -470,8 +469,8 @@ const I18N_CONF = {
zipFileFormat: '只能上传.zip格式的文件', zipFileFormat: '只能上传.zip格式的文件',
uploadFile: '上传文件', uploadFile: '上传文件',
importLabel: '导入配置 ( ', importLabel: '导入配置 ( ',
target: '目标空间', target: '目标空间',
conflict: '相同配置', conflict: '相同配置',
beSureExerciseCaution: '文件上传后将直接导入配置请务必谨慎操作', beSureExerciseCaution: '文件上传后将直接导入配置请务必谨慎操作',
}, },
ShowCodeing: { ShowCodeing: {
@ -489,10 +488,10 @@ const I18N_CONF = {
syncConfiguration: '同步配置成功', syncConfiguration: '同步配置成功',
advancedOptions: '更多高级选项', advancedOptions: '更多高级选项',
collapse: '收起', collapse: '收起',
home: '归属应用', home: '归属应用',
region: '所属地域', region: '所属地域',
configuration: '配置内容', configuration: '配置内容',
target: '目标地域', target: '目标地域',
sync: '同步', sync: '同步',
back: '返回', back: '返回',
}, },
@ -504,12 +503,12 @@ const I18N_CONF = {
cancel: '取消', cancel: '取消',
newnamespce: '新建命名空间', newnamespce: '新建命名空间',
loading: '加载中...', loading: '加载中...',
name: '命名空间名', name: '命名空间名',
namespaceId: '命名空间ID(不填则自动生成)', namespaceId: '命名空间ID(不填则自动生成)',
namespaceIdTooLong: '命名空间ID长度不能超过128', namespaceIdTooLong: '命名空间ID长度不能超过128',
namespacenotnull: '命名空间不能为空', namespacenotnull: '命名空间不能为空',
namespacedescnotnull: '命名空间描述不能为空', namespacedescnotnull: '命名空间描述不能为空',
description: '描述', description: '描述',
namespaceIdAlreadyExist: 'namespaceId已存在', namespaceIdAlreadyExist: 'namespaceId已存在',
newnamespceFailedMessage: 'namespaceId格式不正确/namespaceId长度大于128/namespaceId已存在', newnamespceFailedMessage: 'namespaceId格式不正确/namespaceId长度大于128/namespaceId已存在',
}, },
@ -522,11 +521,11 @@ const I18N_CONF = {
configurationDetails: '配置详情', configurationDetails: '配置详情',
collapse: '收起', collapse: '收起',
more: '更多高级选项', more: '更多高级选项',
home: '归属应用', home: '归属应用',
tags: '标签:', tags: '标签',
description: '描述', description: '描述',
betaRelease: 'Beta发布', betaRelease: 'Beta发布',
configuration: '配置内容', configuration: '配置内容',
back: '返回', back: '返回',
versionComparison: '版本对比', versionComparison: '版本对比',
dialogCurrentArea: '当前版本', dialogCurrentArea: '当前版本',
@ -547,9 +546,9 @@ const I18N_CONF = {
configurationRollback: '配置回滚', configurationRollback: '配置回滚',
collapse: '收起', collapse: '收起',
more: '更多高级选项', more: '更多高级选项',
home: '归属应用', home: '归属应用',
actionType: '操作类型', actionType: '操作类型',
configuration: '配置内容', configuration: '配置内容',
back: '返回', back: '返回',
rollbackSuccessful: '回滚成功', rollbackSuccessful: '回滚成功',
rollbackDelete: '删除', rollbackDelete: '删除',

View File

@ -33,6 +33,7 @@ import {
import { request } from '../../../globalLib'; import { request } from '../../../globalLib';
import RegionGroup from '../../../components/RegionGroup'; import RegionGroup from '../../../components/RegionGroup';
import axios from 'axios'; import axios from 'axios';
import PageTitle from '../../../components/PageTitle';
import './ClusterNodeList.scss'; import './ClusterNodeList.scss';
@ -165,18 +166,11 @@ class ClusterNodeList extends React.Component {
tip="Loading..." tip="Loading..."
color="#333" color="#333"
> >
<div style={{ marginTop: -15 }}> <PageTitle title={clusterNodeList} desc={nowNamespaceId} nameSpace />
<RegionGroup <RegionGroup
setNowNameSpace={this.setNowNameSpace} setNowNameSpace={this.setNowNameSpace}
namespaceCallBack={this.getQueryLater} namespaceCallBack={this.getQueryLater}
/> />
</div>
<h3 className="page-title">
<span className="title-item">{clusterNodeList}</span>
<span className="title-item">|</span>
<span className="title-item">{nowNamespaceName}</span>
<span className="title-item">{nowNamespaceId}</span>
</h3>
<Row className="demo-row" style={{ marginBottom: 10, padding: 0 }}> <Row className="demo-row" style={{ marginBottom: 10, padding: 0 }}>
<Col span="24"> <Col span="24">
<Form inline field={this.field}> <Form inline field={this.field}>

View File

@ -292,7 +292,7 @@ class ConfigDetail extends React.Component {
}; };
const activeKey = this.state.activeKey.split('-')[0]; const activeKey = this.state.activeKey.split('-')[0];
return ( return (
<div style={{ padding: 10 }}> <div>
<Loading <Loading
shape={'flower'} shape={'flower'}
tip={'Loading...'} tip={'Loading...'}
@ -318,10 +318,10 @@ class ConfigDetail extends React.Component {
'' ''
)} )}
<Form inline={false} field={this.field} {...formItemLayout}> <Form inline={false} field={this.field} {...formItemLayout}>
<FormItem label={'Data ID:'} required> <FormItem label={'Data ID'} required>
<Input htmlType={'text'} readOnly {...init('dataId')} /> <Input htmlType={'text'} readOnly {...init('dataId')} />
</FormItem> </FormItem>
<FormItem label={'Group:'} required> <FormItem label={'Group'} required>
<Input htmlType={'text'} readOnly {...init('group')} /> <Input htmlType={'text'} readOnly {...init('group')} />
</FormItem> </FormItem>
<FormItem label=" "> <FormItem label=" ">

View File

@ -584,7 +584,7 @@ class ConfigEditor extends React.Component {
const activeKey = this.state.activeKey.split('-')[0]; const activeKey = this.state.activeKey.split('-')[0];
return ( return (
<div style={{ padding: 10 }}> <div>
<Loading <Loading
shape="flower" shape="flower"
style={{ position: 'relative', width: '100%' }} style={{ position: 'relative', width: '100%' }}
@ -613,7 +613,7 @@ class ConfigEditor extends React.Component {
)} )}
<Form field={this.field}> <Form field={this.field}>
<FormItem label="Data ID:" {...formItemLayout}> <FormItem label="Data ID" {...formItemLayout}>
<Input <Input
disabled disabled
{...init('dataId', { {...init('dataId', {
@ -624,7 +624,7 @@ class ConfigEditor extends React.Component {
})} })}
/> />
</FormItem> </FormItem>
<FormItem label="Group:" {...formItemLayout}> <FormItem label="Group" {...formItemLayout}>
<Input <Input
disabled disabled
{...init('group', { {...init('group', {

View File

@ -493,7 +493,7 @@ class ConfigEditor extends React.Component {
</Tab> </Tab>
)} )}
<Form className="new-config-form" {...formItemLayout}> <Form className="new-config-form" {...formItemLayout}>
<Form.Item label="Data ID:" required {...dataIdError}> <Form.Item label="Data ID" required {...dataIdError}>
<Input <Input
value={form.dataId} value={form.dataId}
onChange={dataId => onChange={dataId =>
@ -502,7 +502,7 @@ class ConfigEditor extends React.Component {
disabled={!isNewConfig} disabled={!isNewConfig}
/> />
</Form.Item> </Form.Item>
<Form.Item label="Group:" required {...groupError}> <Form.Item label="Group" required {...groupError}>
<Input <Input
value={form.group} value={form.group}
onChange={group => onChange={group =>

View File

@ -124,11 +124,11 @@ class ConfigRollback extends React.Component {
{locale.determine} {locale.followingConfiguration} {additionalMsg} {locale.determine} {locale.followingConfiguration} {additionalMsg}
</h3> </h3>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>Data ID:</span> <span style={{ color: '#999', marginRight: 5 }}>Data ID</span>
<span style={{ color: '#c7254e' }}>{self.field.getValue('dataId')}</span> <span style={{ color: '#c7254e' }}>{self.field.getValue('dataId')}</span>
</p> </p>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>Group:</span> <span style={{ color: '#999', marginRight: 5 }}>Group</span>
<span style={{ color: '#c7254e' }}>{self.field.getValue('group')}</span> <span style={{ color: '#c7254e' }}>{self.field.getValue('group')}</span>
</p> </p>
</div> </div>
@ -193,10 +193,10 @@ class ConfigRollback extends React.Component {
}; };
const { getOpType } = this; const { getOpType } = this;
return ( return (
<div style={{ padding: 10 }}> <div>
<h1>{locale.configurationRollback}</h1> <h1>{locale.configurationRollback}</h1>
<Form field={this.field}> <Form field={this.field}>
<FormItem label="Data ID:" required {...formItemLayout}> <FormItem label="Data ID" required {...formItemLayout}>
<Input htmlType="text" readOnly {...init('dataId')} /> <Input htmlType="text" readOnly {...init('dataId')} />
<div style={{ marginTop: 10 }}> <div style={{ marginTop: 10 }}>
<a style={{ fontSize: '12px' }} onClick={this.toggleMore.bind(this)}> <a style={{ fontSize: '12px' }} onClick={this.toggleMore.bind(this)}>

View File

@ -236,7 +236,7 @@ class ConfigSync extends React.Component {
}; };
return ( return (
<div style={{ padding: 10 }}> <div>
<Loading <Loading
shape="flower" shape="flower"
style={{ position: 'relative', width: '100%' }} style={{ position: 'relative', width: '100%' }}
@ -246,7 +246,7 @@ class ConfigSync extends React.Component {
> >
<h1>{locale.syncConfiguration}</h1> <h1>{locale.syncConfiguration}</h1>
<Form field={this.field}> <Form field={this.field}>
<Form.Item label="Data ID:" required {...formItemLayout}> <Form.Item label="Data ID" required {...formItemLayout}>
<Input htmlType="text" disabled={'disabled'} {...init('dataId')} /> <Input htmlType="text" disabled={'disabled'} {...init('dataId')} />
<div style={{ marginTop: 10 }}> <div style={{ marginTop: 10 }}>
<a style={{ fontSize: '12px' }} onClick={this.toggleMore.bind(this)}> <a style={{ fontSize: '12px' }} onClick={this.toggleMore.bind(this)}>
@ -255,7 +255,7 @@ class ConfigSync extends React.Component {
</div> </div>
</Form.Item> </Form.Item>
<div style={{ overflow: 'hidden', height: this.state.showmore ? 'auto' : '0' }}> <div style={{ overflow: 'hidden', height: this.state.showmore ? 'auto' : '0' }}>
<Form.Item label="Group ID:" required {...formItemLayout}> <Form.Item label="Group ID" required {...formItemLayout}>
<Input htmlType="text" disabled={'disabled'} {...init('group')} /> <Input htmlType="text" disabled={'disabled'} {...init('group')} />
</Form.Item> </Form.Item>
<Form.Item label={locale.home} required {...formItemLayout}> <Form.Item label={locale.home} required {...formItemLayout}>

View File

@ -45,6 +45,8 @@ import DashboardCard from './DashboardCard';
import { getParams, setParams, request } from '@/globalLib'; import { getParams, setParams, request } from '@/globalLib';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { getConfigs } from '../../../reducers/configuration'; import { getConfigs } from '../../../reducers/configuration';
import PageTitle from '../../../components/PageTitle';
import QueryResult from '../../../components/QueryResult';
import './index.scss'; import './index.scss';
import { LANGUAGE_KEY, GLOBAL_PAGE_SIZE_LIST } from '../../../constants'; import { LANGUAGE_KEY, GLOBAL_PAGE_SIZE_LIST } from '../../../constants';
@ -331,11 +333,11 @@ class ConfigurationManagement extends React.Component {
<div style={{ marginTop: '-20px' }}> <div style={{ marginTop: '-20px' }}>
<h3>{locale.sureDelete}</h3> <h3>{locale.sureDelete}</h3>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>Data ID:</span> <span style={{ color: '#999', marginRight: 5 }}>Data ID</span>
<span style={{ color: '#c7254e' }}>{record.dataId}</span> <span style={{ color: '#c7254e' }}>{record.dataId}</span>
</p> </p>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>Group:</span> <span style={{ color: '#999', marginRight: 5 }}>Group</span>
<span style={{ color: '#c7254e' }}>{record.group}</span> <span style={{ color: '#c7254e' }}>{record.group}</span>
</p> </p>
<p> <p>
@ -397,10 +399,9 @@ class ConfigurationManagement extends React.Component {
<Dropdown <Dropdown
trigger={ trigger={
<span style={{ color: '#33cde5' }}> <a title={locale.more}>
{locale.more} <Icon type="ellipsis" size={'small'} style={{ transform: 'rotate(90deg)' }} />
<Icon type={'arrow-down-filling'} size={'xxs'} /> </a>
</span>
} }
triggerType={'click'} triggerType={'click'}
> >
@ -1096,52 +1097,18 @@ class ConfigurationManagement extends React.Component {
className={this.state.hasdash ? 'dash-left-container' : ''} className={this.state.hasdash ? 'dash-left-container' : ''}
style={{ position: 'relative' }} style={{ position: 'relative' }}
> >
<div style={{ display: this.inApp ? 'none' : 'block', marginTop: -15 }}> <div style={{ display: this.inApp ? 'none' : 'block' }}>
<PageTitle
title={locale.configurationManagement8}
desc={this.state.nownamespace_id}
nameSpace
/>
<RegionGroup <RegionGroup
namespaceCallBack={this.cleanAndGetData.bind(this)} namespaceCallBack={this.cleanAndGetData.bind(this)}
setNowNameSpace={this.setNowNameSpace.bind(this)} setNowNameSpace={this.setNowNameSpace.bind(this)}
/> />
</div> </div>
<div
style={{
display: this.inApp ? 'none' : 'block',
position: 'relative',
width: '100%',
overflow: 'hidden',
height: '40px',
}}
>
<h3
style={{
height: 30,
width: '100%',
lineHeight: '30px',
padding: 0,
margin: 0,
paddingLeft: 10,
borderLeft: '3px solid #09c',
color: '#ccc',
fontSize: '12px',
}}
>
<span style={{ fontSize: '14px', color: '#000', marginRight: 8 }}>
{locale.configurationManagement8}
</span>
<span style={{ fontSize: '14px', color: '#000', marginRight: 8 }}>|</span>
<span style={{ fontSize: '14px', color: '#000', marginRight: 8 }}>
{this.state.nownamespace_name}
</span>
<span style={{ fontSize: '14px', color: '#000', marginRight: 18 }}>
{this.state.nownamespace_id}
</span>
{locale.queryResults}
<strong style={{ fontWeight: 'bold' }}> {configurations.totalCount} </strong>
{locale.articleMeetRequirements}
</h3>
<div
style={{ position: 'absolute', textAlign: 'right', zIndex: 2, right: 0, top: 0 }}
/>
</div>
<div <div
style={{ style={{
position: 'relative', position: 'relative',
@ -1151,7 +1118,12 @@ class ConfigurationManagement extends React.Component {
}} }}
> >
<Form inline> <Form inline>
<Form.Item label="Data ID:"> <Form.Item>
<Button type="primary" onClick={this.chooseEnv.bind(this)}>
{locale.createConfiguration}
</Button>
</Form.Item>
<Form.Item label="Data ID">
<Input <Input
value={this.dataId} value={this.dataId}
htmlType="text" htmlType="text"
@ -1167,7 +1139,7 @@ class ConfigurationManagement extends React.Component {
/> />
</Form.Item> </Form.Item>
<Form.Item label="Group:"> <Form.Item label="Group">
<Select.AutoComplete <Select.AutoComplete
style={{ width: 200 }} style={{ width: 200 }}
size={'medium'} size={'medium'}
@ -1182,7 +1154,7 @@ class ConfigurationManagement extends React.Component {
/> />
</Form.Item> </Form.Item>
<Form.Item label="默认模糊匹配:"> <Form.Item label="默认模糊匹配">
<Switch <Switch
checkedChildren="" checkedChildren=""
unCheckedChildren="" unCheckedChildren=""
@ -1235,10 +1207,7 @@ class ConfigurationManagement extends React.Component {
</Button> </Button>
</Form.Item> </Form.Item>
<br /> <br />
<Form.Item <Form.Item style={this.inApp ? { display: 'none' } : {}} label={locale.application}>
style={this.inApp ? { display: 'none' } : {}}
label={locale.application0}
>
<Input <Input
htmlType={'text'} htmlType={'text'}
placeholder={locale.app1} placeholder={locale.app1}
@ -1269,7 +1238,7 @@ class ConfigurationManagement extends React.Component {
/> />
</Form.Item> </Form.Item>
</Form> </Form>
<div style={{ position: 'absolute', right: 10, top: 4 }}> <div style={{ position: 'absolute', right: 10, top: 0 }}>
<Icon <Icon
type="add" type="add"
size="medium" size="medium"
@ -1286,6 +1255,8 @@ class ConfigurationManagement extends React.Component {
/> />
</div> </div>
</div> </div>
<QueryResult total={configurations.totalCount} />
<Table <Table
className="configuration-table" className="configuration-table"
dataSource={configurations.pageItems} dataSource={configurations.pageItems}

View File

@ -110,10 +110,10 @@ class HistoryDetail extends React.Component {
}; };
const { getOpType } = this; const { getOpType } = this;
return ( return (
<div style={{ padding: 10 }}> <div>
<h1>{locale.historyDetails}</h1> <h1>{locale.historyDetails}</h1>
<Form field={this.field}> <Form field={this.field}>
<Form.Item label="Data ID:" required {...formItemLayout}> <Form.Item label="Data ID" required {...formItemLayout}>
<Input htmlType="text" readOnly {...init('dataId')} /> <Input htmlType="text" readOnly {...init('dataId')} />
<div style={{ marginTop: 10 }}> <div style={{ marginTop: 10 }}>
<a style={{ fontSize: '12px' }} onClick={this.toggleMore.bind(this)}> <a style={{ fontSize: '12px' }} onClick={this.toggleMore.bind(this)}>
@ -122,7 +122,7 @@ class HistoryDetail extends React.Component {
</div> </div>
</Form.Item> </Form.Item>
<div style={{ overflow: 'hidden', height: this.state.showmore ? 'auto' : '0' }}> <div style={{ overflow: 'hidden', height: this.state.showmore ? 'auto' : '0' }}>
<Form.Item label="Group:" required {...formItemLayout}> <Form.Item label="Group" required {...formItemLayout}>
<Input htmlType="text" readOnly {...init('group')} /> <Input htmlType="text" readOnly {...init('group')} />
</Form.Item> </Form.Item>
<Form.Item label={locale.home} {...formItemLayout}> <Form.Item label={locale.home} {...formItemLayout}>

View File

@ -22,6 +22,7 @@ import { getParams, setParams, request } from '@/globalLib';
import './index.scss'; import './index.scss';
import DiffEditorDialog from '../../../components/DiffEditorDialog'; import DiffEditorDialog from '../../../components/DiffEditorDialog';
import QueryResult from '../../../components/QueryResult';
@ConfigProvider.config @ConfigProvider.config
class HistoryRollback extends React.Component { class HistoryRollback extends React.Component {
@ -310,7 +311,7 @@ class HistoryRollback extends React.Component {
const { init } = this.field; const { init } = this.field;
this.init = init; this.init = init;
return ( return (
<div style={{ padding: 10 }}> <div>
<Loading <Loading
shape="flower" shape="flower"
style={{ position: 'relative', width: '100%' }} style={{ position: 'relative', width: '100%' }}
@ -324,7 +325,7 @@ class HistoryRollback extends React.Component {
/> />
<div> <div>
<Form inline field={this.field}> <Form inline field={this.field}>
<Form.Item label="Data ID:" required> <Form.Item label="Data ID" required>
<Select <Select
style={{ width: 200 }} style={{ width: 200 }}
size="medium" size="medium"
@ -396,14 +397,10 @@ class HistoryRollback extends React.Component {
lineHeight: '30px', lineHeight: '30px',
padding: 0, padding: 0,
margin: 0, margin: 0,
paddingLeft: 10,
borderLeft: '3px solid #09c',
fontSize: 16, fontSize: 16,
}} }}
> >
{locale.queryResult} <QueryResult total={this.state.total} />
<strong style={{ fontWeight: 'bold' }}> {this.state.total} </strong>
{locale.articleMeet}
</h3> </h3>
</div> </div>
<div> <div>

View File

@ -29,6 +29,7 @@ import {
Select, Select,
Table, Table,
} from '@alifd/next'; } from '@alifd/next';
import QueryResult from '../../../components/QueryResult';
import './index.scss'; import './index.scss';
@ -198,7 +199,7 @@ class ListeningToQuery extends React.Component {
<Row className="demo-row" style={{ marginBottom: 10, padding: 0 }}> <Row className="demo-row" style={{ marginBottom: 10, padding: 0 }}>
<Col span="24"> <Col span="24">
<Form inline field={this.field}> <Form inline field={this.field}>
<FormItem label={`${locale.queryDimension}:`}> <FormItem label={`${locale.queryDimension}`}>
<Select <Select
dataSource={selectDataSource} dataSource={selectDataSource}
style={{ width: 200 }} style={{ width: 200 }}
@ -210,7 +211,7 @@ class ListeningToQuery extends React.Component {
/> />
</FormItem> </FormItem>
<FormItem <FormItem
label="Data ID:" label="Data ID"
style={{ style={{
display: this.getValue('type') === 0 ? '' : 'none', display: this.getValue('type') === 0 ? '' : 'none',
}} }}
@ -230,7 +231,7 @@ class ListeningToQuery extends React.Component {
/> />
</FormItem> </FormItem>
<FormItem <FormItem
label="Group:" label="Group"
style={{ style={{
display: this.getValue('type') === 0 ? '' : 'none', display: this.getValue('type') === 0 ? '' : 'none',
}} }}
@ -275,21 +276,7 @@ class ListeningToQuery extends React.Component {
</Col> </Col>
</Row> </Row>
<div style={{ position: 'relative' }}> <div style={{ position: 'relative' }}>
<h3 <QueryResult total={this.state.total} />
style={{
height: 28,
lineHeight: '28px',
paddingLeft: 10,
borderLeft: '3px solid #09c',
margin: 0,
marginBottom: 10,
fontSize: 16,
}}
>
{locale.queryResultsQuery}
<strong style={{ fontWeight: 'bold' }}> {this.state.total} </strong>
{locale.articleMeetRequirementsConfiguration}
</h3>
</div> </div>
<Row style={{ padding: 0 }}> <Row style={{ padding: 0 }}>
<Col span="24" style={{ padding: 0 }}> <Col span="24" style={{ padding: 0 }}>

View File

@ -462,7 +462,6 @@ class NewConfig extends React.Component {
const { editorClass } = this.state; const { editorClass } = this.state;
return ( return (
<div style={{ padding: 10 }}>
<Loading <Loading
shape={'flower'} shape={'flower'}
tip={'Loading...'} tip={'Loading...'}
@ -472,7 +471,7 @@ class NewConfig extends React.Component {
> >
<h1>{locale.newListing}</h1> <h1>{locale.newListing}</h1>
<Form className="new-config-form" field={this.field} {...formItemLayout}> <Form className="new-config-form" field={this.field} {...formItemLayout}>
<FormItem label={'Data ID:'} required> <FormItem label={'Data ID'} required>
<Input <Input
{...init('dataId', { {...init('dataId', {
rules: [ rules: [
@ -491,7 +490,7 @@ class NewConfig extends React.Component {
} }
/> />
</FormItem> </FormItem>
<FormItem label={'Group:'} required> <FormItem label={'Group'} required>
<Combobox <Combobox
style={{ width: '100%' }} style={{ width: '100%' }}
size={'large'} size={'large'}
@ -516,10 +515,7 @@ class NewConfig extends React.Component {
hasClear hasClear
/> />
</FormItem> </FormItem>
<FormItem <FormItem label={' '} style={{ display: this.state.showGroupWarning ? 'block' : 'none' }}>
label={' '}
style={{ display: this.state.showGroupWarning ? 'block' : 'none' }}
>
<Message type={'warning'} size={'medium'} animation={false}> <Message type={'warning'} size={'medium'} animation={false}>
{locale.annotation} {locale.annotation}
</Message> </Message>
@ -619,7 +615,6 @@ class NewConfig extends React.Component {
</Form> </Form>
<SuccessDialog ref={this.successDialog} /> <SuccessDialog ref={this.successDialog} />
</Loading> </Loading>
</div>
); );
} }
} }

View File

@ -126,21 +126,21 @@ class NameSpace extends React.Component {
<div> <div>
<div style={{ marginTop: '10px' }}> <div style={{ marginTop: '10px' }}>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>{`${namespaceName}:`}</span> <span style={{ color: '#999', marginRight: 5 }}>{`${namespaceName}`}</span>
<span style={{ color: '#c7254e' }}>{res.namespaceShowName}</span> <span style={{ color: '#c7254e' }}>{res.namespaceShowName}</span>
</p> </p>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>{`${namespaceID}:`}</span> <span style={{ color: '#999', marginRight: 5 }}>{`${namespaceID}`}</span>
<span style={{ color: '#c7254e' }}>{res.namespace}</span> <span style={{ color: '#c7254e' }}>{res.namespace}</span>
</p> </p>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>{`${configuration}:`}</span> <span style={{ color: '#999', marginRight: 5 }}>{`${configuration}`}</span>
<span style={{ color: '#c7254e' }}> <span style={{ color: '#c7254e' }}>
{res.configCount} / {res.quota} {res.configCount} / {res.quota}
</span> </span>
</p> </p>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>{`${description}:`}</span> <span style={{ color: '#999', marginRight: 5 }}>{`${description}`}</span>
<span style={{ color: '#c7254e' }}>{res.namespaceDesc}</span> <span style={{ color: '#c7254e' }}>{res.namespaceDesc}</span>
</p> </p>
</div> </div>
@ -171,11 +171,11 @@ class NameSpace extends React.Component {
<div style={{ marginTop: '-20px' }}> <div style={{ marginTop: '-20px' }}>
<h3>{confirmDelete}</h3> <h3>{confirmDelete}</h3>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>{`${namespaceName}:`}</span> <span style={{ color: '#999', marginRight: 5 }}>{`${namespaceName}`}</span>
<span style={{ color: '#c7254e' }}>{record.namespaceShowName}</span> <span style={{ color: '#c7254e' }}>{record.namespaceShowName}</span>
</p> </p>
<p> <p>
<span style={{ color: '#999', marginRight: 5 }}>{`${namespaceID}:`}</span> <span style={{ color: '#999', marginRight: 5 }}>{`${namespaceID}`}</span>
<span style={{ color: '#c7254e' }}>{record.namespace}</span> <span style={{ color: '#c7254e' }}>{record.namespace}</span>
</p> </p>
</div> </div>
@ -241,7 +241,7 @@ class NameSpace extends React.Component {
); );
if (record.type === 1 || record.type === 0) { if (record.type === 1 || record.type === 0) {
_delinfo = ( _delinfo = (
<span style={{ marginRight: 10, cursor: 'not-allowed' }} disabled> <span style={{ marginRight: 10, cursor: 'not-allowed', color: '#999' }} disabled>
{namespaceDelete} {namespaceDelete}
</span> </span>
); );
@ -255,7 +255,7 @@ class NameSpace extends React.Component {
let _editinfo = <a onClick={this.openToEdit.bind(this, record)}>{edit}</a>; let _editinfo = <a onClick={this.openToEdit.bind(this, record)}>{edit}</a>;
if (record.type === 0 || record.type === 1) { if (record.type === 0 || record.type === 1) {
_editinfo = ( _editinfo = (
<span style={{ marginRight: 10, cursor: 'not-allowed' }} disabled> <span style={{ marginRight: 10, cursor: 'not-allowed', color: '#999' }} disabled>
{edit} {edit}
</span> </span>
); );

View File

@ -125,7 +125,7 @@ class EditClusterDialog extends React.Component {
onClose={() => this.hide()} onClose={() => this.hide()}
> >
<Form {...DIALOG_FORM_LAYOUT}> <Form {...DIALOG_FORM_LAYOUT}>
<Form.Item label={`${checkType}:`}> <Form.Item label={`${checkType}`}>
<Select <Select
className="in-select" className="in-select"
defaultValue={type} defaultValue={type}
@ -136,28 +136,28 @@ class EditClusterDialog extends React.Component {
<Select.Option value="NONE">NONE</Select.Option> <Select.Option value="NONE">NONE</Select.Option>
</Select> </Select>
</Form.Item> </Form.Item>
<Form.Item label={`${checkPort}:`}> <Form.Item label={`${checkPort}`}>
<Input <Input
className="in-text" className="in-text"
value={defaultCheckPort} value={defaultCheckPort}
onChange={defaultCheckPort => this.onChangeCluster({ defaultCheckPort })} onChange={defaultCheckPort => this.onChangeCluster({ defaultCheckPort })}
/> />
</Form.Item> </Form.Item>
<Form.Item label={`${useIpPortCheck}:`}> <Form.Item label={`${useIpPortCheck}`}>
<Switch <Switch
checked={useIPPort4Check} checked={useIPPort4Check}
onChange={useIPPort4Check => this.onChangeCluster({ useIPPort4Check })} onChange={useIPPort4Check => this.onChangeCluster({ useIPPort4Check })}
/> />
</Form.Item> </Form.Item>
{type === 'HTTP' && [ {type === 'HTTP' && [
<Form.Item label={`${checkPath}:`}> <Form.Item label={`${checkPath}`}>
<Input <Input
className="in-text" className="in-text"
value={path} value={path}
onChange={path => healthCheckerChange({ path })} onChange={path => healthCheckerChange({ path })}
/> />
</Form.Item>, </Form.Item>,
<Form.Item label={`${checkHeaders}:`}> <Form.Item label={`${checkHeaders}`}>
<Input <Input
className="in-text" className="in-text"
value={headers} value={headers}
@ -165,7 +165,7 @@ class EditClusterDialog extends React.Component {
/> />
</Form.Item>, </Form.Item>,
]} ]}
<Form.Item label={`${locale.metadata}:`}> <Form.Item label={`${locale.metadata}`}>
<MonacoEditor <MonacoEditor
language="json" language="json"
width={'100%'} width={'100%'}

View File

@ -120,23 +120,23 @@ class EditInstanceDialog extends React.Component {
<Form.Item label="IP:"> <Form.Item label="IP:">
<p>{editInstance.ip}</p> <p>{editInstance.ip}</p>
</Form.Item> </Form.Item>
<Form.Item label={`${locale.port}:`}> <Form.Item label={`${locale.port}`}>
<p>{editInstance.port}</p> <p>{editInstance.port}</p>
</Form.Item> </Form.Item>
<Form.Item label={`${locale.weight}:`}> <Form.Item label={`${locale.weight}`}>
<Input <Input
className="in-text" className="in-text"
value={editInstance.weight} value={editInstance.weight}
onChange={weight => this.onChangeCluster({ weight })} onChange={weight => this.onChangeCluster({ weight })}
/> />
</Form.Item> </Form.Item>
<Form.Item label={`${locale.whetherOnline}:`}> <Form.Item label={`${locale.whetherOnline}`}>
<Switch <Switch
checked={editInstance.enabled} checked={editInstance.enabled}
onChange={enabled => this.onChangeCluster({ enabled })} onChange={enabled => this.onChangeCluster({ enabled })}
/> />
</Form.Item> </Form.Item>
<Form.Item label={`${locale.metadata}:`}> <Form.Item label={`${locale.metadata}`}>
<MonacoEditor <MonacoEditor
language="json" language="json"
width={'100%'} width={'100%'}

View File

@ -173,7 +173,7 @@ class EditServiceDialog extends React.Component {
<Form.Item <Form.Item
required={isCreate} required={isCreate}
{...formItemLayout} {...formItemLayout}
label={`${locale.serviceName}:`} label={`${locale.serviceName}`}
{...errors.name} {...errors.name}
> >
{!isCreate ? ( {!isCreate ? (
@ -185,7 +185,7 @@ class EditServiceDialog extends React.Component {
<Form.Item <Form.Item
required required
{...formItemLayout} {...formItemLayout}
label={`${locale.protectThreshold}:`} label={`${locale.protectThreshold}`}
{...errors.protectThreshold} {...errors.protectThreshold}
> >
<Input <Input
@ -193,7 +193,7 @@ class EditServiceDialog extends React.Component {
onChange={protectThreshold => this.onChangeCluster({ protectThreshold })} onChange={protectThreshold => this.onChangeCluster({ protectThreshold })}
/> />
</Form.Item> </Form.Item>
<Form.Item {...formItemLayout} label={`${locale.groupName}:`}> <Form.Item {...formItemLayout} label={`${locale.groupName}`}>
<Input <Input
defaultValue={groupName} defaultValue={groupName}
placeholder="DEFAULT_GROUP" placeholder="DEFAULT_GROUP"
@ -201,7 +201,7 @@ class EditServiceDialog extends React.Component {
onChange={groupName => this.onChangeCluster({ groupName })} onChange={groupName => this.onChangeCluster({ groupName })}
/> />
</Form.Item> </Form.Item>
<Form.Item label={`${locale.metadata}:`} {...formItemLayout}> <Form.Item label={`${locale.metadata}`} {...formItemLayout}>
<MonacoEditor <MonacoEditor
language="json" language="json"
width={'100%'} width={'100%'}
@ -210,7 +210,7 @@ class EditServiceDialog extends React.Component {
onChange={metadataText => this.onChangeCluster({ metadataText })} onChange={metadataText => this.onChangeCluster({ metadataText })}
/> />
</Form.Item> </Form.Item>
<Form.Item label={`${locale.type}:`} {...formItemLayout}> <Form.Item label={`${locale.type}`} {...formItemLayout}>
<Select <Select
className="full-width" className="full-width"
defaultValue={selector.type} defaultValue={selector.type}
@ -222,7 +222,7 @@ class EditServiceDialog extends React.Component {
</Select> </Select>
</Form.Item> </Form.Item>
{selector.type !== 'none' && ( {selector.type !== 'none' && (
<Form.Item label={`${locale.selector}:`} {...formItemLayout}> <Form.Item label={`${locale.selector}`} {...formItemLayout}>
<Input.TextArea <Input.TextArea
value={selector.expression} value={selector.expression}
onChange={expression => onChange={expression =>

View File

@ -147,16 +147,16 @@ class ServiceDetail extends React.Component {
</h1> </h1>
<Form {...pageFormLayout}> <Form {...pageFormLayout}>
<FormItem label={`${locale.serviceName}:`}> <FormItem label={`${locale.serviceName}`}>
<Input value={service.name} readOnly /> <Input value={service.name} readOnly />
</FormItem> </FormItem>
<FormItem label={`${locale.groupName}:`}> <FormItem label={`${locale.groupName}`}>
<Input value={service.groupName} readOnly /> <Input value={service.groupName} readOnly />
</FormItem> </FormItem>
<FormItem label={`${locale.protectThreshold}:`}> <FormItem label={`${locale.protectThreshold}`}>
<Input value={service.protectThreshold} readOnly /> <Input value={service.protectThreshold} readOnly />
</FormItem> </FormItem>
<FormItem label={`${locale.metadata}:`}> <FormItem label={`${locale.metadata}`}>
<MonacoEditor <MonacoEditor
language="json" language="json"
width={'100%'} width={'100%'}
@ -165,11 +165,11 @@ class ServiceDetail extends React.Component {
options={MONACO_READONLY_OPTIONS} options={MONACO_READONLY_OPTIONS}
/> />
</FormItem> </FormItem>
<FormItem label={`${locale.type}:`}> <FormItem label={`${locale.type}`}>
<Input value={selector.type} readOnly /> <Input value={selector.type} readOnly />
</FormItem> </FormItem>
{selector.type !== 'none' && ( {selector.type !== 'none' && (
<FormItem label={`${locale.selector}:`}> <FormItem label={`${locale.selector}`}>
<Input value={selector.expression} readOnly /> <Input value={selector.expression} readOnly />
</FormItem> </FormItem>
)} )}
@ -178,7 +178,7 @@ class ServiceDetail extends React.Component {
<Card <Card
key={cluster.name} key={cluster.name}
className="cluster-card" className="cluster-card"
title={`${locale.cluster}:`} title={`${locale.cluster}`}
subTitle={cluster.name} subTitle={cluster.name}
contentHeight="auto" contentHeight="auto"
extra={ extra={

View File

@ -35,6 +35,7 @@ import { generateUrl } from '../../../utils/nacosutil';
import RegionGroup from '../../../components/RegionGroup'; import RegionGroup from '../../../components/RegionGroup';
import EditServiceDialog from '../ServiceDetail/EditServiceDialog'; import EditServiceDialog from '../ServiceDetail/EditServiceDialog';
import ShowServiceCodeing from 'components/ShowCodeing/ShowServiceCodeing'; import ShowServiceCodeing from 'components/ShowCodeing/ShowServiceCodeing';
import PageTitle from '../../../components/PageTitle';
import './ServiceList.scss'; import './ServiceList.scss';
import { GLOBAL_PAGE_SIZE_LIST } from '../../../constants'; import { GLOBAL_PAGE_SIZE_LIST } from '../../../constants';
@ -202,18 +203,11 @@ class ServiceList extends React.Component {
return ( return (
<div className="main-container service-management"> <div className="main-container service-management">
<div style={{ marginTop: -15 }}> <PageTitle title={serviceList} desc={nowNamespaceId} nameSpace />
<RegionGroup <RegionGroup
setNowNameSpace={this.setNowNameSpace} setNowNameSpace={this.setNowNameSpace}
namespaceCallBack={this.getQueryLater} namespaceCallBack={this.getQueryLater}
/> />
</div>
<h3 className="page-title">
<span className="title-item">{serviceList}</span>
<span className="title-item">|</span>
<span className="title-item">{nowNamespaceName}</span>
<span className="title-item">{nowNamespaceId}</span>
</h3>
<Row <Row
className="demo-row" className="demo-row"
style={{ style={{
@ -245,7 +239,7 @@ class ServiceList extends React.Component {
} }
/> />
</FormItem> </FormItem>
<Form.Item label={`${hiddenEmptyService}:`}> <Form.Item label={`${hiddenEmptyService}`}>
<Switch <Switch
checked={hasIpCount} checked={hasIpCount}
onChange={hasIpCount => onChange={hasIpCount =>
@ -266,7 +260,7 @@ class ServiceList extends React.Component {
</Button> </Button>
</FormItem> </FormItem>
<FormItem label="" style={{ float: 'right' }}> <FormItem label="" style={{ float: 'right' }}>
<Button type="secondary" onClick={() => this.openEditServiceDialog()}> <Button type="primary" onClick={() => this.openEditServiceDialog()}>
{create} {create}
</Button> </Button>
</FormItem> </FormItem>

View File

@ -32,6 +32,7 @@ import { connect } from 'react-redux';
import { getSubscribers, removeSubscribers } from '../../../reducers/subscribers'; import { getSubscribers, removeSubscribers } from '../../../reducers/subscribers';
import { getParams } from '../../../globalLib'; import { getParams } from '../../../globalLib';
import RegionGroup from '../../../components/RegionGroup'; import RegionGroup from '../../../components/RegionGroup';
import PageTitle from '../../../components/PageTitle';
import './SubscriberList.scss'; import './SubscriberList.scss';
@ -135,18 +136,11 @@ class SubscriberList extends React.Component {
tip="Loading..." tip="Loading..."
color="#333" color="#333"
> >
<div style={{ marginTop: -15 }}> <PageTitle title={subscriberList} desc={nowNamespaceId} nameSpace />
<RegionGroup <RegionGroup
setNowNameSpace={this.setNowNameSpace} setNowNameSpace={this.setNowNameSpace}
namespaceCallBack={this.switchNamespace} namespaceCallBack={this.switchNamespace}
/> />
</div>
<h3 className="page-title">
<span className="title-item">{subscriberList}</span>
<span className="title-item">|</span>
<span className="title-item">{nowNamespaceName}</span>
<span className="title-item">{nowNamespaceId}</span>
</h3>
<Row <Row
className="demo-row" className="demo-row"
style={{ style={{

View File

@ -119,7 +119,7 @@ module.exports = function() {
.click(0); .click(0);
}); });
it('click: Data ID: ( #dataId, 154, 20, 0 )', async function() { it('click: Data ID ( #dataId, 154, 20, 0 )', async function() {
await driver await driver
.sleep(300) .sleep(300)
.wait('#dataId', 30000) .wait('#dataId', 30000)

File diff suppressed because one or more lines are too long

View File

@ -35,7 +35,7 @@
<link rel="stylesheet" type="text/css" href="console-ui/public/css/icon.css"> <link rel="stylesheet" type="text/css" href="console-ui/public/css/icon.css">
<link rel="stylesheet" type="text/css" href="console-ui/public/css/font-awesome.css"> <link rel="stylesheet" type="text/css" href="console-ui/public/css/font-awesome.css">
<!-- 第三方css结束 --> <!-- 第三方css结束 -->
<link href="./css/main.css?04818f5ec59842280923" rel="stylesheet"></head> <link href="./css/main.css?b252ea947e109a27a7a1" rel="stylesheet"></head>
<body> <body>
<div id="root" style="overflow:hidden"></div> <div id="root" style="overflow:hidden"></div>
@ -56,6 +56,6 @@
<script src="console-ui/public/js/merge.js"></script> <script src="console-ui/public/js/merge.js"></script>
<script src="console-ui/public/js/loader.js"></script> <script src="console-ui/public/js/loader.js"></script>
<!-- 第三方js结束 --> <!-- 第三方js结束 -->
<script type="text/javascript" src="./js/main.js?04818f5ec59842280923"></script></body> <script type="text/javascript" src="./js/main.js?b252ea947e109a27a7a1"></script></body>
</html> </html>

File diff suppressed because one or more lines are too long