diff --git a/console/src/main/resources/static/console-fe/build/webpack.dev.conf.js b/console/src/main/resources/static/console-fe/build/webpack.dev.conf.js index 210e08ab3..ddc93bbdf 100644 --- a/console/src/main/resources/static/console-fe/build/webpack.dev.conf.js +++ b/console/src/main/resources/static/console-fe/build/webpack.dev.conf.js @@ -26,7 +26,7 @@ module.exports = Object.assign({}, base, { context: ['/'], changeOrigin: true, secure: false, - target: 'http://localhost:8848', + target: 'http://11.239.112.161:8848', pathRewrite: {'^/v1' : '/nacos/v1'} }], disableHostCheck: true, diff --git a/console/src/main/resources/static/console-fe/package.json b/console/src/main/resources/static/console-fe/package.json index 778ddac62..31fc4a2f7 100644 --- a/console/src/main/resources/static/console-fe/package.json +++ b/console/src/main/resources/static/console-fe/package.json @@ -27,55 +27,55 @@ }, "devDependencies": { "@alifd/next-theme-loader": "^1.3.1", - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/plugin-proposal-decorators": "^7.2.3", - "@babel/preset-env": "^7.2.3", - "@babel/runtime": "^7.2.0", + "@babel/cli": "^7.7.7", + "@babel/core": "^7.7.7", + "@babel/plugin-proposal-decorators": "^7.7.4", + "@babel/preset-env": "^7.7.7", + "@babel/runtime": "^7.7.7", "babel-eslint": "^10.0.1", "babel-loader": "^8.0.4", - "babel-plugin-import": "^1.12.0", - "babel-preset-react-app": "^6.1.0", - "clean-webpack-plugin": "^0.1.19", - "copy-webpack-plugin": "^4.6.0", - "cross-env": "^5.2.0", - "css-loader": "^2.0.2", - "eslint": "^5.11.0", - "eslint-config-ali": "^4.1.0", - "eslint-config-prettier": "^3.3.0", - "eslint-loader": "^2.1.1", + "babel-plugin-import": "^1.13.0", + "babel-preset-react-app": "^9.1.0", + "clean-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^5.1.1 ", + "cross-env": "^6.0.3", + "css-loader": "^3.4.0", + "eslint": "^6.8.0", + "eslint-config-ali": "^9.0.2", + "eslint-config-prettier": "^6.8.0", + "eslint-loader": "^3.0.3", "eslint-plugin-import": "^2.14.0", "eslint-plugin-prettier": "^3.0.0", - "eslint-plugin-react": "^7.11.1", - "file-loader": "^2.0.0", + "eslint-plugin-react": "^7.17.0", + "file-loader": "^5.0.2", "html-webpack-plugin": "^3.2.0", - "husky": "^1.1.4", - "lint-staged": "^8.0.4", - "mini-css-extract-plugin": "^0.5.0", - "node-sass": "^4.11.0", - "optimize-css-assets-webpack-plugin": "^5.0.1", - "prettier": "1.15.2", - "sass-loader": "^7.1.0", - "style-loader": "^0.23.1", - "uglifyjs-webpack-plugin": "^2.1.0", - "url-loader": "^1.1.2", - "webpack": "^4.28.2", - "webpack-cli": "^3.1.2", - "webpack-dev-server": "^3.1.13" + "husky": "^3.1.0", + "lint-staged": "^9.5.0", + "mini-css-extract-plugin": "^0.9.0", + "node-sass": "^4.13.0", + "optimize-css-assets-webpack-plugin": "^5.0.3", + "prettier": "1.19.1", + "sass-loader": "^8.0.0", + "style-loader": "^1.1.2", + "uglifyjs-webpack-plugin": "^2.2.0", + "url-loader": "^3.0.0", + "webpack": "^4.41.4", + "webpack-cli": "^3.3.10", + "webpack-dev-server": "^3.10.1" }, "dependencies": { - "@alifd/next": "^1.15.12", + "@alifd/next": "^1.17.4", "axios": "^0.18.0", "jquery": "^3.3.1", "moment": "^2.23.0", "prop-types": "^15.6.2", - "react": "^16.7.0", - "react-dom": "^16.7.0", - "react-redux": "^5.1.1", - "react-router": "^4.3.1", - "react-router-dom": "^4.3.1", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "react-redux": "^7.1.3", + "react-router": "^5.1.2", + "react-router-dom": "^5.1.2", "react-router-redux": "^4.0.8", - "redux": "^4.0.1", + "redux": "^4.0.5", "redux-thunk": "^2.3.0", "yamljs": "^0.3.0" } diff --git a/console/src/main/resources/static/console-fe/src/constants.js b/console/src/main/resources/static/console-fe/src/constants.js index 5b67ffe4d..e4ad885c1 100644 --- a/console/src/main/resources/static/console-fe/src/constants.js +++ b/console/src/main/resources/static/console-fe/src/constants.js @@ -23,3 +23,9 @@ export const GET_STATE = 'GET_STATE'; export const GET_SUBSCRIBERS = 'GET_SUBSCRIBERS'; export const REMOVE_SUBSCRIBERS = 'REMOVE_SUBSCRIBERS'; + +export const UPDATE_USER = 'UPDATE_USER'; +export const SIGN_IN = 'SIGN_IN'; +export const USER_LIST = 'USER_LIST'; + +export const ROLE_LIST = 'ROLE_LIST'; diff --git a/console/src/main/resources/static/console-fe/src/globalLib.js b/console/src/main/resources/static/console-fe/src/globalLib.js index 1eb23c06a..195db5f0e 100644 --- a/console/src/main/resources/static/console-fe/src/globalLib.js +++ b/console/src/main/resources/static/console-fe/src/globalLib.js @@ -12,9 +12,7 @@ */ import projectConfig from './config'; -import moment from 'moment'; import $ from 'jquery'; -import i18DocObj from './i18ndoc'; const global = window; @@ -205,120 +203,6 @@ const nacosUtils = (function(_global) { }; })(global); -const aliwareIntl = (function(_global) { - /** - * 国际化构造方法 - * @param {Object} options 配置信息 - */ - function AliwareI18n(options) { - // let currentLocal = options.currentLocal || navigator.language || navigator.userLanguage; - - const nowData = options.locals; - this.nowData = nowData; - this.setMomentLocale(this.currentLanguageCode); - } - - let aliwareLocal = aliwareGetCookieByKeyName('aliyun_lang') || 'zh'; - let aliwareLocalSite = aliwareGetCookieByKeyName('aliyun_country') || 'cn'; - aliwareLocal = aliwareLocal.toLowerCase(); - aliwareLocalSite = aliwareLocalSite.toLowerCase(); - // 当前语言 - AliwareI18n.prototype.currentLocal = aliwareLocal; - // 当前地区 - AliwareI18n.prototype.currentSite = aliwareLocalSite; - // 当前语言-地区 - AliwareI18n.prototype.currentLanguageCode = - aliwareGetCookieByKeyName('docsite_language') || `${aliwareLocal}-${aliwareLocalSite}`; - /** - * 通过key获取对应国际化文案 - * @param {String} key 国际化key - */ - AliwareI18n.prototype.get = function(key) { - return this.nowData[key]; - }; - /** - * 修改国际化文案数据 - * @param {String} local 语言信息 - */ - AliwareI18n.prototype.changeLanguage = function(local) { - this.nowData = i18DocObj[local] || {}; - }; - /** - * 数字国际化 - * @param {Number} num 数字 - */ - AliwareI18n.prototype.intlNumberFormat = function(num) { - if (typeof Intl !== 'object' || typeof Intl.NumberFormat !== 'function') { - return num; - } - try { - return new Intl.NumberFormat(this.currentLanguageCode).format(num || 0); - } catch (error) { - return num; - } - }; - /** - * 时间戳格式化 - * @param {Number} num 时间戳 - * @param {Object} initOption 配置信息 - */ - AliwareI18n.prototype.intlTimeFormat = function(num = Date.now(), initOption = {}) { - try { - const date = Object.prototype.toString.call(num) === '[object Date]' ? num : new Date(num); - const options = Object.assign( - {}, - { - // weekday: "short", - hour12: false, - year: 'numeric', - month: 'short', - day: 'numeric', - hour: 'numeric', - minute: 'numeric', - second: 'numeric', - }, - initOption - ); - return date.toLocaleDateString(this.currentLanguageCode, options); - } catch (error) { - return typeof moment === 'function' ? moment(num).format() : '--'; - } - }; - /** - * 获取当前时间格式 - * @param {String} language 语言信息: zh/en - */ - AliwareI18n.prototype.getIntlTimeFormat = function(_language) { - const language = _language || aliwareLocal; - const langObj = { - zh: 'YYYY年M月D日 HH:mm:ss', - en: 'MMM D, YYYY, h:mm:ss A', - default: 'YYYY-MM-DD HH:mm:ss', - }; - return langObj[language] ? langObj[language] : langObj.default; - }; - /** - * 设置moment的locale - * @param {String} languageCode 语言信息: zh-ch/en-us - */ - AliwareI18n.prototype.setMomentLocale = function(languageCode) { - if (Object.prototype.toString.call(moment) === '[object Function]') { - moment.locale(languageCode || this.currentLanguageCode); - return true; - } - return false; - }; - - return new AliwareI18n({ - currentLocal: `${aliwareLocal}`, - locals: - i18DocObj[AliwareI18n.prototype.currentLanguageCode] || - i18DocObj['en-us'] || - i18DocObj['zh-cn'] || - {}, - }); -})(global); - /** * 获取url中的参数 */ @@ -645,7 +529,6 @@ export { nacosEvent, nacosUtils, aliwareGetCookieByKeyName, - aliwareIntl, getParams, setParam, setParams, diff --git a/console/src/main/resources/static/console-fe/src/i18ndoc.js b/console/src/main/resources/static/console-fe/src/i18ndoc.js deleted file mode 100644 index 4f6d4b373..000000000 --- a/console/src/main/resources/static/console-fe/src/i18ndoc.js +++ /dev/null @@ -1,1167 +0,0 @@ -/* - * 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. - */ -module.exports = { - 'zh-cn': { - 'com.alibaba.nacos.layout.noenv.nacosversion': '0.8.0', - 'com.alibaba.nacos.page.configurationManagementVirtual': '配置管理', - 'com.alibaba.nacos.page.serviceManagementVirtual': '服务管理', - 'nacos.component.ExportDialog.tags2': '标签:', - historyRollback: '历史版本', - 'com.alibaba.nacos.component.MiddleWareEnv.Spas_dedicated': 'Spas专用', - 'com.alibaba.nacos.page.pushTrajectory.track': '条轨迹。', - 'com.alibaba.nacos.component.NameSpaceList.Prompt': '提示', - 'nacos.page.namespace.namespace_ID': '命名空间ID:', - 'com.alibaba.nacos.page.historyrollback.query': '查询', - 'com.alibaba.nacos.page.configdetail.configuration_details': '配置详情', - 'com.alibaba.nacos.component.AddGroup.a_new_group': '新建Group', - 'com.alibaba.nacos.component.DiffEditorDialog.contents': '内容比较', - namespace: '命名空间', - 'com.alibaba.nacos.page.historyRollback.queryresult': '查询结果:共查询到', - 'com.alibaba.nacos.page.pushTrajectory.determine': '查询', - 'com.alibaba.nacos.component.NameSpaceList.online_customer_support': '在线客服支持:', - 'com.alibaba.nacos.page.historyRollback.dataid': '请输入Data ID', - 'nacos.page.configurationManagement.Please_enter_tag': '请输入标签', - 'nacos.page.namespace.namespace_number': '命名空间ID', - 'nacos.component.NameSpaceList.Announcement_nodejs_version_is_developed,supports_a_custom_message': - '公告:Node.js版上线。支持定制消息。', - 'com.alibaba.nacos.page.configRollback.retracted': '收起', - 'com.alibaba.nacos.component.NewDatePicker.to_cancel_the': '确定', - 'com.alibaba.nacos.component.MiddleWareEnv.daily_units': '日常单元', - 'nacos.page.configdetail.Open0': '开', - 'com.alibaba.nacos.page.configeditor.vdchart': '请勿输入非法字符', - 'com.alibaba.nacos.component.EditorNameSpace.prompt': '提示', - 'com.alibaba.nacos.component.DiffEditorDialog.confirm_that_the': '确认发布', - 'com.alibaba.nacos.component.NewDatePicker.': '最近', - 'com.alibaba.nacos.pubshow': '子账号没有权限,请联系主账号负责人RAM上授权', - 'com.alibaba.nacos.page.configeditor.Home_application:': 'Group不能为空', - 'nacos.page.configdetail.Tags': '标签:', - 'com.alibaba.nacos.page.configurationManagement.configuration_management': '配置列表', - 'nacos.page.configurationManagement.Tags': '标签:', - 'com.alibaba.nacos.page.newconfig.new_listing': '新建配置', - 'com.alibaba.nacos.page.configsync.target': '目标地域:', - 'nacos.component.ExportDialog.configuration_number6': '配置数量:', - 'nacos.component.validateDialog.title': '账号安全验证', - 'nacos.page.configurationManagement.,_wherein': ',其中', - 'com.alibaba.nacos.component.MiddleWareEnv.switch_environment': '切换环境', - 'com.alibaba.nacos.page.configsync.return': '返回', - newconfig: '新建配置', - 'com.alibaba.nacos.page.configeditor.': '返回', - 'com.alibaba.nacos.page.configsync.sync': '同步', - 'com.alibaba.nacos.component.NewDatePicker.24_hours': '24小时', - 'com.alibaba.nacos.page.listAllEnvironmental.environment_name': '环境名称', - 'nacos.component.validateDialog.Click_to_get_verification_code': '点击获取验证码', - 'com.alibaba.nacos.page.consistencyEfficacy.environment_marked': '环境标示', - 'com.alibaba.nacos.component.NameSpaceList.Announcement_nodejs_version_is_developed,supports_a_custom_message': - '公告:Node.js版上线,支持定制消息。', - 'nacos.page.configurationManagement.process_is_successful,_the_cloned': '处理成功,克隆了', - 'com.alibaba.nacos.page.configurationManagement.the_sample_code': '示例代码', - 'nacos.component.CloneDialog.|_the_selected_entry4': '| 选中的条目', - confirm: '确定', - 'com.alibaba.nacos.page.configRollback.delete': '删除', - 'com.alibaba.nacos.page.configsync.belongs_to_the_environment': '所属地域:', - 'com.alibaba.nacos.component.ShowCodeing.loading': '加载中...', - 'nacos.page.configurationManagement.import_failed': '导入失败', - 'com.alibaba.nacos.page.configurationManagement.clickfordetail': '点击了解SDK详细示例', - 'nacos.page.configurationManagement.configuration_management8': '配置管理', - 'com.alibaba.nacos.page.consistencyEfficacy.operation': '操作', - 'com.alibaba.nacos.page.environmentalManagement.view_environment_IP': '查看环境IP', - 'com.alibaba.nacos.page.configeditor.configuration_formatpre': '默认不要勾选。', - 'nacos.page.configurationManagement.Delete_failed': '删除失败', - 'com.alibaba.nacos.page.environmentalManagement.environment_ip': '环境IP', - 'com.alibaba.nacos.page.newconfig.Data_ID_length': '收起', - 'nacos.page.configdetail.Data_encryption0': '数据加密', - 'nacos.component.CloneDialog.get_the_namespace_failed': '获取命名空间失败', - 'nacos.component.ImportDialog.Upload_File3': '上传文件', - 'com.alibaba.nacos.page.configdetail.home': '归属应用:', - 'com.alibaba.nacos.page.environmentalManagement.view': '查看', - 'nacos.page.configurationManagement.configuration_item?': '条配置项?', - 'com.alibaba.nacos.page.environmentalManagement.environment_name': '环境名称', - 'nacos.page.namespace.AccessKey_recommended0': 'AccessKey(推荐):', - 'nacos.component.validateDialog.remark': '提示: 验证码会通过短信发送到您绑定的手机号。', - 'com.alibaba.nacos.page.consistencyEfficacy.reset': '重置', - 'com.alibaba.nacos.page.newconfig.group_placeholder': '请输入Group名称', - 'com.alibaba.nacos.page.configdetail.belongs_to_the_environment': '地域:', - 'com.alibaba.nacos.page.listeningToQuery.failure': '失败', - 'hanxie.show': '测试', - 'com.alibaba.nacos.page.newconfig.esc_exit': '发布', - pubnodata: '没有数据', - 'nacos.page.configurationManagement.ACM_dedicated_AccessKey_will_the_waste,_does_not_recommend_t': - 'ACM专用AccessKey(即将废弃,不建议使用):', - 'com.alibaba.nacos.page.newconfig.configuration_format': '配置内容:', - configurationManagement: '配置列表', - 'nacos.component.ShowCodeing.,_6000);_System.out.println(content);_//_初始化的时候,给配置添加监听,配置变更会回调通知_C': - '", 6000);\t\t\tSystem.out.println(content);\t\t\t// 初始化的时候,给配置添加监听,配置变更会回调通知\t\t\tConfigService.addListener("', - 'com.alibaba.nacos.component.NewDatePicker.custom': '时间范围不能超过45天', - 'com.alibaba.nacos.page.historyDetail.recipient_from': '收起', - 'com.alibaba.nacos.page.configdetail.recipient_from': '收起', - 'nacos.component.validateDialog.Please_fill_out_the_verification_code': '输入验证码:', - 'nacos.page.newconfig.Note_You_are_to_be_a_custom_packet_the_new_configuration,_make_sure_that_the_client_use_the_Pandora_version_higher_than_3._4._0,_otherwise_it_may_read_less_than_the_configuration.0': - '注:您正在往一个自定义分组新增配置,请确保客户端使用的Pandora版本高于3.4.0,否则可能读取不到该配置。', - 'com.alibaba.nacos.page.listeningToQuery.please_input_group': '请输入Group', - 'com.alibaba.nacos.component.NewDatePicker.7_day': '7天', - 'nacos.component.ShowCodeing.-Dproject.name=acmtest_-Dspas.identity=CUserswater.lyl.spas_keyacmt': - '-Dproject.name=acmtest -Dspas.identity=C:Userswater.lyl.spas_keyacmtest\t\t\t * 在本地的acmtest文件中填写accessKey/secretKey,格式如下\t\t\t * accessKey=', - 'nacos.component.DeleteDialog.deletetitle': '删除配置', - 'com.alibaba.nacos.page.pushTrajectory.Push_the_trajectory': '推送轨迹', - 'com.alibaba.nacos.page.configeditor.release': '发布Beta', - 'com.alibaba.nacos.page.configeditor.Esc_exit': '按F1显示全屏', - 'com.alibaba.nacos.page.configsync.home': '归属应用:', - minute: '分钟', - 'com.alibaba.nacos.layout.noenv.app_configuration_management_ACM': 'NACOS', - 'com.alibaba.nacos.page.configRollback.home': '归属应用:', - 'nacos.page.configurationManagement.no_longer_display4': '不再显示:', - 'nacos.page.configurationManagement.open_Bulletin_Board7': '打开公告栏', - 'nacos.page.configurationManagement.SecretKey_recommended4': 'SecretKey(推荐):', - 'com.alibaba.nacos.page.pushTrajectory.configget': '配置推送 or 主动获取', - 'com.alibaba.nacos.page.configRollback.action_type': '操作类型:', - 'nacos.component.CloneDialog.target_space': '目标空间:', - 'com.alibaba.nacos.component.DiffEditorDialog.original_value': '原始值', - 'com.alibaba.nacos.page.configurationManagement.environment': '地域:', - 'nacos.page.configdetail.Description': '描述:', - 'com.alibaba.nacos.page.pushTrajectory.Data_Id_can_not_be_empty': 'Data ID不能为空', - 'com.alibaba.nacos.page.listAllEnvironmental.Into_the': '进入', - 'com.alibaba.nacos.page.listeningToQuery._Push_state': '推送状态', - 'nacos.component.CloneDialog.configuration_cloning(': '配置克隆(', - 'com.alibaba.nacos.page.configurationManagement.new_listing': '新建配置', - 'nacos.component.ExportDialog.source_space5': '源空间:', - 'nacos.component.ShowCodeing.*///_ConfigService.init();_//_主动获取配置_String_content_=_ConfigService.getConfig(': - '*///\t\t\tConfigService.init();\t\t\t\t\t\t// 主动获取配置\t\t\tString content = ConfigService.getConfig("', - cancel: '取消', - 'com.alibaba.nacos.component.MiddleWareEnv.online': '线上', - 'com.alibaba.nacos.page.historyRollback.rollback': '回滚', - 'com.alibaba.nacos.page.historyRollback.last_update_time': '最后更新时间', - 'com.alibaba.nacos.page.pushTrajectory.please_enter': '请输入查询IP', - 'com.alibaba.nacos.page.historyDetail.configure_content': '配置内容:', - 'com.alibaba.nacos.page.consistencyEfficacy.environment_name': '环境名', - 'nacos.component.ShowCodeing.-Dproject.name=acmtest_-Dspas.identity=CUserswater.lyl.spas_keyacmtest_*_在本地的acmtest文件中填写accessKey/secretKey,格式如下_*_accessKey=': - '-Dproject.name=acmtest -Dspas.identity=C:Userswater.lyl.spas_keyacmtest\t\t\t * 在本地的acmtest文件中填写accessKey/secretKey,格式如下\t\t\t * accessKey=', - 'nacos.page.configurationManagement.configuration_export9': '配置导出', - 'nacos.page.namespace.note_ACM_is_dedicated_AK/SK_is_mainly_used_for_some_of_the_compatibility_scenario,_it_is_recommended_to_Unified_the_use_of_Ali_cloud_AK/SK.5': - '注:ACM专用AK/SK主要用于一些兼容性场景。建议统一采用阿里云AK/SK。', - 'com.alibaba.nacos.page.namespace.add': '新建命名空间', - 'com.alibaba.nacos.page.configsync.sync_configuration_main': '同步配置', - 'nacos.page.configeditor.Tags': '标签:', - dateinfo1: '结束时间必须大于开始时间', - 'com.alibaba.nacos.service.fill_the_code': '请填写验证码', - 'nacos.page.newconfig.Description': '描述:', - 'nacos.component.ImportDialog.target_space5': '目标空间:', - configsync: '同步配置', - 'nacos.component.CloneDialog.skip': '跳过', - 'com.alibaba.nacos.page.configurationManagement.click_to_learn_Group': '点击了解Group', - 'com.alibaba.nacos.page.newconfig.the_more_advanced': 'Group不能为空', - 'nacos.page.namespace.ACM_special_SecretKey_will_be_abandoned,_not_recommended_for_use4': - 'ACM专用SecretKey(即将废弃,不建议使用):', - 'com.alibaba.nacos.page.namespace.public': 'public(保留空间)', - 'com.alibaba.nacos.page.configsync.error': '错误', - 'nacos.page.namespace.AccessKey_recommended1': 'AccessKey(开发环境推荐):', - 'com.alibaba.nacos.page.pushTrajectory.configuration': '配置', - 'com.alibaba.nacos.page.configeditor.toedit': '编辑配置', - 'com.alibaba.nacos.component.NewDatePicker.12_hours': '12小时', - 'com.alibaba.nacos.page.configsync.for_more_advanced_options': '更多高级选项', - 'nacos.page.configurationManagement.AccessKey_recommended3': 'AccessKey(开发环境推荐):', - 'nacos.page.configurationManagement.note_ACM_is_dedicated_AK/SK_is_mainly_used_for_some_of_the_c': - '注:ACM 专用AK/SK主要用于一些兼容性场景,推荐您统一采用阿里云AK/SK。', - 'com.alibaba.nacos.page.newconfig.the_home_application': '目标地域:', - 'com.alibaba.nacos.page.configeditor.official': '正式', - 'nacos.component.validateDialog.phoneNumber': '手机号码:', - 'nacos.page.namespace.SecretKey_recommended2': 'SecretKey(推荐):', - 'com.alibaba.nacos.page.namespace.delete': '删除', - 'com.alibaba.nacos.component.NewDatePicker.60_-_': '60分钟', - 'com.alibaba.nacos.page.configsync.retracted': '收起', - 'nacos.page.configdetail.off1': '关', - 'com.alibaba.nacos.page.historyDetail.delete': '删除', - 'nacos.page.configurationManagement.items_for': '项为', - 'nacos.component.CloneDialog.the_same_configuration': '相同配置:', - 'com.alibaba.nacos.component.NewNameSpace.name': '命名空间名:', - 'com.alibaba.nacos.component.MiddleWareEnv.line': '线上/', - 'nacos.page.configurationManagement.batch_management': '批量管理', - 'com.alibaba.nacos.page.configeditor.configure_contents_of': '配置格式:', - 'com.alibaba.nacos.component.NewNameSpace.loading': '加载中...', - 'com.alibaba.nacos.component.MiddleWareEnv.maletest': '阳中测试', - 'nacos.page.configurationManagement.clone': '克隆', - 'nacos.page.configurationManagement.a_ACM_front-end_monitoring_questionnaire,_the_time_limit_to_': - '答 ACM 前端监控调查问卷,限时领取阿里云代金券\t 详情猛戳:', - 'nacos.page.configurationManagement.HOME_Application': '归属应用:', - 'com.alibaba.nacos.page.newconfig.publish_failed': '发布失败。请检查参数是否正确。', - 'com.alibaba.nacos.page.historyDetail.belongs_to_the_environment': '所属地域:', - 'com.alibaba.nacos.page.configRollback.configuration_rollback': '配置回滚', - 'com.alibaba.nacos.page.configurationManagement.edit': '编辑', - 'nacos.component.ImportDialog.skip1': '跳过', - 'com.alibaba.nacos.page.pushTrajectory.Group_Id_cannot_be_empty': 'Group不能为空', - 'nacos.page.configurationManagement.successful_entry': '成功的条目:', - 'com.alibaba.nacos.component.NewNameSpace.cancel': '取消', - 'nacos.page.newconfig.Open0': '开', - 'com.alibaba.nacos.page.configRollback.environment': '地域:', - 'com.alibaba.nacos.page.pushTrajectory.The_new_configuration_value_persistent': - '新配置值持久化', - 'nacos.component.CloneDialog.tags': '标签:', - 'com.alibaba.nacos.page.pushTrajectory.interval:': '时间区间:', - 'nacos.component.DeleteDialog.determine': '确定', - 'nacos.component.validateDialog.verification_code_error': '验证码错误', - 'com.alibaba.nacos.page.configdetail.return': '返回', - 'com.alibaba.nacos.page.listAllEnvironmental.operation': '操作', - 'com.alibaba.nacos.page.newconfig.stop_fails': '停止Beta发布失败。', - 'com.alibaba.nacos.component.EditorNameSpace.confirm_modify': '编辑命名空间', - 'com.alibaba.nacos.component.EditorNameSpace.namespace': '命名空间不能为空', - 'nacos.page.namespace.note_ACM_is_dedicated_AK/SK_is_mainly_used_for_some_of_the_compatibility_s': - '注:ACM 专用AK/SK主要用于一些兼容性场景,推荐您统一采用阿里云AK/SK。', - 'com.alibaba.nacos.component.MiddleWareEnv.daily_stable': '日常稳定', - 'com.alibaba.nacos.page.pushTrajectory.used': '新配置生效', - 'com.alibaba.nacos.page.configRollback.determine': '确定要', - 'nacos.component.NameSpaceList.Quick_to_learn0': '学习路径', - 'nacos.page.namespace.click_on_the_obtain_of1': '点击获取 》', - 'com.alibaba.nacos.page.newconfig': 'Data ID 不能为空', - 'nacos.page.configurationManagement.export_check_failed': '导出检查失败', - 'nacos.component.ImportDialog.file_upload_directly_after_importing_the_configuration,_please_be_sure_to_exercise_caution7': - '文件上传后将直接导入配置,请务必谨慎操作', - 'com.alibaba.nacos.page.namespace.prompt': '提示', - 'nacos.page.namespace.sure_you_want_to_delete_the_following_namespaces?': - '确定要删除以下命名空间吗?', - 'nacos.component.validateDialog.confirm': '确定', - 'nacos.page.configurationManagement.please_input_the_application_name': '请输入应用名', - 'nacos.page.configurationManagement.please_select_the_required_delete_the_configuration_item': - '请选择需要删除的配置项', - 'com.alibaba.nacos.component.MiddleWareEnv.international': '国际化', - 'com.alibaba.nacos.component.NewDatePicker.to': '查询范围:', - 'com.alibaba.nacos.page.configeditor.recipient_from': 'Data ID不能为空', - 'nacos.page.configurationManagement.whether_to_delete_the_selected': '是否删除已选择的', - 'com.alibaba.nacos.component.MiddleWareEnv.daily_environment_packet': '日常环境分组', - 'com.alibaba.nacos.page.configeditor.toedittitle': '编辑配置', - 'nacos.page.configeditor.Description': '描述:', - day: '天', - 'com.alibaba.nacos.page.listAllEnvironmental.view_environment_IP': '查看环境IP', - 'com.alibaba.nacos.page.configurationManagement.delete': '删除', - 'cspupcloud.page.historyRollback.Retained_for_30_days': '保留30天', - 'com.alibaba.nacos.page.configeditor.beta_release:': '目标地域:', - 'nacos.page.pushTrajectory.Please_enter_the_user_IP0': '请输入用户IP', - 'com.alibaba.nacos.component.NewNameSpace.confirm': '确定', - 'nacos.component.DeleteDialog.deleted_successfully_configured': '删除配置成功', - 'nacos.component.ShowCodeing.,_new_PropertiesListener()_{_@Override_public_void_innerReceive(Pro': - '", new PropertiesListener() {\t\t\t\t\t\t\t\t@Override\t\t\t\tpublic void innerReceive(Properties properties) {\t\t\t\t\t// TODO Auto-generated method stub\t\t\t\t\tacmProperties = properties;\t\t\t\t\tSystem.out.println(properties);\t\t\t\t}\t\t\t});\t\t\t\t\t\t**/\t\t\t\t\t} catch (ConfigException e) {\t\t\te.printStackTrace();\t\t}\t\t// 测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出。 正式代码中无需下面代码\t\twhile (true) {\t\t\ttry {\t\t\t\tThread.sleep(1000);\t\t\t} catch (InterruptedException e) {\t\t\t\te.printStackTrace();\t\t\t}\t\t}\t}\t // 通过get接口把配置值暴露出去使用 public static String getConfig() { return config; } \t// 通过get接口把配置值暴露出去使用\tpublic static Object getPorpertiesValue(String key) {\t\tif (acmProperties != null) {\t\t\treturn acmProperties.get(key);\t\t}\t\treturn null;\t}}', - 'com.alibaba.nacos.page.namespace.operation': '操作', - 'com.alibaba.nacos.page.configurationManagement.push_track': '推送轨迹', - 'nacos.page.namespace.region_ID': '地域ID:', - 'com.alibaba.nacos.component.NewNameSpace.norepeat': '命名空间名称不能重复', - 'com.alibaba.nacos.page.configRollback.inserted': '插入', - 'com.alibaba.nacos.page.configurationManagement.version': '历史版本', - 'com.alibaba.nacos.page.configRollback.rollback': '回滚', - 'nacos.page.namespace.delete_failed': '删除失败', - 'com.alibaba.nacos.component.SuccessDialog.determine': '确定', - 'nacos.page.configurationManagement.HOME_Application0': '归属应用:', - to: '至', - 'com.alibaba.nacos.page.environmentalManagement.operation': '操作', - 'nacos.page.namespace.ACM_dedicated_AccessKey_will_the_waste,_does_not_recommend_the_use_of3': - 'ACM专用AccessKey(即将废弃,不建议使用):', - 'com.alibaba.nacos.page.configurationManagement.configuration_query': '配置查询', - 'nacos.component.validateDialog.fill_the_code': '请填写验证码', - 'nacos.page.configurationManagement.Please_enter_the_name_of_the_app1': '请输入应用名', - 'com.alibaba.nacos.page.newconfig.collapse': '更多高级选项', - 'com.alibaba.nacos.page.namespace.edit': '编辑', - 'nacos.page.namespace._Details_of6': '详情 》', - 'com.alibaba.nacos.component.ShowCodeing.Sample_code': '示例代码', - 'nacos.component.ImportDialog.Import_configuration4': '导入配置 ( ', - 'nacos.page.configurationManagement.please_choose_the_required_export_configuration_items10': - '请选择需要导出的配置项', - 'com.alibaba.nacos.page.configdetail.beta_release': 'Beta发布:', - 'com.alibaba.nacos.page.configurationManagement.fuzzyd': '模糊查询请输入Data ID', - 'com.alibaba.nacos.page.newconfig.group_is_not_empty': 'Group ID长度不能超过127字符', - 'com.alibaba.nacos.component.EditorNameSpace.private': '公共空间', - 'com.alibaba.nacos.page.environmentalManagement.all_available_environment': '所有可用环境', - dateinfo2: '时间范围不能超过45天', - 'nacos.page.namespace.Namespace_details': '命名空间详情', - 'nacos.component.ImportDialog.the_same_configuration6': '相同配置:', - 'nacos.page.newconfig.Tags': '标签:', - 'nacos.page.configurationManagement.Configuration_cloning0': '配置克隆', - 'com.alibaba.nacos.component.NewDatePicker.4_hours': '4小时', - 'com.alibaba.nacos.page.configeditor.group_is_not_empty': '更多高级选项', - 'nacos.page.configurationManagement.SecretKey_recommended5': 'SecretKey(开发环境推荐):', - 'com.alibaba.nacos.page.configurationManagement.click_to_learn_DataId': '点击了解Data ID', - 'nacos.page.configurationManagement.ACM_special_SecretKey_will_be_abandoned,_not_recommended_for': - 'ACM专用SecretKey(即将废弃,不建议使用):', - 'com.alibaba.nacos.page.configsync.sync_configuration': '同步配置成功', - 'com.alibaba.nacos.component.MiddleWareEnv.new_diamond': '新版Diamond', - 'com.alibaba.nacos.page.newconfig.release': '返回', - 'com.alibaba.nacos.page.configeditor.wrong': '错误', - 'com.alibaba.nacos.page.pushTrajectory.user_IP': '用户IP', - 'nacos.page.configeditor.Data_encryption0': '数据加密', - 'com.alibaba.nacos.page.historyDetail.update': '更新', - historyDetail: '历史详情', - 'nacos.page.configurationManagement.select_need_to_clone_the_configuration_items1': - '请选择需要克隆的配置项', - 'nacos.page.configurationManagement._Details_of8': '详情 》', - 'nacos.page.configurationManagement.Batch_processing0': '批量处理', - 'com.alibaba.nacos.page.pushTrajectory.query_dimension': '查询维度:', - 'nacos.component.NameSpaceList.Announcement_nodejs_version_is_developed,supports_a_custom_messag': - '公告:Node.JS版上线。支持定制消息。', - 'nacos.component.ShowCodeing.package_com.alibaba.middleware.acm;import_java.util.Properties;impo': - 'package com.alibaba.middleware.acm;import java.util.Properties;import com.alibaba.edas.acm.ConfigService;import com.alibaba.edas.acm.exception.ConfigException;import com.alibaba.edas.acm.listener.ConfigChangeListener;import com.alibaba.edas.acm.listener.PropertiesListener;// 示例代码,仅用于示例测试public class ACMTest { // 属性/开关 private static String config = "DefaultValue";\t private static Properties acmProperties = new Properties(); \tpublic static void main(String[] args) {\t\ttry {\t\t\t\t\t\t// 本地调试模式。本机测试无法连接ACM服务集群,因此设置debug模式(该模式下获取值为null,不会进入回调函数)。\t\t\t// ConfigService.setDebug(true);\t\t\t\t\t\t// 初始化配置服务,控制台通过示例代码自动获取下面参数\t\t\tConfigService.init("', - 'com.alibaba.nacos.component.NewDatePicker.3_day': '3天', - custom: '自定义', - 'com.alibaba.nacos.component.MiddleWareEnv.daily_test_center': '日常测试中心', - 'com.alibaba.nacos.page.configRollback.for_more_advanced': '更多高级选项', - 'nacos.component.CloneDialog.Terminate_the_clone0': '终止克隆', - 'com.alibaba.nacos.page.configurationManagement.operation': '操作', - 'com.alibaba.nacos.layout.noenv.Click_to_learn_the_namespace': '点击了解命名空间', - 'com.alibaba.nacos.page.configeditor.look': '查看推送轨迹', - 'com.alibaba.nacos.component.NewNameSpace.newnamespce': '新建命名空间', - 'com.alibaba.nacos.page.pushTrajectory.please_enter_a_query_Ip': '请输入查询IP', - 'nacos.page.configurationManagement.export': '导出', - 'com.alibaba.nacos.page.newconfig.new_listing_main': '新建配置', - 'nacos.component.CloneDialog.select_namespace': '请选择命名空间', - 'nacos.page.newconfig.Note_You_are_to_be_a_custom_packet_the_new_configuration,_make_sure_that_t': - '注:您正在往一个自定义分组新增配置,请确保客户端使用的Pandora版本高于3.4.0,否则可能读取不到该配置。', - 'com.alibaba.nacos.component.NameSpaceList.Announcement_nodejs_version_is_developed,supports_a_c': - '公告:Node.js版上线。支持定制消息。', - 'com.alibaba.nacos.page.configRollback.rollback_successful': '回滚成功', - 'com.alibaba.nacos.page.pushTrajectory.getconifg': '配置推送 or 主动获取', - 'com.alibaba.nacos.component.MiddleWareEnv.ungrouped': '未分组', - 'nacos.page.configurationManagement.unprocessed_entry': '未处理的条目:', - 'nacos.page.configurationManagement.ecs_ram_role': - '自动下发 AccessKey 和 SecretKey (生产环境推荐):', - 'com.alibaba.nacos.component.DiffEditorDialog.of_the_current_area': '当前值', - 'com.alibaba.nacos.component.AddGroup.group_name': 'Group名:', - 'nacos.page.configurationManagement.Important_reminder0': '重要提醒', - 'com.alibaba.nacos.page.pushTrajectory.the_query_results:_a_total_query_to': - '查询结果:共查询到', - configRollback: '配置回滚', - 'com.alibaba.nacos.page.pushTrajectory.please_input_Group': '请输入Group', - 'nacos.component.validateDialog.cancel': '取消', - 'nacos.page.namespace.namespace_name': '命名空间名称:', - 'com.alibaba.nacos.page.namespace.namespace_names': '命名空间名称', - 'nacos.page.newconfig.off1': '关', - 'com.alibaba.nacos.page.pushTrajectory.getconfig': '获取配置', - 'nacos.page.namespace.SecretKey_recommended3': 'SecretKey(开发环境推荐):', - 'com.alibaba.nacos.page.pushTrajectory.configok': '新配置生效', - 'nacos.component.ImportDialog.To_terminate_the_import0': '终止导入', - 'nacos.page.configurationManagement.view_details1': '查看详情', - 'com.alibaba.nacos.page.historyRollback.article_meet': '条满足要求的配置。', - 'nacos.page.newconfig.data_encryption3': '数据加密:', - 'com.alibaba.nacos.page.pushTrajectory.user_Ip': '用户IP:', - 'com.alibaba.nacos.page.pushTrajectory.please_enter_the_dataID': '请输入Data ID', - 'nacos.page.namespace.remove_the_namespace': '删除命名空间', - 'com.alibaba.nacos.page.configurationManagement.listener_query': '监听查询', - 'com.alibaba.nacos.page.consistencyEfficacy.edit': '编辑', - 'com.alibaba.nacos.component.EditorNameSpace.load': '命名空间名:', - 'com.alibaba.nacos.component.MiddleWareEnv.performance': '性能', - 'nacos.page.namespace._Remove_the_namespace_success': '删除命名空间成功', - 'nacos.page.configurationManagement.note_ACM_is_dedicated_AK/SK_is_mainly_used_for_some_of_the_compatibility_scenario,_it_is_recommended_to_Unified_the_use_of_Ali_cloud_AK/SK.7': - '注:ACM 专用AK/SK主要用于一些兼容性场景,推荐您统一采用阿里云AK/SK。', - 'com.alibaba.nacos.page.historyRollback.to_configure': '历史版本(保留30天)', - 'com.alibaba.nacos.page.pushTrajectory.interval': '时间区间:', - 'com.alibaba.nacos.page.consistencyEfficacy.details': '详情', - 'com.alibaba.nacos.component.EditorNameSpace.edit_namespace': '加载中...', - 'com.alibaba.nacos.page.newconfig.do_not_ente': '请勿输入非法字符', - 'com.alibaba.nacos.component.MiddleWareEnv.from-test': '自测', - 'nacos.page.configurationManagement.Please_enter_application_name1': '请输入应用名', - 'nacos.component.ImportDialog.You_can_only_upload._zip_file_format0': '只能上传.zip格式的文件', - 'com.alibaba.nacos.page.configeditor.stop_beta': '停止Beta', - 'com.alibaba.nacos.component.SuccessDialog.failure': '失败', - 'nacos.page.configurationManagement.bulk_delete': '批量删除', - 'com.alibaba.nacos.page.historyRollback.details': '详情', - 'com.alibaba.nacos.page.configeditor.more_advanced_options': '收起', - 'com.alibaba.nacos.page.configdetail.configuration': '配置内容:', - 'nacos.component.CloneDialog.configuration_number': '配置数量:', - 'com.alibaba.nacos.component.EditorNameSpace.public_space': '确认修改', - chaxunfanwei: '查询范围', - 'com.alibaba.nacos.page.newconfig.full_screen': '按Esc退出全屏', - 'com.alibaba.nacos.page.configeditor.the_target_environment:': '归属应用:', - hour: '小时', - 'com.alibaba.nacos.page.namespace.configuration': '配置数', - 'nacos.page.configurationManagement.Cloning_check_fails': '克隆检查失败', - 'com.alibaba.nacos.component.NewNameSpace.namespacenotnull': '命名空间不能为空', - 'com.alibaba.nacos.page.configeditor.beta_release_notes(default_not_checked)': 'Beta发布:', - 'nacos.page.newconfig.to_the_authorization_of2': '去授权 》', - 'com.alibaba.nacos.page.configeditor.return': '发布', - 'com.alibaba.nacos.page.configurationManagement.more': '更多', - 'com.alibaba.nacos.component.EnvConfigTopBar.context_switching': '环境切换', - 'com.alibaba.nacos.component.SuccessDialog.Configuration_management': '配置管理', - 'nacos.component.ImportDialog.cover2': '覆盖', - 'com.alibaba.nacos.page.configurationManagement.last_modified_time': '最后修改时间', - 'com.alibaba.nacos.page.newconfig.dataId_is_not_empty': 'Data ID 长度不能超过255字符', - 'com.alibaba.nacos.page.configeditor.configcontent': '配置内容', - 'com.alibaba.nacos.component.NewNameSpace.input': '请勿输入非法字符', - 'com.alibaba.nacos.page.configRollback.updated': '更新', - 'com.alibaba.nacos.page.pushTrajectory.user_Ip:': '用户IP:', - 'nacos.component.DeleteDialog.delete_the_configuration_failed': '删除配置失败', - 'com.alibaba.nacos.component.SuccessDialog.success': '成功', - 'nacos.page.configurationManagement._The_process_is_successful,_delete_the': '处理成功,删除了', - 'com.alibaba.nacos.component.NewNameSpace.prompt': '提示', - 'com.alibaba.nacos.page.configRollback.please_confirm_rollback': '回滚配置', - 'com.alibaba.nacos.page.pushTrajectory.the_query_results': '查询结果:共查询到', - 'com.alibaba.nacos.page.historyRollback.group': '请输入Group', - 'nacos.component.ExportDialog.export_configuration4': '导出配置(', - 'com.alibaba.nacos.page.consistencyEfficacy.configuration_consistency_check': '配置一致性校验', - 'com.alibaba.nacos.page.newconfig.stop_beta': '停止Beta发布', - 'com.alibaba.nacos.page.historyDetail.home': '归属应用:', - 'nacos.component.ExportDialog.export3': '导出', - 'com.alibaba.nacos.page.pushTrajectory.cluster_synchronization': '集群间同步通知', - 'nacos.page.namespace.ecs_ram_role': '自动下发 AccessKey 和 SecretKey (生产环境推荐):', - 'nacos.component.CloneDialog.HOME_Application': '归属应用:', - 'nacos.page.namespace.Namespace': '命名空间', - 'com.alibaba.nacos.component.EditorNameSpace.please_do': '请勿输入非法字符', - 'com.alibaba.nacos.page.listeningToQuery.configuration': '配置', - 'com.alibaba.nacos.component.MiddleWareEnv.cloud_unit': '云单元', - 'nacos.page.configurationManagement.Clone_failed': '克隆失败', - 'nacos.page.newconfig.The_opening_of_the_data_encryption-related_services0': - '开通数据加密相关服务', - 'com.alibaba.nacos.component.NewDatePicker.recently': '取消', - 'com.alibaba.nacos.component.editorNameSpace': '私有空间', - 'com.alibaba.nacos.page.configeditor.configuration_format:': - '默认不要勾选。点击了解Beta发布详情。', - pushTrajectory: '推送轨迹', - 'com.alibaba.nacos.component.MiddleWareEnv.daily': '日常', - 'nacos.component.ExportDialog.HOME_Application1': '归属应用:', - 'nacos.page.newconfig._to_go_to_the_opening_of1': '\t 去开通 》', - 'com.alibaba.nacos.component.NewDatePicker.determine': '至', - 'nacos.page.configurationManagement.advanced_query9': '高级查询', - 'nacos.page.configurationManagement.configuration': '项配置', - 'nacos.page.configurationManagement.AccessKey_recommended2': 'AccessKey(推荐):', - configeditor: '配置编辑', - 'com.alibaba.nacos.page.listAllEnvironmental.all_available_environment': '所有可用环境', - 'com.alibaba.nacos.page.newconfig.configuration_contentmax': - '配置内容最大长度不能超过10240字符', - 'com.alibaba.nacos.page.configdetail.error': '错误', - 'com.alibaba.nacos.component.NameSpaceList.immediate_use': '立即使用', - 'com.alibaba.nacos.page.newconfig.Group_ID_cannot_be_longer': '归属应用:', - listeningToQuery: '监听查询', - Configdetail: '配置详情', - 'com.alibaba.nacos.page.listAllEnvironmental.environment_marked': '环境标示', - 'com.alibaba.nacos.page.configsync.configuration': '配置内容:', - configdetail: '配置详情', - 'com.alibaba.nacos.page.historyDetail.insert': '插入', - 'com.alibaba.nacos.page.configdetail.official': '正式', - 'nacos.page.configurationManagement.questionnaire2': '问卷调查', - 'com.alibaba.nacos.component.AddGroup.prompt': '提示', - 'com.alibaba.nacos.layout.noenv.app_configuration_management_acm': 'NACOS', - 'nacos.page.configurationManagement.process_is_successful,_import_the': '处理成功,导入了', - 'nacos.component.DeleteDialog.Configuration_management': '配置管理', - 'com.alibaba.nacos.page.consistencyEfficacy.configuration_content_md5': '配置内容MD5', - 'com.alibaba.nacos.page.configRollback.return': '返回', - 'com.alibaba.nacos.page.configurationManagement.details': '详情', - 'nacos.page.namespace.details': '详情', - 'com.alibaba.nacos.page.listeningToQuery.query_results:_query': '查询结果:共查询到', - 'com.alibaba.nacos.page.form.Data_Id_can_not_be_empty': 'Data ID不能为空', - 'com.alibaba.nacos.page.listeningToQuery.group_can_not_be_empty': 'Group不能为空', - 'com.alibaba.nacos.page.configurationManagement.fuzzyg': '模糊查询请输入Group', - 'nacos.component.NameSpaceList.Forum': '论坛', - 'nacos.component.ShowCodeing.,_new_ConfigChangeListener()_{_public_void_receiveConfigInfo(String': - '", new ConfigChangeListener() {\t\t\t\tpublic void receiveConfigInfo(String configInfo) {\t\t\t\t\t// 当配置更新后,通过该回调函数将最新值吐给用户。\t\t\t\t\t// 注意回调函数中不要做阻塞操作,否则阻塞通知线程。\t\t\t\t\tconfig = configInfo;\t\t\t\t\tSystem.out.println(configInfo);\t\t\t\t}\t\t\t});\t\t\t\t\t\t/**\t\t\t * 如果配置值的內容为properties格式(key=value), 可使用下面监听器。以便一个配置管理多个配置项\t\t\t */\t\t\t\t\t\t/**\t\t\tConfigService.addListener("', - 'com.alibaba.nacos.page.consistencyEfficacy.advanced_query': '高级查询', - 'com.alibaba.nacos.page.listeningToQuery.please_enter_the_dataid': '请输入Data ID', - 'nacos.component.ShowCodeing.,_6000);_System.out.println(content);_//_初始化的时候,给配置添加监听,配置变更会回调通知_ConfigService.addListener(': - '", 6000);\t\t\tSystem.out.println(content);\t\t\t// 初始化的时候,给配置添加监听,配置变更会回调通知\t\t\tConfigService.addListener("', - 'nacos.component.CloneDialog.|_the_selected_entry': '| 选中的条目', - 'nacos.page.newconfig.Data_encryption0': '数据加密', - 'com.alibaba.nacos.page.environmentalManagement.environment_marked': '环境标示', - 'com.alibaba.nacos.page.listeningToQuery.listener_query': '监听查询', - 'nacos.component.ExportDialog.|_The_selected_entry0': '| 选中的条目', - 'com.alibaba.nacos.page.consistencyEfficacy.query_results': '查询结果', - 'nacos.page.namespace.deleted_successfully': '删除成功', - 'nacos.component.CloneDialog.cover': '覆盖', - 'com.alibaba.nacos.page.environmentalManagement.Into_the': '进入', - 'com.alibaba.nacos.page.configdetail.more_advanced_options': '更多高级选项', - 'com.alibaba.nacos.page.listeningToQuery.query_dimension': '查询维度:', - 'com.alibaba.nacos.page.configRollback.configuration': '配置内容:', - 'com.alibaba.nacos.page.historyDetail.more_advanced_options': '更多高级选项', - 'com.alibaba.nacos.page.consistencyEfficacy.query': '查询', - 'com.alibaba.nacos.page.listeningToQuery.please_input_ip': '请输入IP', - 'com.alibaba.nacos.component.NewDatePicker.end_time_must_be_greater_than_the_start_time_of_the_t': - '结束时间必须大于开始时间', - 'com.alibaba.nacos.page.listAllEnvironmental.view': '查看', - 'nacos.component.ShowCodeing.*///_ConfigService.init();_//_主动获取配置_String_content_=_ConfigService': - '*///\t\t\tConfigService.init();\t\t\t\t\t\t// 主动获取配置\t\t\tString content = ConfigService.getConfig("', - 'com.alibaba.nacos.page.newconfig.configure_contents_of': '按F1显示全屏', - 'com.alibaba.nacos.page.listeningToQuery.success': '成功', - 'com.alibaba.nacos.component.NewDatePicker.30_minutes': '30分钟', - 'com.alibaba.nacos.page.historyDetail.history_details': '历史详情', - 'com.alibaba.nacos.page.listeningToQuery.query': '查询', - 'com.alibaba.nacos.page.newconfig.the_target_environment': '配置格式:', - 'com.alibaba.nacos.layout.noenv.does_not_exist': '您访问的页面不存在', - 'nacos.component.ImportDialog.file_upload_directly_after_importing_the_configuration,_please_be_': - '文件上传后将直接导入配置,请务必谨慎操作', - 'nacos.page.configurationManagement.ACM_dedicated_AccessKey_will_the_waste,_does_not_recommend_the_use_of5': - 'ACM专用AccessKey(即将废弃,不建议使用):', - 'nacos.page.configurationManagement.import': '导入', - 'com.alibaba.nacos.page.configurationManagement.suredelete': '确定要删除以下配置吗?', - 'com.alibaba.nacos.page.configeditor.release_beta': '按Esc退出全屏', - 'nacos.page.configurationManagement.no_announcement6': '暂无公告', - 'com.alibaba.nacos.component.NewDatePicker.query_range:': '自定义', - 'com.alibaba.nacos.page.configRollback.belongs_to': '所属地域:', - 'com.alibaba.nacos.page.pushTrajectory.query_dimension:': '查询维度:', - 'com.alibaba.nacos.component.MiddleWareEnv.payTM_daily': 'payTM日常', - 'nacos.page.configurationManagement.ACM_special_SecretKey_will_be_abandoned,_not_recommended_for_use6': - 'ACM专用SecretKey(即将废弃,不建议使用):', - 'com.alibaba.nacos.page.configurationManagement.query': '查询', - 'com.alibaba.nacos.component.MiddleWareEnv.offline': '线下', - 'com.alibaba.nacos.page.listeningToQuery.article_meet_the_requirements_of_the_configuration.': - '条满足要求的配置。', - 'com.alibaba.nacos.page.configurationManagement.Remove_configuration': '删除配置', - recent: '最近', - 'com.alibaba.nacos.page.configeditor.F1/fn F1(MAC)full_screen': '配置内容', - 'nacos.page.configurationManagement.off_the_Bulletin_Board5': '关闭公告栏', - 'com.alibaba.nacos.page.historyDetail.action_type': '操作类型:', - 'com.alibaba.nacos.page.listAllEnvironmental.environment_IP': '环境IP', - 'nacos.component.CloneDialog.source_space': '源空间:', - 'nacos.page.configurationManagement.click_on_the_obtain_of3': '点击获取 》', - 'com.alibaba.nacos.page.configurationManagement.article_meet_the_requirements': - '条满足要求的配置。', - 'com.alibaba.nacos.page.historyRollback.operation': '操作', - 'nacos.component.ShowCodeing.);_/**_*_生产环境通过jvm参数传参,以便使用多个环境,_-Dacm.endpoint=': - '");\t\t\t\t\t\t/**\t\t\t * 生产环境通过JVM参数传参,以便使用多个环境, -Dacm.endpoint=', - 'com.alibaba.nacos.page.historyDetail.return': '返回', - 'nacos.page.configurationManagement.failed_entry': '失败的条目:', - 'nacos.component.CloneDialog.start_cloning': '开始克隆', - 'com.alibaba.nacos.page.configRollback.the_following_configuration': '以下配置吗?', - 'com.alibaba.nacos.page.configurationManagement.query_results': '查询结果:共查询到', - 'nacos.page.configurationManagement.a_ACM_front-end_monitoring_questionnaire,_the_time_limit_to_receive_Ali_cloud_voucher_details_shoved_stamp_the3': - '答 ACM 前端监控调查问卷,限时领取阿里云代金券\t 详情猛戳:', - 'com.alibaba.nacos.component.MiddleWareEnv.online_center': '线上中心', - 'com.alibaba.nacos.page.serviceManagement.service_list': '服务列表', - 'com.alibaba.nacos.page.serviceManagement.service_name': '服务名称', - 'com.alibaba.nacos.page.serviceManagement.please_enter_the_service_name': '请输入服务名称', - 'com.alibaba.nacos.page.serviceManagement.table.column.service_name': '服务名', - 'com.alibaba.nacos.page.serviceManagement.table.column.cluster_count': '集群数目', - 'com.alibaba.nacos.page.serviceManagement.table.column.ip_count': '实例数', - 'com.alibaba.nacos.page.serviceManagement.table.column.healthy_instance_count': '健康实例数', - 'com.alibaba.nacos.page.serviceManagement.table.column.operation': '操作', - 'com.alibaba.nacos.page.serviceManagement.detail': '详情', - 'com.alibaba.nacos.page.serviceManagement.delete': '删除', - 'com.alibaba.nacos.page.serviceManagement.prompt': '提示', - 'com.alibaba.nacos.page.serviceManagement.prompt_delete': '确定要删除当前服务吗?', - 'com.alibaba.nacos.page.serviceManagement.create': '创建服务', - 'com.alibaba.nacos.page.serviceManagement.query': '查询', - serviceManagement: '服务列表', - 'com.alibaba.nacos.page.serviceDetail.service_details': '服务详情', - 'com.alibaba.nacos.page.serviceDetail.edit_service': '编辑服务', - 'com.alibaba.nacos.page.serviceDetail.back': '返回', - 'com.alibaba.nacos.page.serviceDetail.service_name': '服务名', - 'com.alibaba.nacos.page.serviceDetail.protect_threshold': '保护阈值', - 'com.alibaba.nacos.page.serviceDetail.health_check_pattern': '健康检查模式', - 'com.alibaba.nacos.page.serviceDetail.health_check_pattern.service': '服务端', - 'com.alibaba.nacos.page.serviceDetail.health_check_pattern.client': '客户端', - 'com.alibaba.nacos.page.serviceDetail.health_check_pattern.none': '禁止', - 'com.alibaba.nacos.page.serviceDetail.metadata': '元数据', - 'com.alibaba.nacos.page.serviceDetail.create_service': '创建服务', - 'com.alibaba.nacos.page.serviceDetail.update_service': '更新服务', - 'com.alibaba.nacos.page.serviceDetail.cluster': '集群', - 'com.alibaba.nacos.page.serviceDetail.edit_cluster': '集群配置', - 'com.alibaba.nacos.page.serviceDetail.port': '端口', - 'com.alibaba.nacos.page.serviceDetail.weight': '权重', - 'com.alibaba.nacos.page.serviceDetail.healthy': '健康状态', - 'com.alibaba.nacos.page.serviceDetail.operation': '操作', - 'com.alibaba.nacos.page.serviceDetail.editor': '编辑', - 'com.alibaba.nacos.page.serviceDetail.offline': '下线', - 'com.alibaba.nacos.page.serviceDetail.online': '上线', - 'com.alibaba.nacos.page.serviceDetail.check_type': '检查类型', - 'com.alibaba.nacos.page.serviceDetail.check_port': '检查端口', - 'com.alibaba.nacos.page.serviceDetail.use_ip_port_check': '使用IP端口检查', - 'com.alibaba.nacos.page.serviceDetail.check_path': '检查路径', - 'com.alibaba.nacos.page.serviceDetail.check_headers': '检查头', - 'com.alibaba.nacos.page.serviceDetail.update_cluster': '更新集群', - 'com.alibaba.nacos.page.serviceDetail.update_instance': '编辑实例', - 'com.alibaba.nacos.page.serviceDetail.whether_online': '是否上线', - serviceDetail: '服务详情', - 'nacos.page.ConfigEditor.submit_failed': '不能为空, 提交失败', - }, - 'en-us': { - 'com.alibaba.nacos.layout.noenv.nacosversion': '0.8.0', - 'com.alibaba.nacos.page.configurationManagementVirtual': 'ConfigManagement', - 'com.alibaba.nacos.page.serviceManagementVirtual': 'ServiceManagement', - 'nacos.component.CloneDialog.the_same_configuration': 'Conflict:', - to: 'to', - 'nacos.page.newconfig.data_encryption3': 'Data Encryption:', - 'nacos.page.configurationManagement.batch_management': 'Batch Operation', - 'com.alibaba.nacos.page.configsync.return': 'Back', - 'com.alibaba.nacos.page.pushTrajectory.getconfig': 'Get Configuration', - cancel: 'Cancel', - 'nacos.component.CloneDialog.Terminate_the_clone0': 'Terminate', - 'com.alibaba.nacos.component.NewNameSpace.newnamespce': 'Create Namespace', - 'com.alibaba.nacos.page.pushTrajectory.Data_Id_can_not_be_empty': 'Data ID cannot be empty', - 'com.alibaba.nacos.component.MiddleWareEnv.maletest': 'male. test', - 'com.alibaba.nacos.page.configeditor.group_is_not_empty': 'Advanced Options', - 'com.alibaba.nacos.component.editorNameSpace': 'Dedicated Space', - 'nacos.component.CloneDialog.target_space': 'Target:', - 'nacos.page.newconfig.off1': 'Off', - 'com.alibaba.nacos.component.NameSpaceList.Announcement_nodejs_version_is_developed,supports_a_c': - 'Announcement: Node.js version now available, supporting customized messages.', - 'com.alibaba.nacos.page.pushTrajectory.user_Ip': 'User IP:', - 'nacos.page.configurationManagement.a_ACM_front-end_monitoring_questionnaire,_the_time_limit_to_': - 'a ACM front-end monitoring questionnaire, the time limit to receive Ali cloud voucher details shoved stamp: the', - 'nacos.page.configurationManagement.Important_reminder0': 'Important reminder', - 'com.alibaba.nacos.page.pushTrajectory.the_query_results:_a_total_query_to': 'Results: Found', - 'com.alibaba.nacos.page.configdetail.belongs_to_the_environment': 'Region:', - 'com.alibaba.nacos.page.configurationManagement.operation': 'Actions', - 'com.alibaba.nacos.layout.noenv.app_configuration_management_ACM': 'NACOS', - 'nacos.page.namespace.note_ACM_is_dedicated_AK/SK_is_mainly_used_for_some_of_the_compatibility_scenario,_it_is_recommended_to_Unified_the_use_of_Ali_cloud_AK/SK.5': - "Note: ACM's dedicated AK/SK is mainly used for improved compatibilities. We recommend that you always use Alibaba Cloud AK/SK.", - 'com.alibaba.nacos.component.ShowCodeing.Sample_code': 'Sample Code', - 'nacos.page.newconfig.Open0': 'Open', - custom: 'Customize', - 'com.alibaba.nacos.page.pushTrajectory.Group_Id_cannot_be_empty': 'Group name cannot be empty', - 'com.alibaba.nacos.page.environmentalManagement.operation': 'operation', - 'com.alibaba.nacos.page.configRollback.environment': 'Region:', - 'com.alibaba.nacos.page.pushTrajectory.please_enter_a_query_Ip': 'Enter IP', - confirm: 'OK', - 'nacos.page.configurationManagement.successful_entry': 'Successful Entry:', - 'com.alibaba.nacos.page.configurationManagement.configuration_query': 'Configuration Search', - 'nacos.page.configurationManagement._Details_of8': ' Details of', - 'com.alibaba.nacos.page.namespace.add': 'Create Namespace', - 'nacos.component.ImportDialog.the_same_configuration6': 'Conflict:', - 'com.alibaba.nacos.page.pushTrajectory.Push_the_trajectory': 'Push Tracks', - configsync: 'Synchronize Configuration', - 'nacos.page.namespace.Namespace_details': 'Namespace details', - dateinfo1: 'The end time must be greater than the start time', - 'com.alibaba.nacos.page.newconfig.group_is_not_empty': - 'Group ID cannot exceed 127 characters in length', - 'com.alibaba.nacos.page.configurationManagement.click_to_learn_DataId': - 'Learn more about Data ID', - 'com.alibaba.nacos.page.configdetail.configuration_details': 'Configuration Details', - 'com.alibaba.nacos.page.namespace.edit': 'Edit', - 'nacos.page.newconfig.Tags': 'Tags:', - 'nacos.page.configurationManagement.please_choose_the_required_export_configuration_items10': - 'Please select configuration items to export.', - 'nacos.page.namespace.namespace_name': 'Name:', - 'com.alibaba.nacos.component.MiddleWareEnv.ungrouped': 'Ungrouped', - 'nacos.component.ImportDialog.target_space5': 'Target:', - 'com.alibaba.nacos.page.pushTrajectory.configok': 'New Configuration Published', - 'com.alibaba.nacos.page.newconfig.esc_exit': 'Publish', - 'nacos.page.namespace.ACM_dedicated_AccessKey_will_the_waste,_does_not_recommend_the_use_of3': - 'ACM dedicated AccessKey will the waste, does not recommend the use of:', - 'nacos.page.configurationManagement.ACM_dedicated_AccessKey_will_the_waste,_does_not_recommend_t': - 'ACM dedicated AccessKey will the waste, does not recommend the use of:', - 'com.alibaba.nacos.page.newconfig.the_more_advanced': 'Group cannot be empty', - 'nacos.page.configurationManagement.SecretKey_recommended5': - 'SecretKey (Recommended for development environment):', - 'nacos.page.configurationManagement.Configuration_cloning0': 'Clone', - 'com.alibaba.nacos.page.pushTrajectory.configuration': 'Configuration', - 'com.alibaba.nacos.page.newconfig.new_listing_main': 'Create Configuration', - 'nacos.page.configurationManagement.Batch_processing0': 'Batch processing', - 'com.alibaba.nacos.page.configeditor.look': 'View Push Track', - 'com.alibaba.nacos.page.configsync.sync_configuration': - 'Synchronize Configuration Successfully', - 'com.alibaba.nacos.page.configeditor.official': 'Official', - 'nacos.page.configeditor.Data_encryption0': 'Data encryption', - 'nacos.component.NameSpaceList.Announcement_nodejs_version_is_developed,supports_a_custom_messag': - 'Announcement: Node.JS version now available, supporting customized messages.', - 'com.alibaba.nacos.page.historyDetail.update': 'Update', - 'com.alibaba.nacos.page.pushTrajectory.user_IP': 'IP', - 'nacos.component.ImportDialog.Upload_File3': 'Upload File', - 'com.alibaba.nacos.component.NewDatePicker.60_-_': '60 minutes', - 'nacos.page.configurationManagement.note_ACM_is_dedicated_AK/SK_is_mainly_used_for_some_of_the_c': - 'note: ACM is dedicated AK/SK is mainly used for some of the compatibility scenario, it is recommended to Unified the use of Ali cloud AK/SK.', - 'com.alibaba.nacos.page.newconfig.Data_ID_length': 'Collapse', - 'nacos.page.configurationManagement.Please_enter_the_name_of_the_app1': 'Enter App Name\n', - 'com.alibaba.nacos.page.configeditor.toedittitle': 'Edit Configuration', - 'nacos.component.CloneDialog.configuration_number': 'Items:', - chaxunfanwei: 'Query Range', - 'com.alibaba.nacos.page.configeditor.beta_release_notes(default_not_checked)': 'Beta Publish:', - 'nacos.page.configurationManagement.open_Bulletin_Board7': 'open Bulletin Board', - 'com.alibaba.nacos.component.SuccessDialog.failure': 'Failed', - 'com.alibaba.nacos.component.ShowCodeing.loading': 'Loading...', - 'com.alibaba.nacos.page.configsync.home': 'Application:', - minute: ' minutes', - 'cspupcloud.page.historyRollback.Retained_for_30_days': 'Retained for 30 days', - 'com.alibaba.nacos.page.configRollback.delete': 'Delete', - 'com.alibaba.nacos.page.configeditor.beta_release:': 'Target Region:', - 'com.alibaba.nacos.page.consistencyEfficacy.environment_name': 'environment name', - 'com.alibaba.nacos.component.SuccessDialog.success': 'Successful', - 'com.alibaba.nacos.page.namespace.configuration': 'Number of Configurations', - hour: ' hours', - 'com.alibaba.nacos.page.configRollback.please_confirm_rollback': 'Roll Back', - 'nacos.page.configurationManagement.ACM_special_SecretKey_will_be_abandoned,_not_recommended_for_use6': - "ACM's dedicated SecretKey (To be deprecated soon and not recommended):", - 'nacos.component.ExportDialog.source_space5': 'Source:', - 'com.alibaba.nacos.component.SuccessDialog.determine': 'OK', - 'com.alibaba.nacos.component.EnvConfigTopBar.context_switching': 'Switch Region', - 'nacos.component.DeleteDialog.delete_the_configuration_failed': 'Deleting configuration failed', - 'com.alibaba.nacos.page.configurationManagement.more': 'More', - 'com.alibaba.nacos.page.pushTrajectory.please_enter_the_dataID': 'Enter Data ID', - 'com.alibaba.nacos.page.configRollback.inserted': 'Insert', - 'com.alibaba.nacos.page.configeditor.Home_application:': 'Group name cannot be empty', - 'com.alibaba.nacos.page.configurationManagement.environment': 'Region:', - 'com.alibaba.nacos.component.NewNameSpace.prompt': 'Notice', - 'com.alibaba.nacos.page.configurationManagement.push_track': 'Push Track', - 'hanxie.show': 'test', - 'com.alibaba.nacos.page.configdetail.configuration': 'Configuration Content:', - 'com.alibaba.nacos.pubshow': - 'The sub-account is not anthorized. Contact the owner of the primary account to grant permission first.', - 'com.alibaba.nacos.page.newconfig.stop_fails': 'Failed to stop beta publishing.', - 'com.alibaba.nacos.page.newconfig.group_placeholder': 'Enter your group name', - 'nacos.page.namespace._Remove_the_namespace_success': ' Remove the namespace success', - 'com.alibaba.nacos.component.MiddleWareEnv.from-test': 'Self-Test', - 'com.alibaba.nacos.component.EditorNameSpace.public_space': 'OK', - 'com.alibaba.nacos.page.consistencyEfficacy.details': 'Details', - 'com.alibaba.nacos.page.configeditor.vdchart': 'Illegal characters not allowed', - 'nacos.page.configurationManagement.Please_enter_application_name1': 'Enter App Name', - 'com.alibaba.nacos.page.pushTrajectory.query_dimension:': 'Dimension:', - 'nacos.page.namespace.sure_you_want_to_delete_the_following_namespaces?': - 'Sure you want to delete the following namespaces?', - 'nacos.component.ImportDialog.cover2': 'Overwrite', - 'com.alibaba.nacos.component.MiddleWareEnv.daily_stable': 'Daily Stable', - 'com.alibaba.nacos.component.EditorNameSpace.edit_namespace': 'Loading...', - 'com.alibaba.nacos.page.newconfig.dataId_is_not_empty': - 'Data ID cannot exceed 255 characters in length', - 'com.alibaba.nacos.page.configurationManagement.article_meet_the_requirements': - 'configuration items', - 'com.alibaba.nacos.component.NewNameSpace.name': 'Namespace:', - 'com.alibaba.nacos.page.configeditor.more_advanced_options': 'Collapse', - 'com.alibaba.nacos.page.historyRollback.details': 'Details', - 'nacos.page.newconfig._to_go_to_the_opening_of1': ' to go to the opening of', - 'nacos.page.configurationManagement.please_select_the_required_delete_the_configuration_item': - 'Select configuration items to delete', - 'nacos.component.DeleteDialog.deletetitle': 'Delete Configuration', - 'com.alibaba.nacos.page.configeditor.recipient_from': 'Data ID cannot be empty', - 'nacos.page.namespace.namespace_ID': 'ID:', - 'com.alibaba.nacos.component.MiddleWareEnv.Spas_dedicated': 'Spas Dedicated', - historyRollback: 'Historical Versions', - 'com.alibaba.nacos.page.newconfig.full_screen': 'Press Esc to exit', - 'com.alibaba.nacos.page.listAllEnvironmental.environment_marked': 'environment marked', - 'nacos.page.namespace.delete_failed': 'Failed to Delete', - 'com.alibaba.nacos.page.configsync.configuration': 'Configuration Content:', - configeditor: 'Edit Configuration', - 'com.alibaba.nacos.component.NameSpaceList.immediate_use': 'Try Now', - 'com.alibaba.nacos.page.configRollback.rollback': 'Roll Back', - 'com.alibaba.nacos.page.configeditor.configuration_format:': - 'Deselected by default. Learn more about beta publishing.\n', - 'com.alibaba.nacos.page.listAllEnvironmental.environment_name': 'environment name,', - 'com.alibaba.nacos.page.configeditor.': 'Back', - 'nacos.component.validateDialog.Click_to_get_verification_code': - 'Click to Get Verification Code', - configRollback: 'Configuration Rollback', - 'com.alibaba.nacos.component.NameSpaceList.Announcement_nodejs_version_is_developed,supports_a_custom_message': - 'Announcement: Node.js version now available, supporting customized messages.', - 'nacos.page.configurationManagement.advanced_query9': 'Advanced Query', - 'com.alibaba.nacos.page.configdetail.official': 'Official', - 'nacos.page.configurationManagement.process_is_successful,_the_cloned': - 'Process successfully, cloned ', - 'nacos.component.ShowCodeing.,_new_PropertiesListener()_{_@Override_public_void_innerReceive(Pro': - '", new PropertiesListener() {\t\t\t\t\t\t\t\t@Override\t\t\t\tpublic void innerReceive(Properties properties) {\t\t\t\t\t// TODO Auto-generated method stub\t\t\t\t\tacmProperties = properties;\t\t\t\t\tSystem.out.println(properties);\t\t\t\t}\t\t\t});\t\t\t\t\t\t**/\t\t\t\t\t} catch (ConfigException e) {\t\t\te.printStackTrace();\t\t}\t\t// 测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出。 正式代码中无需下面代码\t\twhile (true) {\t\t\ttry {\t\t\t\tThread.sleep(1000);\t\t\t} catch (InterruptedException e) {\t\t\t\te.printStackTrace();\t\t\t}\t\t}\t}\t // 通过get接口把配置值暴露出去使用 public static String getConfig() { return config; } \t// 通过get接口把配置值暴露出去使用\tpublic static Object getPorpertiesValue(String key) {\t\tif (acmProperties != null) {\t\t\treturn acmProperties.get(key);\t\t}\t\treturn null;\t}}', - 'com.alibaba.nacos.page.listeningToQuery.query_dimension': 'Dimension:', - 'nacos.component.DeleteDialog.determine': 'OK', - 'com.alibaba.nacos.page.configurationManagement.details': 'Details', - pubnodata: 'No results found.', - configdetail: 'Configuration Details', - 'com.alibaba.nacos.page.configurationManagement.edit': 'Edit', - 'com.alibaba.nacos.page.listAllEnvironmental.view_environment_IP': 'View environment IP', - 'com.alibaba.nacos.page.historyDetail.home': 'Application:', - 'com.alibaba.nacos.page.configeditor.configuration_formatpre': 'Deselected by default. ', - 'com.alibaba.nacos.component.AddGroup.prompt': 'Notice', - 'com.alibaba.nacos.page.consistencyEfficacy.configuration_content_md5': - 'Configuration Content MD5', - 'com.alibaba.nacos.component.NameSpaceList.online_customer_support': 'Online Customer Support:', - 'nacos.page.configurationManagement.Delete_failed': 'Delete failed', - 'com.alibaba.nacos.page.consistencyEfficacy.edit': 'Edit', - 'nacos.component.ExportDialog.HOME_Application1': 'Application:', - 'com.alibaba.nacos.page.configurationManagement.fuzzyd': 'Enter Data ID', - 'com.alibaba.nacos.page.listeningToQuery.query': 'Search', - 'com.alibaba.nacos.component.MiddleWareEnv.daily_environment_packet': 'Daily Environment Group', - 'com.alibaba.nacos.component.NewDatePicker.to': 'Search Range:', - 'nacos.component.ExportDialog.export3': 'Export', - 'com.alibaba.nacos.layout.noenv.Click_to_learn_the_namespace': 'Learn more about namespace', - 'com.alibaba.nacos.page.pushTrajectory.determine': 'Search', - 'com.alibaba.nacos.page.historyRollback.dataid': 'Enter Data ID', - 'nacos.page.namespace.SecretKey_recommended3': - 'SecretKey (Recommended for development environment):', - 'com.alibaba.nacos.page.historyDetail.insert': 'Insert', - 'com.alibaba.nacos.component.MiddleWareEnv.daily_units': 'Daily Units', - 'nacos.component.validateDialog.confirm': 'confirm', - 'com.alibaba.nacos.component.EditorNameSpace.please_do': 'Illegal characters not allowed', - 'nacos.page.configurationManagement.view_details1': 'view details', - 'com.alibaba.nacos.component.NewDatePicker.to_cancel_the': 'OK', - 'nacos.component.validateDialog.phoneNumber': 'Mobile phone number:', - 'com.alibaba.nacos.page.newconfig.Group_ID_cannot_be_longer': 'Application:', - 'nacos.page.newconfig.The_opening_of_the_data_encryption-related_services0': - 'The Opening of the Data Encryption-Related Services', - 'com.alibaba.nacos.component.MiddleWareEnv.cloud_unit': 'Cloud Unit', - 'com.alibaba.nacos.component.NewDatePicker.recently': 'Cancel', - 'nacos.page.namespace.Namespace': 'Namespaces', - 'com.alibaba.nacos.page.listAllEnvironmental.operation': 'operation', - 'nacos.page.configurationManagement.select_need_to_clone_the_configuration_items1': - 'Please select configuration items to clone.', - 'nacos.page.configurationManagement.ACM_dedicated_AccessKey_will_the_waste,_does_not_recommend_the_use_of5': - "ACM's dedicated AccessKey (To be deprecated soon and not recommended):", - 'nacos.component.CloneDialog.tags': 'tags:', - 'com.alibaba.nacos.component.NewNameSpace.confirm': 'OK', - 'com.alibaba.nacos.page.configRollback.home': 'Application:', - 'nacos.page.configurationManagement.a_ACM_front-end_monitoring_questionnaire,_the_time_limit_to_receive_Ali_cloud_voucher_details_shoved_stamp_the3': - 'a ACM front-end monitoring questionnaire, the time limit to receive Ali cloud voucher details shoved stamp: the', - 'com.alibaba.nacos.page.configeditor.Esc_exit': 'Press F1 to view in full screen', - 'nacos.page.configurationManagement.click_on_the_obtain_of3': 'Click on the obtain of', - 'com.alibaba.nacos.page.listAllEnvironmental.view': 'View', - 'nacos.page.configeditor.Description': 'Description:', - 'com.alibaba.nacos.page.historyDetail.belongs_to_the_environment': 'Region:', - 'nacos.page.configurationManagement.off_the_Bulletin_Board5': 'off the Bulletin Board', - 'com.alibaba.nacos.page.configeditor.release_beta': 'Press Esc to exit ', - 'com.alibaba.nacos.page.configurationManagement.Remove_configuration': 'Delete Configuration', - 'nacos.page.namespace.deleted_successfully': 'Deleted successfully', - 'nacos.component.CloneDialog.configuration_cloning(': 'Clone(', - 'com.alibaba.nacos.page.configRollback.configuration': 'Configuration Content:', - 'com.alibaba.nacos.component.DiffEditorDialog.original_value': 'Original Value', - 'com.alibaba.nacos.page.historyDetail.return': 'Back', - 'com.alibaba.nacos.page.configeditor.configure_contents_of': 'Format:', - 'com.alibaba.nacos.page.listeningToQuery.article_meet_the_requirements_of_the_configuration.': - 'configuration items.', - 'com.alibaba.nacos.page.configurationManagement.query': 'Search', - 'com.alibaba.nacos.page.historyRollback.last_update_time': 'Last Modified At', - 'nacos.component.CloneDialog.source_space': 'Source :', - 'nacos.component.ShowCodeing.);_/**_*_生产环境通过jvm参数传参,以便使用多个环境,_-Dacm.endpoint=': - '");\t\t\t\t\t\t/**\t\t\t * 生产环境通过JVM参数传参,以便使用多个环境, -Dacm.endpoint=', - 'com.alibaba.nacos.layout.noenv.does_not_exist': 'The page you visit does not exist', - 'com.alibaba.nacos.page.historyDetail.configure_content': 'Configuration Content:', - 'nacos.component.ShowCodeing.*///_ConfigService.init();_//_主动获取配置_String_content_=_ConfigService.getConfig(': - '*///\t\t\tConfigService.init();\t\t\t\t\t\t// 主动获取配置\t\t\tString content = ConfigService.getConfig("', - 'com.alibaba.nacos.page.configurationManagement.query_results': 'Search Results: Found', - 'nacos.component.ShowCodeing.,_new_ConfigChangeListener()_{_public_void_receiveConfigInfo(String': - '", new ConfigChangeListener() {\t\t\t\tpublic void receiveConfigInfo(String configInfo) {\t\t\t\t\t// 当配置更新后,通过该回调函数将最新值吐给用户。\t\t\t\t\t// 注意回调函数中不要做阻塞操作,否则阻塞通知线程。\t\t\t\t\tconfig = configInfo;\t\t\t\t\tSystem.out.println(configInfo);\t\t\t\t}\t\t\t});\t\t\t\t\t\t/**\t\t\t * 如果配置值的內容为properties格式(key=value), 可使用下面监听器。以便一个配置管理多个配置项\t\t\t */\t\t\t\t\t\t/**\t\t\tConfigService.addListener("', - 'com.alibaba.nacos.page.consistencyEfficacy.advanced_query': 'Advanced Query', - 'com.alibaba.nacos.page.historyDetail.delete': 'Delete', - 'nacos.component.NameSpaceList.Forum': 'Forum', - 'com.alibaba.nacos.page.namespace.prompt': 'Notice', - 'com.alibaba.nacos.page.configdetail.more_advanced_options': 'Advanced Options', - 'com.alibaba.nacos.page.listeningToQuery.listener_query': 'Listening Query', - 'com.alibaba.nacos.page.newconfig.the_home_application': 'Target Region:', - 'nacos.page.namespace.click_on_the_obtain_of1': 'Click on the obtain of', - 'nacos.component.NameSpaceList.Quick_to_learn0': 'Learning Path', - 'nacos.component.CloneDialog.get_the_namespace_failed': 'get the namespace failed', - 'com.alibaba.nacos.component.EditorNameSpace.namespace': 'Namespace cannot be empty', - 'nacos.component.validateDialog.remark': - 'Tip: The verification code will be sent through SMS to your bound phone number.', - 'com.alibaba.nacos.page.consistencyEfficacy.query': 'Query', - 'com.alibaba.nacos.page.environmentalManagement.environment_name': 'environment name,', - 'com.alibaba.nacos.page.listAllEnvironmental.environment_IP': 'environment IP', - 'com.alibaba.nacos.page.listeningToQuery.success': 'Success', - 'nacos.component.CloneDialog.|_the_selected_entry': '| Selected entry', - 'com.alibaba.nacos.component.MiddleWareEnv.offline': 'Offline', - 'com.alibaba.nacos.page.listeningToQuery.please_input_ip': 'Enter IP', - 'com.alibaba.nacos.page.historyDetail.recipient_from': 'Collapse', - 'com.alibaba.nacos.page.newconfig.configuration_format': 'Configuration Content', - 'com.alibaba.nacos.component.NewDatePicker.query_range:': 'Customize', - 'nacos.component.CloneDialog.skip': 'Skip', - 'com.alibaba.nacos.page.listeningToQuery.please_enter_the_dataid': 'Enter Data ID', - 'com.alibaba.nacos.component.NewDatePicker.7_day': '7 days', - 'nacos.component.ShowCodeing.-Dproject.name=acmtest_-Dspas.identity=CUserswater.lyl.spas_keyacmt': - '-Dproject.name=acmtest -Dspas.identity=C:Userswater.lyl.spas_keyacmtest\t\t\t * 在本地的acmtest文件中填写accessKey/secretKey,格式如下\t\t\t * accessKey=', - 'com.alibaba.nacos.service.fill_the_code': 'Please fill out the verification code', - 'com.alibaba.nacos.page.historyDetail.more_advanced_options': 'Advanced Options', - 'com.alibaba.nacos.page.newconfig.configure_contents_of': 'Press F1 to view in full screen', - 'nacos.component.ImportDialog.file_upload_directly_after_importing_the_configuration,_please_be_': - 'Caution: Data will be imported directly after uploading.', - 'com.alibaba.nacos.page.newconfig.configuration_contentmax': - 'Configuration content cannot exceed 10240 characters in length', - 'com.alibaba.nacos.page.listAllEnvironmental.all_available_environment': - 'all available environment', - 'nacos.page.configurationManagement.configuration_management8': 'configuration management', - 'com.alibaba.nacos.component.NewDatePicker.': 'Last', - 'nacos.page.configurationManagement.configuration': ' configuration', - 'nacos.page.configurationManagement._The_process_is_successful,_delete_the': - 'Process successfully, delete ', - 'com.alibaba.nacos.page.configsync.target': 'Target Region:', - 'com.alibaba.nacos.page.newconfig.new_listing': 'Create Configuration', - Configdetail: 'Configuration Details', - 'nacos.page.configdetail.Tags': 'Tags:', - listeningToQuery: 'Listening Query', - 'nacos.page.configurationManagement.,_wherein': ', wherein ', - 'com.alibaba.nacos.page.configRollback.retracted': 'Collapse', - 'nacos.component.validateDialog.title': 'Account Security Verification', - 'com.alibaba.nacos.page.configsync.belongs_to_the_environment': 'Region:', - 'com.alibaba.nacos.page.configeditor.return': 'Publish', - 'com.alibaba.nacos.page.historyRollback.queryresult': 'Search Results: Found', - 'com.alibaba.nacos.page.configurationManagement.the_sample_code': 'Code Example', - 'nacos.page.configurationManagement.Cloning_check_fails': 'Cloning check fails', - 'nacos.page.configurationManagement.process_is_successful,_import_the': - 'Process successfully, import ', - 'com.alibaba.nacos.page.consistencyEfficacy.environment_marked': 'environment marked', - 'com.alibaba.nacos.page.namespace.namespace_names': 'Namespaces ', - 'nacos.page.namespace.details': 'Details', - 'com.alibaba.nacos.page.configdetail.error': 'Error', - 'com.alibaba.nacos.component.AddGroup.a_new_group': 'Create Group', - 'com.alibaba.nacos.component.DiffEditorDialog.contents': 'Content Comparison', - 'com.alibaba.nacos.page.configRollback.return': 'Back', - 'com.alibaba.nacos.page.configurationManagement.configuration_management': 'Configurations', - 'nacos.page.configurationManagement.import_failed': 'Import Failed', - 'com.alibaba.nacos.page.consistencyEfficacy.operation': 'Actions', - 'nacos.component.ExportDialog.configuration_number6': 'Items:', - 'com.alibaba.nacos.page.pushTrajectory.getconifg': 'Configuration Push or Get Configuration', - 'com.alibaba.nacos.page.environmentalManagement.view_environment_IP': 'View environment IP', - historyDetail: 'History Details', - 'com.alibaba.nacos.component.EditorNameSpace.private': 'Public Space', - 'com.alibaba.nacos.page.configdetail.beta_release': 'Beta Publish:', - 'com.alibaba.nacos.page.historyRollback.group': 'Enter Group', - 'com.alibaba.nacos.component.NameSpaceList.Prompt': 'Notice', - 'com.alibaba.nacos.page.pushTrajectory.the_query_results': 'Search Results: Found', - 'com.alibaba.nacos.page.pushTrajectory.used': 'New Configuration Published', - 'nacos.page.namespace._Details_of6': ' Details of', - 'nacos.page.namespace.namespace_number': 'Namespace ID', - 'com.alibaba.nacos.page.historyrollback.query': 'Search', - 'nacos.component.ExportDialog.tags2': 'Tags:', - 'nacos.page.configurationManagement.Please_enter_tag': 'Enter Tag', - 'nacos.component.ImportDialog.You_can_only_upload._zip_file_format0': - 'Only upload. zip file format', - 'nacos.component.CloneDialog.|_the_selected_entry4': '| Selected Entry', - 'com.alibaba.nacos.page.pushTrajectory.track': 'push tracks.', - 'nacos.page.configurationManagement.HOME_Application0': 'Application:', - 'com.alibaba.nacos.component.NewDatePicker.24_hours': '24 hours', - 'com.alibaba.nacos.component.DiffEditorDialog.confirm_that_the': 'Publish', - 'com.alibaba.nacos.component.EditorNameSpace.prompt': 'Notice', - 'nacos.page.namespace.AccessKey_recommended1': - 'AccessKey (Recommended for development environment):', - 'com.alibaba.nacos.page.configsync.sync': 'Synchronize', - 'com.alibaba.nacos.page.historyRollback.to_configure': - 'Historical Versions (Configuration record is retained for 30 days.)', - 'com.alibaba.nacos.page.pushTrajectory.interval': 'Time Range:', - 'com.alibaba.nacos.component.MiddleWareEnv.daily': 'Daily', - pushTrajectory: 'Push Tracks', - 'com.alibaba.nacos.component.MiddleWareEnv.switch_environment': 'Switch Environment', - 'com.alibaba.nacos.component.NewDatePicker.determine': 'to', - 'nacos.page.configdetail.Open0': 'Open', - 'com.alibaba.nacos.page.historyRollback.article_meet': 'configuration items.', - 'com.alibaba.nacos.page.configeditor.release': 'Beta Publish', - 'nacos.page.newconfig.to_the_authorization_of2': 'to the authorization of', - 'com.alibaba.nacos.component.NewNameSpace.namespacenotnull': 'Namespace cannot be empty', - 'nacos.page.newconfig.Note_You_are_to_be_a_custom_packet_the_new_configuration,_make_sure_that_the_client_use_the_Pandora_version_higher_than_3._4._0,_otherwise_it_may_read_less_than_the_configuration.0': - '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.', - 'com.alibaba.nacos.page.configRollback.action_type': 'Action Type:', - 'nacos.page.configurationManagement.SecretKey_recommended4': 'SecretKey recommended:', - 'nacos.component.validateDialog.cancel': 'cancel', - 'com.alibaba.nacos.component.AddGroup.group_name': 'Group name:', - 'nacos.page.configurationManagement.no_longer_display4': 'no longer display:', - 'com.alibaba.nacos.component.DiffEditorDialog.of_the_current_area': 'Current Value', - 'com.alibaba.nacos.page.configRollback.belongs_to': 'Region:', - 'com.alibaba.nacos.page.configeditor.F1/fn F1(MAC)full_screen': 'Configuration Content', - recent: 'Last ', - configurationManagement: 'Configurations', - 'com.alibaba.nacos.page.historyRollback.operation': 'Actions', - 'com.alibaba.nacos.page.historyDetail.action_type': 'Action Type:', - 'com.alibaba.nacos.component.MiddleWareEnv.online': 'Online', - 'nacos.page.configurationManagement.configuration_item?': 'configuration items?', - 'com.alibaba.nacos.page.pushTrajectory.configget': 'Get Configuration', - 'com.alibaba.nacos.page.listeningToQuery._Push_state': 'Push Status', - 'com.alibaba.nacos.page.listAllEnvironmental.Into_the': 'Into the', - 'com.alibaba.nacos.page.pushTrajectory.user_Ip:': 'User IP:', - 'nacos.component.CloneDialog.start_cloning': 'Start Clone', - 'com.alibaba.nacos.page.configurationManagement.new_listing': 'Create Configuration', - 'com.alibaba.nacos.component.MiddleWareEnv.online_center': 'Online Center', - 'nacos.component.ShowCodeing.-Dproject.name=acmtest_-Dspas.identity=CUserswater.lyl.spas_keyacmtest_*_在本地的acmtest文件中填写accessKey/secretKey,格式如下_*_accessKey=': - '-Dproject.name=acmtest -Dspas.identity=C:Userswater.lyl.spas_keyacmtest\t\t\t * 在本地的acmtest文件中填写accessKey/secretKey,格式如下\t\t\t * accessKey=', - 'com.alibaba.nacos.page.configRollback.for_more_advanced': 'Advanced Options', - 'com.alibaba.nacos.page.configurationManagement.last_modified_time': 'Last Modified At', - namespace: 'Namespaces', - 'nacos.page.configdetail.Data_encryption0': 'Data encryption', - 'com.alibaba.nacos.component.NewDatePicker.3_day': '3 days', - 'nacos.component.ShowCodeing.package_com.alibaba.middleware.acm;import_java.util.Properties;impo': - 'package com.alibaba.middleware.acm;import java.util.Properties;import com.alibaba.edas.acm.ConfigService;import com.alibaba.edas.acm.exception.ConfigException;import com.alibaba.edas.acm.listener.ConfigChangeListener;import com.alibaba.edas.acm.listener.PropertiesListener;// 示例代码,仅用于示例测试public class ACMTest { // 属性/开关 private static String config = "DefaultValue";\t private static Properties acmProperties = new Properties(); \tpublic static void main(String[] args) {\t\ttry {\t\t\t\t\t\t// 本地调试模式。本机测试无法连接ACM服务集群,因此设置debug模式(该模式下获取值为null,不会进入回调函数)。\t\t\t// ConfigService.setDebug(true);\t\t\t\t\t\t// 初始化配置服务,控制台通过示例代码自动获取下面参数\t\t\tConfigService.init("', - 'com.alibaba.nacos.page.consistencyEfficacy.query_results': 'Search Results', - 'com.alibaba.nacos.page.environmentalManagement.environment_marked': 'environment marked', - 'com.alibaba.nacos.page.listeningToQuery.failure': 'Failure', - 'com.alibaba.nacos.page.environmentalManagement.view': 'View', - 'com.alibaba.nacos.page.configdetail.home': 'Application:', - 'com.alibaba.nacos.page.pushTrajectory.please_enter': 'Enter IP', - 'com.alibaba.nacos.page.historyRollback.rollback': 'Roll Back', - 'nacos.page.configurationManagement.note_ACM_is_dedicated_AK/SK_is_mainly_used_for_some_of_the_compatibility_scenario,_it_is_recommended_to_Unified_the_use_of_Ali_cloud_AK/SK.7': - "Note: ACM's dedicated AK/SK is mainly used for improved compatibilities. We recommend that you always use Alibaba Cloud AK/SK.", - 'com.alibaba.nacos.page.consistencyEfficacy.reset': 'Reset', - 'nacos.component.ExportDialog.export_configuration4': 'Export ( ', - 'com.alibaba.nacos.page.environmentalManagement.environment_ip': 'environment IP', - 'com.alibaba.nacos.component.MiddleWareEnv.new_diamond': 'Diamond(New Version)', - 'com.alibaba.nacos.page.environmentalManagement.Into_the': 'Into the', - 'com.alibaba.nacos.page.configdetail.recipient_from': 'Collapse', - 'com.alibaba.nacos.page.configurationManagement.listener_query': - 'Configuration Listening Query', - 'com.alibaba.nacos.page.configurationManagement.suredelete': - 'Are you sure you want to delete the following configuration?', - 'nacos.component.CloneDialog.cover': 'Cover', - 'nacos.page.configdetail.Description': 'Description:', - 'com.alibaba.nacos.component.NewDatePicker.end_time_must_be_greater_than_the_start_time_of_the_t': - 'The end time must be after the starttime', - 'nacos.component.ShowCodeing.*///_ConfigService.init();_//_主动获取配置_String_content_=_ConfigService': - '*///\t\t\tConfigService.init();\t\t\t\t\t\t// 主动获取配置\t\t\tString content = ConfigService.getConfig("', - 'com.alibaba.nacos.page.environmentalManagement.all_available_environment': - 'all available environment', - 'nacos.page.configurationManagement.no_announcement6': 'no announcement', - 'com.alibaba.nacos.page.listeningToQuery.please_input_group': 'Enter Group', - 'com.alibaba.nacos.page.configsync.for_more_advanced_options': 'Advanced Options', - 'com.alibaba.nacos.page.historyDetail.history_details': 'History Details', - 'com.alibaba.nacos.component.NewDatePicker.custom': 'The time range cannot exceed 45 days', - 'nacos.component.ShowCodeing.,_6000);_System.out.println(content);_//_初始化的时候,给配置添加监听,配置变更会回调通知_C': - '", 6000);\t\t\tSystem.out.println(content);\t\t\t// 初始化的时候,给配置添加监听,配置变更会回调通知\t\t\tConfigService.addListener("', - 'nacos.component.validateDialog.Please_fill_out_the_verification_code': - 'Enter the verification code:', - 'com.alibaba.nacos.page.newconfig.the_target_environment': 'Format:', - 'nacos.page.configurationManagement.questionnaire2': 'questionnaire', - 'nacos.page.configdetail.off1': 'off', - 'nacos.page.configurationManagement.clone': 'Clone', - 'com.alibaba.nacos.component.MiddleWareEnv.daily_test_center': 'Daily Test Center', - 'com.alibaba.nacos.page.configRollback.the_following_configuration': - 'the following configuration?', - 'nacos.page.configurationManagement.failed_entry': 'Failed Entry:', - 'com.alibaba.nacos.component.NewNameSpace.cancel': 'Cancel', - 'nacos.component.CloneDialog.select_namespace': 'Select Namespace', - 'nacos.page.configurationManagement.export': 'Export', - 'nacos.page.configurationManagement.AccessKey_recommended2': 'AccessKey recommended:', - 'com.alibaba.nacos.component.MiddleWareEnv.line': 'Online/', - 'com.alibaba.nacos.component.NewNameSpace.loading': 'Loading...', - 'nacos.page.newconfig.Note_You_are_to_be_a_custom_packet_the_new_configuration,_make_sure_that_t': - 'Note: You are to be a custom packet the new configuration, make sure that the client use the Pandora version higher than 3. 4. 0, otherwise it may read less than the configuration.', - 'com.alibaba.nacos.page.configurationManagement.fuzzyg': 'Enter Group', - 'com.alibaba.nacos.page.pushTrajectory.interval:': 'Time Range:', - 'nacos.component.ImportDialog.skip1': 'Skip', - 'com.alibaba.nacos.page.listeningToQuery.query_results:_query': 'Search Results: Found', - 'com.alibaba.nacos.page.form.Data_Id_can_not_be_empty': 'Data ID cannot be empty', - 'com.alibaba.nacos.page.listeningToQuery.group_can_not_be_empty': 'Group cannot be empty', - 'com.alibaba.nacos.page.pushTrajectory.please_input_Group': 'Enter Group', - 'com.alibaba.nacos.page.configRollback.rollback_successful': 'Rollback Successful', - 'com.alibaba.nacos.component.MiddleWareEnv.payTM_daily': 'payTM Daily', - 'nacos.page.configurationManagement.unprocessed_entry': 'Unprocessed Entry:', - 'nacos.component.ImportDialog.To_terminate_the_import0': 'Terminate', - 'nacos.page.configurationManagement.import': 'Import', - 'com.alibaba.nacos.page.configRollback.configuration_rollback': 'Configuration Rollback', - 'nacos.page.configurationManagement.HOME_Application': 'Application', - 'com.alibaba.nacos.layout.noenv.app_configuration_management_acm': 'NACOS', - 'nacos.page.namespace.SecretKey_recommended2': 'SecretKey recommended:', - newconfig: 'Create Configuration', - 'nacos.component.validateDialog.fill_the_code': 'Please fill out the verification code', - 'nacos.page.configurationManagement.ecs_ram_role': - 'Automatically issued the AccessKey and SecretKey (Recommended for production environment):', - 'nacos.component.DeleteDialog.Configuration_management': 'Configuration Management', - 'com.alibaba.nacos.page.pushTrajectory.The_new_configuration_value_persistent': - 'Configuration Published', - 'nacos.page.newconfig.Description': 'Description:', - 'nacos.component.ImportDialog.Import_configuration4': 'Import ( ', - 'com.alibaba.nacos.page.configurationManagement.clickfordetail': 'Learn more about ACM SDKs', - 'com.alibaba.nacos.page.newconfig.collapse': 'Advanced Options', - 'com.alibaba.nacos.page.configurationManagement.click_to_learn_Group': 'Learn more about Group', - 'com.alibaba.nacos.component.NewDatePicker.30_minutes': '30 minutes', - 'com.alibaba.nacos.page.namespace.delete': 'Delete', - 'nacos.page.namespace.ACM_special_SecretKey_will_be_abandoned,_not_recommended_for_use4': - 'ACM special SecretKey will be abandoned, not recommended for use:', - dateinfo2: 'The time range cannot exceed 45 days', - 'com.alibaba.nacos.page.newconfig.publish_failed': - 'Publish failed. Make sure parameters are entered correctly.', - 'com.alibaba.nacos.page.consistencyEfficacy.configuration_consistency_check': - 'Configuration Consistency Check', - 'nacos.page.configurationManagement.configuration_export9': 'Export', - 'com.alibaba.nacos.page.configsync.sync_configuration_main': 'Synchronize Configuration', - 'com.alibaba.nacos.page.namespace.public': 'public(to retain control)', - 'com.alibaba.nacos.page.configeditor.wrong': 'Error', - 'com.alibaba.nacos.page.configsync.error': 'Error', - 'nacos.page.configurationManagement.ACM_special_SecretKey_will_be_abandoned,_not_recommended_for': - 'ACM special SecretKey will be abandoned, not recommended for use:', - 'com.alibaba.nacos.page.newconfig.release': 'Back', - 'com.alibaba.nacos.component.NewDatePicker.4_hours': '4 hours', - 'com.alibaba.nacos.page.configeditor.toedit': 'Edit Configuration', - 'nacos.page.configurationManagement.AccessKey_recommended3': - 'AccessKey (Recommended for development environment):', - 'nacos.page.configurationManagement.items_for': ' items are ', - 'com.alibaba.nacos.page.pushTrajectory.query_dimension': 'Query Dimension:', - 'com.alibaba.nacos.page.listeningToQuery.configuration': 'Configuration', - 'com.alibaba.nacos.page.configsync.retracted': 'Collapse', - 'com.alibaba.nacos.component.NewDatePicker.12_hours': '12 hours', - 'nacos.page.pushTrajectory.Please_enter_the_user_IP0': 'Enter IP', - 'com.alibaba.nacos.component.MiddleWareEnv.international': 'Internationalization', - 'com.alibaba.nacos.page.configeditor.the_target_environment:': 'Application:', - day: ' days', - 'nacos.page.configurationManagement.please_input_the_application_name': 'Enter app name', - 'nacos.component.ImportDialog.file_upload_directly_after_importing_the_configuration,_please_be_sure_to_exercise_caution7': - 'Caution: data will be imported directly after uploading.', - 'com.alibaba.nacos.page.configurationManagement.delete': 'Delete', - 'com.alibaba.nacos.component.SuccessDialog.Configuration_management': - 'Configuration Management', - 'com.alibaba.nacos.page.configRollback.updated': 'Update', - 'com.alibaba.nacos.page.configRollback.determine': 'Are you sure you want to roll back', - 'nacos.component.DeleteDialog.deleted_successfully_configured': 'Configuration deleted', - 'nacos.page.configurationManagement.export_check_failed': 'Export check failed.', - 'com.alibaba.nacos.page.configeditor.configcontent': 'Configuration Content', - 'nacos.page.namespace.AccessKey_recommended0': 'AccessKey recommended:', - 'nacos.page.namespace.region_ID': 'Region ID:', - 'com.alibaba.nacos.component.NewNameSpace.norepeat': - 'Duplicate namespace. Please enter a different name.', - 'com.alibaba.nacos.component.EditorNameSpace.load': 'Namespace:', - 'com.alibaba.nacos.page.configurationManagement.version': 'Historical Versions', - 'com.alibaba.nacos.page.namespace.operation': 'Actions', - 'com.alibaba.nacos.page.newconfig': 'Data ID cannot be empty.', - 'nacos.component.validateDialog.verification_code_error': 'verification code error', - 'nacos.page.namespace.remove_the_namespace': 'Remove the namespace', - 'com.alibaba.nacos.component.MiddleWareEnv.performance': 'Performance', - 'nacos.page.namespace.note_ACM_is_dedicated_AK/SK_is_mainly_used_for_some_of_the_compatibility_s': - 'note: ACM is dedicated AK/SK is mainly used for some of the compatibility scenario, it is recommended to Unified the use of Ali cloud AK/SK.', - 'nacos.component.ExportDialog.|_The_selected_entry0': '| Selected Entry', - 'com.alibaba.nacos.component.EditorNameSpace.confirm_modify': 'Edit Namespace', - 'com.alibaba.nacos.page.newconfig.do_not_ente': 'Illegal characters not allowed', - 'nacos.page.newconfig.Data_encryption0': 'Data encryption', - 'nacos.component.ShowCodeing.,_6000);_System.out.println(content);_//_初始化的时候,给配置添加监听,配置变更会回调通知_ConfigService.addListener(': - '", 6000);\t\t\tSystem.out.println(content);\t\t\t// 初始化的时候,给配置添加监听,配置变更会回调通知\t\t\tConfigService.addListener("', - 'nacos.page.configurationManagement.Clone_failed': 'Clone failed', - 'com.alibaba.nacos.page.configdetail.return': 'Back', - 'com.alibaba.nacos.page.configeditor.stop_beta': 'Stop Beta Publishing', - 'com.alibaba.nacos.component.NewNameSpace.input': 'Illegal characters not allowed', - 'nacos.page.configurationManagement.Tags': 'Tags:', - 'com.alibaba.nacos.page.pushTrajectory.cluster_synchronization': - 'Synchronization across Clusters ', - 'nacos.page.namespace.ecs_ram_role': - 'Automatically issued the AccessKey and SecretKey (Recommended for production environment):', - 'nacos.page.configurationManagement.whether_to_delete_the_selected': - 'Are you sure to delete the selected', - 'nacos.page.configeditor.Tags': 'Tags:', - 'com.alibaba.nacos.page.newconfig.stop_beta': 'Stop Beta Publishing', - 'nacos.component.NameSpaceList.Announcement_nodejs_version_is_developed,supports_a_custom_message': - 'Announcement: Node.js version now available, supporting customized messages.', - 'nacos.page.configurationManagement.bulk_delete': 'Delete', - 'com.alibaba.nacos.page.serviceManagement.service_list': 'Service List', - 'com.alibaba.nacos.page.serviceManagement.service_name': 'Service Name', - 'com.alibaba.nacos.page.serviceManagement.please_enter_the_service_name': 'Enter Service Name', - 'com.alibaba.nacos.page.serviceManagement.table.column.service_name': 'Service Name', - 'com.alibaba.nacos.page.serviceManagement.table.column.cluster_count': 'Cluster Count', - 'com.alibaba.nacos.page.serviceManagement.table.column.ip_count': 'Instance Count', - 'com.alibaba.nacos.page.serviceManagement.table.column.healthy_instance_count': - 'Healthy Instance Count', - 'com.alibaba.nacos.page.serviceManagement.table.column.operation': 'Operation', - 'com.alibaba.nacos.page.serviceManagement.detail': 'Details', - 'com.alibaba.nacos.page.serviceManagement.delete': 'Delete', - 'com.alibaba.nacos.page.serviceManagement.prompt': 'Confirm', - 'com.alibaba.nacos.page.serviceManagement.prompt_delete': 'Do you want to delete the service?', - 'com.alibaba.nacos.page.serviceManagement.create': 'Create Service', - 'com.alibaba.nacos.page.serviceManagement.query': 'Search', - serviceManagement: 'Service Management', - 'com.alibaba.nacos.page.serviceDetail.service_details': 'Service Details', - 'com.alibaba.nacos.page.serviceDetail.create_service': 'Create Service', - 'com.alibaba.nacos.page.serviceDetail.edit_service': 'Edit Service', - 'com.alibaba.nacos.page.serviceDetail.back': 'Back', - 'com.alibaba.nacos.page.serviceDetail.service_name': 'Service Name', - 'com.alibaba.nacos.page.serviceDetail.protect_threshold': 'Protect Threshold', - 'com.alibaba.nacos.page.serviceDetail.health_check_pattern': 'Health check pattern', - 'com.alibaba.nacos.page.serviceDetail.health_check_pattern.service': 'Service', - 'com.alibaba.nacos.page.serviceDetail.health_check_pattern.client': 'Client', - 'com.alibaba.nacos.page.serviceDetail.health_check_pattern.none': 'None', - 'com.alibaba.nacos.page.serviceDetail.metadata': 'Metadata', - 'com.alibaba.nacos.page.serviceDetail.update_service': 'Update Service', - 'com.alibaba.nacos.page.serviceDetail.cluster': 'Cluster', - 'com.alibaba.nacos.page.serviceDetail.edit_cluster': 'Edit Cluster', - 'com.alibaba.nacos.page.serviceDetail.port': 'Port', - 'com.alibaba.nacos.page.serviceDetail.weight': 'Weight', - 'com.alibaba.nacos.page.serviceDetail.healthy': 'Healthy', - 'com.alibaba.nacos.page.serviceDetail.operation': 'Operation', - 'com.alibaba.nacos.page.serviceDetail.editor': 'Edit', - 'com.alibaba.nacos.page.serviceDetail.offline': 'Offline', - 'com.alibaba.nacos.page.serviceDetail.online': 'Online', - 'com.alibaba.nacos.page.serviceDetail.check_type': 'Check Type', - 'com.alibaba.nacos.page.serviceDetail.check_port': 'Check Port', - 'com.alibaba.nacos.page.serviceDetail.use_ip_port_check': 'Use port of IP', - 'com.alibaba.nacos.page.serviceDetail.check_path': 'Check Path', - 'com.alibaba.nacos.page.serviceDetail.check_headers': 'Check Headers', - 'com.alibaba.nacos.page.serviceDetail.update_cluster': 'Update Cluster', - 'com.alibaba.nacos.page.serviceDetail.update_instance': 'Update Instance', - 'com.alibaba.nacos.page.serviceDetail.whether_online': 'Whether Online', - serviceDetail: 'Service Details', - 'nacos.page.ConfigEditor.submit_failed': 'Cannot be empty, submit failed', - }, -}; diff --git a/console/src/main/resources/static/console-fe/src/index.js b/console/src/main/resources/static/console-fe/src/index.js index 6fe257b25..900004895 100644 --- a/console/src/main/resources/static/console-fe/src/index.js +++ b/console/src/main/resources/static/console-fe/src/index.js @@ -44,6 +44,9 @@ import ServiceList from './pages/ServiceManagement/ServiceList'; import ServiceDetail from './pages/ServiceManagement/ServiceDetail'; import SubscriberList from './pages/ServiceManagement/SubscriberList'; import ClusterNodeList from './pages/ClusterManagement/ClusterNodeList'; +import UserManagement from './pages/AuthorityControl/UserManagement'; +import PermissionsManagement from './pages/AuthorityControl/PermissionsManagement'; +import RolesManagement from './pages/AuthorityControl/RolesManagement'; import Welcome from './pages/Welcome/Welcome'; import reducers from './reducers'; @@ -65,10 +68,7 @@ const reducer = combineReducers({ const store = createStore( reducer, - compose( - applyMiddleware(thunk), - window[REDUX_DEVTOOLS] ? window[REDUX_DEVTOOLS]() : f => f - ) + compose(applyMiddleware(thunk), window[REDUX_DEVTOOLS] ? window[REDUX_DEVTOOLS]() : f => f) ); const MENU = [ @@ -89,12 +89,12 @@ const MENU = [ { path: '/serviceDetail', component: ServiceDetail }, { path: '/subscriberList', component: SubscriberList }, { path: '/clusterManagement', component: ClusterNodeList }, + { path: '/userManagement', component: UserManagement }, + { path: '/rolesManagement', component: RolesManagement }, + { path: '/permissionsManagement', component: PermissionsManagement }, ]; -@connect( - state => ({ ...state.locale }), - { changeLanguage } -) +@connect(state => ({ ...state.locale }), { changeLanguage }) class App extends React.Component { static propTypes = { locale: PropTypes.object, diff --git a/console/src/main/resources/static/console-fe/src/index.scss b/console/src/main/resources/static/console-fe/src/index.scss index 43296514b..798d08033 100644 --- a/console/src/main/resources/static/console-fe/src/index.scss +++ b/console/src/main/resources/static/console-fe/src/index.scss @@ -1217,10 +1217,6 @@ form.vertical-margin-lg .form-group { border-color: #e0e0e0 !important; } -.main-container { - padding: 10px; -} - .row-bg-green { background-color: #e4fdda; } diff --git a/console/src/main/resources/static/console-fe/src/layouts/MainLayout.js b/console/src/main/resources/static/console-fe/src/layouts/MainLayout.js index 997338ce6..18266e2a7 100644 --- a/console/src/main/resources/static/console-fe/src/layouts/MainLayout.js +++ b/console/src/main/resources/static/console-fe/src/layouts/MainLayout.js @@ -13,506 +13,122 @@ import React from 'react'; import { withRouter } from 'react-router-dom'; -import PropTypes from 'prop-types'; -import { ConfigProvider, Icon } from '@alifd/next'; -import Header from './Header'; -import $ from 'jquery'; import { connect } from 'react-redux'; -import { setParams } from '../globalLib'; +import PropTypes from 'prop-types'; +import { ConfigProvider, Icon, Menu } from '@alifd/next'; +import Header from './Header'; import { getState } from '../reducers/base'; -import _menu from '../menu'; +import getMenuData from './menu'; -import './index.scss'; +const { SubMenu, Item } = Menu; @withRouter -@connect( - state => ({ ...state.locale, ...state.base }), - { getState } -) +@connect(state => ({ ...state.locale, ...state.base }), { getState }) @ConfigProvider.config class MainLayout extends React.Component { static displayName = 'MainLayout'; static propTypes = { - history: PropTypes.object, - location: PropTypes.object, locale: PropTypes.object, - children: PropTypes.any, + history: PropTypes.object, version: PropTypes.any, - functionMode: PropTypes.any, getState: PropTypes.func, + functionMode: PropTypes.string, }; - constructor(props) { - super(props); - this.deepNav = []; - this.oneLevelNavArr = {}; // 平行导航map - this.state = { - navList: [..._menu.data], - leftBarClose: false, - showLink: null, - navRow: [], - noChild: false, - }; - } - componentDidMount() { this.props.getState(); - this.refreshNav(); } goBack() { this.props.history.goBack(); } - nacosToggleNav(id, event) { - event.preventDefault(); - const nowNav = document.getElementById(id); - const iconClass = nowNav.querySelector('.iconshow'); - const subNav = nowNav.querySelector('.subnavlist'); - const { classList } = iconClass; - let tmpClassName = 'iconshow '; - for (let i = 0; i < classList.length; i++) { - if (classList[i] === 'icon-arrow-down') { - subNav.style.display = 'none'; - subNav.className += ' hidden'; - tmpClassName += 'icon-arrow-right'; - } - if (classList[i] === 'icon-arrow-right') { - tmpClassName += 'icon-arrow-down'; - subNav.className = subNav.className.replace(/hidden/g, ''); - subNav.style.display = 'block'; - } - } - iconClass.className = tmpClassName; - } - - /** - * Click the back button - * TODO: this.props.history.goBack(); ??? - * @param url - */ - nacosGoBack(url) { - const params = window.location.hash.split('?')[1]; - const urlArr = params.split('&') || []; - const queryParams = []; - for (let i = 0; i < urlArr.length; i++) { - if ( - urlArr[i].split('=')[0] !== '_k' && - urlArr[i].split('=')[0] !== 'dataId' && - urlArr[i].split('=')[0] !== 'group' - ) { - if (urlArr[i].split('=')[0] === 'searchDataId') { - queryParams.push(`dataId=${urlArr[i].split('=')[1]}`); - } else if (urlArr[i].split('=')[0] === 'searchGroup') { - queryParams.push(`group=${urlArr[i].split('=')[1]}`); - } else { - queryParams.push(urlArr[i]); - } - } - } - if (localStorage.getItem('namespace')) { - queryParams.push(`namespace=${localStorage.getItem('namespace')}`); - } - this.props.history.push(`/${url}?${queryParams.join('&')}`); - } - - nacosEnterBack() { - document.getElementById('backarrow').style.color = '#09c'; - } - - nacosOutBack() { - document.getElementById('backarrow').style.color = '#546478'; - } - - nacosToggleLeftBar() { - if (!this.nacosOutDom) return; - if (!this.state.leftBarClose) { - // 关闭 - this.nacosOutDom.className = 'viewFramework-product'; - this.nacosLeftBarDom.style.width = 0; - this.nacosBodyDom.style.left = 0; - this.nacosToggleIconDom.style.left = 0; - } else { - this.nacosOutDom.className = 'viewFramework-product viewFramework-product-col-1'; - this.nacosLeftBarDom.style.width = '180px'; - this.nacosBodyDom.style.left = '180px'; - this.nacosToggleIconDom.style.left = '160px'; - } - - this.setState({ - leftBarClose: !this.state.leftBarClose, - }); - } - navTo(url) { - if (url !== '/configdetail' && url !== '/configeditor') { - // 二级菜单不清空 - setParams({ - dataId: '', - group: '', - }); - } - - const params = window.location.hash.split('?')[1]; - const urlArr = params.split('&') || []; - const queryParams = []; - for (let i = 0; i < urlArr.length; i++) { - if (urlArr[i].split('=')[0] !== '_k') { - queryParams.push(urlArr[i]); - } - } - - this.props.history.push(`${url}?${queryParams.join('&')}`); + const { search } = this.props.location; + this.props.history.push([url, search].join('')); } - nacosSetSpecialNav(item) { - item.children.forEach(_item => { - const obj = _item; + isCurrentPath(url) { + const { location } = this.props; + return url === location.pathname ? 'current-path' : undefined; + } - if (obj.dontUseChild === true) { - obj.parentName = item.title; - obj.parentId = item.id; - obj.parentPath = `/${item.id}`; - this.deepNav.push(obj); - } - if (_item.children) { - this.nacosSetSpecialNav(_item); + defaultOpenKeys() { + const MenuData = getMenuData(this.props.functionMode); + for (let i = 0, len = MenuData.length; i < len; i++) { + const { children } = MenuData[i]; + if (children && children.filter(({ url }) => url === this.props.location.pathname).length) { + return String(i); } + } + } + + isShowGoBack() { + const urls = []; + const MenuData = getMenuData(this.props.functionMode); + MenuData.forEach(item => { + if (item.url) urls.push(item.url); + if (item.children) item.children.forEach(({ url }) => urls.push(url)); }); - } - - nacosNavAct(serviceName, match, location) { - if (!match) { - const formatpath = location.pathname.substr(1); // 得到当前路径 - const nowpathobj = this.oneLevelNavArr[formatpath]; // 根据平行导航匹配父类 - if (nowpathobj) { - if (nowpathobj.parent === serviceName) { - // 如果父类等于当前的导航则高亮 - return true; - } - } - - return false; - } - return true; - } - - nacosLoopNavDeeply(data, parentServiceName) { - // 深度遍历获取所有的导航数据 - data.forEach(item => { - if (item) { - const navObj = item; - - const _parentServiceName = item.serviceName; - navObj.parentServiceName = parentServiceName; - this.oneLevelNavArr[item.serviceName] = navObj; // 得到每一个层级的导航映射 - if (item.children && item.children.length > 0) { - this.nacosLoopNavDeeply(item.children, _parentServiceName); - } - } - }); - } - - activeNav(id) { - if (this.preActNav) { - this.preActNav.removeClass('active'); - } - const nowNav = $(`#${id}`); - nowNav.addClass('active'); - this.preActNav = nowNav; - } - - nacosLoopNav(data, _index = 0, parent) { - const { locale = {}, location = {} } = this.props; - const { pathname } = location; - let index = _index; - // 遍历导航,只显示2级 - const self = this; - return data.map(item => { - if (!item) return ''; - index++; - if (item.dontUseChild === true) return ''; - if (item.children && item.children.length > 0) { - if (item.isVirtual) { - // 如果是虚拟菜单需要增加展开箭头 - const icon = item.isExtend ? ( - - ) : ( - - ); - const hiddenClass = item.isExtend ? '' : 'hidden'; - return ( -
  • -
    - -
    {icon}
    -
    {locale[item.serviceName]}
    -
    -
    -
      - {self.nacosLoopNav(item.children, index)} -
    -
  • - ); - } else { - return ( -
  • - -
    -
    {locale[item.serviceName]}
    -
    -
  • - ); - } - } - return ( -
  • - -
    -
    {locale[item.serviceName]}
    -
    -
  • - ); - }); - } - - nacosGetNav(navList) { - let navRow = ''; // 导航 - if (navList.length > 0) { - navRow = ; - this.nacosLoopNavDeeply(navList); // 深度遍历导航树获得平行map - } - return navRow; - } - - renderNav() { - const { navList } = this.state; - this.nacosLeftBarDom = document.getElementById('viewFramework-product-navbar'); - this.nacosBodyDom = document.getElementById('viewFramework-product-body'); - this.nacosToggleIconDom = document.getElementById('viewFramework-product-navbar-collapse'); - this.nacosOutDom = document.getElementById('page-header-mask'); - const defaultNav = '/configurationManagement'; - this.props.history.listen(location => { - if (this.preSimplePath && this.preSimplePath !== '/') { - if (location.pathname.indexOf(this.preSimplePath) !== -1) { - return; - } - } - const simplePath = window.location.hash.split('?')[0]; - const navName = simplePath.substr('2'); - this.preSimplePath = simplePath; - - if (navName === '') { - this.props.history.push(defaultNav); - setTimeout(() => { - this.activeNav('configurationManagement'); - }); - return; - } - - const nowNavObj = this.oneLevelNavArr[navName]; - if (!nowNavObj) { - this.setState({ - noChild: true, - }); - return; - } - const { parentServiceName } = nowNavObj; - - const parentNav = this.oneLevelNavArr[parentServiceName]; - if (simplePath !== '/' && nowNavObj && parentNav && !parentNav.isVirtual) { - this.setState({ - showLink: ( -
    - -
    - ), - - navRow: , - }); - setTimeout(() => { - const navid = navName; - this.activeNav(navid); - }); - } else { - this.setState({ - showLink: null, - navRow: , - }); - setTimeout(() => { - const navid = navName; - this.activeNav(navid); - }); - } - }); - } - - refreshNav() { - const { navList } = this.state; - const { location, history, functionMode } = this.props; - const [configUrl, serviceUrl, clusterUrl] = [ - '/configurationManagement', - '/serviceManagement', - '/clusterManagement', - ]; - this.setState( - { - navList: navList.map(item => { - if ( - item.serviceName === 'configurationManagementVirtual' && - (functionMode === null || functionMode === 'config') - ) { - item.enable = true; - } - if ( - item.serviceName === 'serviceManagementVirtual' && - (functionMode === null || functionMode === 'naming') - ) { - item.enable = true; - } - if ( - item.serviceName === 'clusterManagementVirtual' && - (functionMode === null || functionMode === 'cluster') - ) { - item.enable = true; - } - return item; - }), - }, - () => this.setState({ navRow: this.nacosGetNav(navList) }, () => this.renderNav()) - ); - if (functionMode === 'config' && location.pathname === serviceUrl) { - history.push(configUrl); - } - if (functionMode === 'naming' && location.pathname === configUrl) { - history.push(serviceUrl); - } - if (functionMode === 'cluster' && location.pathname === clusterUrl) { - history.push(clusterUrl); - } - } - - componentWillReceiveProps() { - setTimeout(() => this.refreshNav()); + return !urls.includes(this.props.location.pathname); } render() { - const { locale = {}, version } = this.props; - const { nacosName, doesNotExist } = locale; - const { showLink, navRow, leftBarClose, noChild } = this.state; + const { locale = {}, version, functionMode } = this.props; + const MenuData = getMenuData(functionMode); return ( -
    + <>
    -
    -
    -
    -
    - {showLink ? ( -
    - {showLink} -
    - ) : ( -
    - {nacosName} - {version} -
    - )} -
    - {navRow} -
    +
    +
    + {this.isShowGoBack() ? ( +
    this.goBack()}> +
    -
    -
    -
    -
    -
    -
    -
    - {leftBarClose ? ( - - ) : ( - - )} -
    -
    -
    -
    -
    - {!noChild ? ( -
    {this.props.children}
    ) : ( -
    - {doesNotExist} -
    + <> +

    + {locale.nacosName} + {version} +

    + + {MenuData.map((subMenu, idx) => + subMenu.children ? ( + + {subMenu.children.map((item, i) => ( + this.navTo(item.url)} + className={this.isCurrentPath(item.url)} + > + {locale[item.key]} + + ))} + + ) : ( + c) + .join(' ')} + onClick={() => this.navTo(subMenu.url)} + > + {locale[subMenu.key]} + + ) + )} + + )}
    +
    {this.props.children}
    -
    + ); } } diff --git a/console/src/main/resources/static/console-fe/src/layouts/index.scss b/console/src/main/resources/static/console-fe/src/layouts/index.scss index e969c34aa..9c6bf51e9 100644 --- a/console/src/main/resources/static/console-fe/src/layouts/index.scss +++ b/console/src/main/resources/static/console-fe/src/layouts/index.scss @@ -11,14 +11,6 @@ * limitations under the License. */ -.header-container { - position: fixed; - left: 0; - top: 0; - width: 100%; - z-index: 1000; - background-color: #fff; -} .header-container-primary { background: #252a2f; } @@ -1396,5 +1388,62 @@ h6 { } .product-nav-list li.selected a { - background-color: #F4F6F8; + background-color: #f4f6f8; +} + +.main-container { + height: calc(100vh - 66px); + .left-panel, + .right-panel { + float: left; + height: 100%; + } + .left-panel { + width: 180px; + background-color: #eaedf1; + } + .right-panel { + width: calc(100% - 180px); + padding: 10px; + } + .nav-title { + margin: 0; + text-align: center; + font-size: 14px; + font-weight: bold; + line-height: 70px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + background-color: #d9dee4; + span { + margin-left: 5px; + } + } + .nav-menu { + padding: 0; + background: transparent; + border: 0; + line-height: 40px; + div.next-menu-item, + .first-menu > .next-menu-item-inner { + color: #333; + } + .next-menu-item-inner { + height: 40px; + color: #666; + } + .current-path { + background-color: #f2f3f7; + } + } + .go-back { + text-align: center; + color: rgb(84, 100, 120); + font-size: 20px; + font-weight: bold; + padding: 10px 0; + margin-top: 14px; + cursor: pointer; + } } diff --git a/console/src/main/resources/static/console-fe/src/layouts/menu.js b/console/src/main/resources/static/console-fe/src/layouts/menu.js new file mode 100644 index 000000000..0068ab727 --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/layouts/menu.js @@ -0,0 +1,61 @@ +export default function(model) { + const configurationMenu = { + key: 'configurationManagementVirtual', + children: [ + { + key: 'configurationManagement', + url: '/configurationManagement', + }, + { + key: 'listeningToQuery', + url: '/listeningToQuery', + }, + ], + }; + return [ + model === 'naming' ? undefined : configurationMenu, + { + key: 'serviceManagementVirtual', + children: [ + { + key: 'serviceManagement', + url: '/serviceManagement', + }, + { + key: 'subscriberList', + url: '/subscriberList', + }, + ], + }, + { + key: 'clusterManagementVirtual', + children: [ + { + key: 'clusterManagement', + url: '/clusterManagement', + }, + ], + }, + { + key: 'authorityControl', + children: [ + { + key: 'userList', + url: '/userManagement', + }, + { + key: 'roleManagement', + url: '/rolesManagement', + }, + { + key: 'privilegeManagement', + url: '/permissionsManagement', + }, + ], + }, + { + key: 'namespace', + url: '/namespace', + }, + ].filter(item => item); +} diff --git a/console/src/main/resources/static/console-fe/src/locales/en-US.js b/console/src/main/resources/static/console-fe/src/locales/en-US.js index 795a7a89e..63e96c6b1 100644 --- a/console/src/main/resources/static/console-fe/src/locales/en-US.js +++ b/console/src/main/resources/static/console-fe/src/locales/en-US.js @@ -50,6 +50,10 @@ const I18N_CONF = { namespace: 'Namespace', clusterManagementVirtual: 'ClusterManagement', clusterManagement: 'Cluster Node List', + authorityControl: 'Authority Control', + userList: 'User List', + roleManagement: 'Role Management', + privilegeManagement: 'Privilege Management', }, Password: { passwordNotConsistent: 'The passwords are not consistent', diff --git a/console/src/main/resources/static/console-fe/src/locales/zh-CN.js b/console/src/main/resources/static/console-fe/src/locales/zh-CN.js index 27ca7e9a7..d22e60f81 100644 --- a/console/src/main/resources/static/console-fe/src/locales/zh-CN.js +++ b/console/src/main/resources/static/console-fe/src/locales/zh-CN.js @@ -50,6 +50,10 @@ const I18N_CONF = { namespace: '命名空间', clusterManagementVirtual: '集群管理', clusterManagement: '节点列表', + authorityControl: '权限控制', + userList: '用户列表', + roleManagement: '角色管理', + privilegeManagement: '权限管理', }, Password: { passwordNotConsistent: '两次输入密码不一致', diff --git a/console/src/main/resources/static/console-fe/src/menu.js b/console/src/main/resources/static/console-fe/src/menu.js deleted file mode 100644 index 8f6622192..000000000 --- a/console/src/main/resources/static/console-fe/src/menu.js +++ /dev/null @@ -1,295 +0,0 @@ -/* - * 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. - */ - -module.exports = { - data: [ - { - enable: false, - isExtend: true, - name: '配置管理', - title: '配置管理', - isVirtual: true, - projectName: 'nacos', - serviceName: 'configurationManagementVirtual', - link: 'configurationManagementVirtual', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.configurationManagementVirtual', - useRouter: false, - id: 'com.alibaba.nacos.page.configurationManagementVirtual', - children: [ - { - isExtend: false, - name: '配置列表', - title: '配置列表', - isVirtual: false, - projectName: 'nacos', - serviceName: 'configurationManagement', - link: 'configurationManagement', - hasFusion: true, - template: '', - dontUseChild: false, - registerName: 'com.alibaba.nacos.page.configurationManagement', - useRouter: false, - id: 'configurationManagement', - children: [ - { - isExtend: false, - name: '配置详情', - title: '配置详情', - isVirtual: false, - projectName: 'nacos', - serviceName: 'configdetail', - link: 'Configdetail', - hasFusion: true, - template: '', - dontUseChild: false, - registerName: 'com.alibaba.nacos.page.configdetail', - useRouter: false, - id: 'configdetail', - }, - { - isExtend: false, - name: '同步配置', - title: '同步配置', - isVirtual: false, - projectName: 'nacos', - serviceName: 'configsync', - link: 'configsync', - hasFusion: true, - template: '', - dontUseChild: true, - registerName: 'com.alibaba.nacos.page.configsync', - useRouter: false, - id: 'configsync', - }, - { - isExtend: false, - name: '配置编辑', - title: '配置编辑', - isVirtual: false, - projectName: 'nacos', - serviceName: 'configeditor', - link: 'configeditor', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.configeditor', - useRouter: false, - id: 'configeditor', - }, - { - isExtend: false, - name: '新建配置', - title: '新建配置', - isVirtual: false, - projectName: 'nacos', - serviceName: 'newconfig', - link: 'newconfig', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.newconfig', - useRouter: false, - id: 'newconfig', - }, - ], - }, - { - isExtend: false, - name: '历史版本', - title: '历史版本', - isVirtual: false, - projectName: 'nacos', - children: [ - { - isExtend: false, - name: '配置回滚', - title: '配置回滚', - isVirtual: false, - projectName: 'nacos', - serviceName: 'configRollback', - link: 'configRollback', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.configRollback', - useRouter: false, - id: 'configRollback', - }, - { - isExtend: false, - name: '历史详情', - title: '历史详情', - isVirtual: false, - projectName: 'nacos', - serviceName: 'historyDetail', - link: 'historyDetail', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.historyDetail', - useRouter: false, - id: 'historyDetail', - }, - ], - serviceName: 'historyRollback', - link: 'historyRollback', - hasFusion: true, - template: '', - dontUseChild: false, - registerName: 'com.alibaba.nacos.page.historyRollback', - useRouter: false, - id: 'historyRollback', - }, - { - isExtend: false, - name: '监听查询', - title: '监听查询', - isVirtual: false, - projectName: 'nacos', - serviceName: 'listeningToQuery', - link: 'listeningToQuery', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.listeningToQuery', - useRouter: false, - id: 'listeningToQuery', - }, - ], - }, - { - enable: false, - isExtend: true, - name: '服务管理', - title: '服务管理', - isVirtual: true, - projectName: 'nacos', - serviceName: 'serviceManagementVirtual', - link: 'serviceManagementVirtual', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.serviceManagementVirtual', - useRouter: false, - id: 'com.alibaba.nacos.page.serviceManagementVirtual', - children: [ - { - isExtend: false, - name: '服务列表', - title: '服务列表', - isVirtual: false, - projectName: 'nacos', - serviceName: 'serviceManagement', - link: 'serviceManagement', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.serviceManagement', - useRouter: false, - id: 'serviceManagement', - children: [ - { - isExtend: true, - name: '服务详情', - title: '服务详情', - isVirtual: true, - projectName: 'nacos', - serviceName: 'serviceDetail', - link: 'serviceDetail', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.ServiceDetail', - useRouter: false, - id: 'serviceDetail', - }, - ], - }, - { - isExtend: false, - name: '订阅者列表', - title: '订阅者列表', - isVirtual: false, - projectName: 'nacos', - serviceName: 'subscriberList', - link: 'subscriberList', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.subscriberList', - useRouter: false, - id: 'subscriberList', - children: [], - }, - ], - }, - { - enable: true, - isExtend: false, - name: '命名空间', - title: '命名空间', - isVirtual: false, - projectName: 'nacos', - serviceName: 'namespace', - link: 'namespace', - hasFusion: true, - template: '', - dontUseChild: false, - registerName: 'com.alibaba.nacos.page.namespace', - useRouter: false, - id: 'namespace', - }, - { - enable: true, - isExtend: false, - name: '修改密码', - title: '修改密码', - isVirtual: false, - projectName: 'nacos', - serviceName: 'password', - link: 'password', - hasFusion: true, - template: '', - dontUseChild: true, - registerName: 'com.alibaba.nacos.page.password', - useRouter: false, - id: 'password', - }, - { - enable: false, - isExtend: true, - name: '集群管理', - title: '集群管理', - isVirtual: true, - projectName: 'nacos', - serviceName: 'clusterManagementVirtual', - link: 'clusterManagementVirtual', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.clusterManagementVirtual', - useRouter: false, - id: 'com.alibaba.nacos.page.clusterManagementVirtual', - children: [ - { - isExtend: false, - name: '节点状态', - title: '节点状态', - isVirtual: false, - projectName: 'nacos', - serviceName: 'clusterManagement', - link: 'clusterManagement', - hasFusion: true, - template: '', - registerName: 'com.alibaba.nacos.page.clusterManagement', - useRouter: false, - id: 'clusterManagement', - }, - ], - }, - ], - defaultKey: 'configurationManagement', - projectName: 'nacos', -}; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/PermissionsManagement/PermissionsManagement.js b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/PermissionsManagement/PermissionsManagement.js new file mode 100644 index 000000000..eb54bfeb5 --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/PermissionsManagement/PermissionsManagement.js @@ -0,0 +1,47 @@ +/* + * 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 { + Button, + Field, + Form, + Grid, + Input, + Loading, + Pagination, + Table, + ConfigProvider, +} from '@alifd/next'; + +import './PermissionsManagement.scss'; + +@ConfigProvider.config +class PermissionsManagement extends React.Component { + static displayName = 'UserManagement'; + + static propTypes = { + locale: PropTypes.object, + }; + + render() { + return ( + <> +

    PermissionsManagement

    + + ); + } +} + +export default PermissionsManagement; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/PermissionsManagement/PermissionsManagement.scss b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/PermissionsManagement/PermissionsManagement.scss new file mode 100644 index 000000000..03175a7be --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/PermissionsManagement/PermissionsManagement.scss @@ -0,0 +1,12 @@ +/* + * 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. + */ \ No newline at end of file diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/PermissionsManagement/index.js b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/PermissionsManagement/index.js new file mode 100644 index 000000000..cfd9f7839 --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/PermissionsManagement/index.js @@ -0,0 +1,16 @@ +/* + * 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 PermissionsManagement from './PermissionsManagement'; + +export default PermissionsManagement; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/README.md b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/README.md new file mode 100644 index 000000000..ba2cd2c97 --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/README.md @@ -0,0 +1,7 @@ +# 权限控制 + +> AuthorityControl + +1. UserManagement => 用户管理 +2. RolesManagement => 角色管理 +3. PermissionsManagement => 权限管理 \ No newline at end of file diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/NewRole.js b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/NewRole.js new file mode 100644 index 000000000..c650a28bb --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/NewRole.js @@ -0,0 +1,96 @@ +/* + * 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 { + Button, + Field, + Form, + Input, + Dialog, + Pagination, + Table, + ConfigProvider, + // Field, +} from '@alifd/next'; + +const FormItem = Form.Item; + +const formItemLayout = { + labelCol: { fixedSpan: 3 }, + wrapperCol: { span: 20 }, +}; + +@ConfigProvider.config +class NewRole extends React.Component { + static displayName = 'NewRole'; + + field = new Field(this); + + static propTypes = { + locale: PropTypes.object, + visible: PropTypes.bool, + }; + + check() { + const errors = { + role: '角色不能为空!', + username: '用户名不能为空!', + }; + const vals = ['role', 'username'].map(key => { + const val = this.field.getValue(key); + if (!val) { + this.field.setError(key, errors[key]); + } + return val; + }); + if (vals.filter(v => v).length === 2) { + return vals; + } + return null; + } + + render() { + const { getError } = this.field; + const { visible, onOk, onCancel } = this.props; + return ( + <> + { + const vals = this.check(); + if (vals) { + onOk(vals).then(() => onCancel()); + } + }} + onClose={onCancel} + onCancel={onCancel} + afterClose={() => this.field.reset()} + > +
    + + + + + + +
    +
    + + ); + } +} + +export default NewRole; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/RolesManagement.js b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/RolesManagement.js new file mode 100644 index 000000000..ab0e3220f --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/RolesManagement.js @@ -0,0 +1,138 @@ +/* + * 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 { Button, Field, Form, Input, Dialog, Pagination, Table, ConfigProvider } from '@alifd/next'; +import { connect } from 'react-redux'; +import { getRoles, createRole, deleteRole } from '../../../reducers/authority'; +import RegionGroup from '../../../components/RegionGroup'; +import NewRole from './NewRole'; + +import './RolesManagement.scss'; + +const FormItem = Form.Item; + +const formItemLayout = { + labelCol: { fixedSpan: 3 }, + wrapperCol: { span: 20 }, +}; + +@connect(state => ({ roles: state.authority.roles }), { getRoles }) +@ConfigProvider.config +class RolesManagement extends React.Component { + static displayName = 'RolesManagement'; + + static propTypes = { + locale: PropTypes.object, + roles: PropTypes.object, + getRoles: PropTypes.func, + }; + + constructor(props) { + super(props); + this.state = { + loading: true, + pageNo: 1, + pageSize: 9, + }; + } + + componentDidMount() { + this.getRoles(); + } + + getRoles() { + const { pageNo, pageSize } = this.state; + this.props + .getRoles({ pageNo, pageSize }) + .then(() => { + if (this.state.loading) { + this.setState({ loading: false }); + } + }) + .catch(() => this.setState({ loading: false })); + } + + colseCreateRole() { + this.setState({ createRoleVisible: false }); + } + + render() { + const { roles } = this.props; + const { loading, pageSize, pageNo, createRoleVisible, passwordResetUser } = this.state; + return ( + <> + +
    + +
    + + + + ( + <> + + + )} + /> +
    + {roles.totalCount > pageSize && ( + this.setState({ pageNo }, () => this.getRoles())} + /> + )} + + createRole(role).then(res => { + this.getRoles(); + return res; + }) + } + onCancel={() => this.colseCreateRole()} + /> + + ); + } +} + +export default RolesManagement; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/RolesManagement.scss b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/RolesManagement.scss new file mode 100644 index 000000000..03175a7be --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/RolesManagement.scss @@ -0,0 +1,12 @@ +/* + * 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. + */ \ No newline at end of file diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/index.js b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/index.js new file mode 100644 index 000000000..6eaec98b8 --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/RolesManagement/index.js @@ -0,0 +1,16 @@ +/* + * 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 RolesManagement from './RolesManagement'; + +export default RolesManagement; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/NewUser.js b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/NewUser.js new file mode 100644 index 000000000..891f2449b --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/NewUser.js @@ -0,0 +1,97 @@ +/* + * 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 { + Button, + Field, + Form, + Input, + Dialog, + Pagination, + Table, + ConfigProvider, + // Field, +} from '@alifd/next'; +import './UserManagement.scss'; + +const FormItem = Form.Item; + +const formItemLayout = { + labelCol: { fixedSpan: 3 }, + wrapperCol: { span: 20 }, +}; + +@ConfigProvider.config +class NewUser extends React.Component { + static displayName = 'NewUser'; + + field = new Field(this); + + static propTypes = { + locale: PropTypes.object, + visible: PropTypes.bool, + }; + + check() { + const errors = { + username: '用户名不能为空!', + password: '密码不能为空!', + }; + const vals = ['username', 'password'].map(key => { + const val = this.field.getValue(key); + if (!val) { + this.field.setError(key, errors[key]); + } + return val; + }); + if (vals.filter(v => v).length === 2) { + return vals; + } + return null; + } + + render() { + const { getError } = this.field; + const { visible, onOk, onCancel } = this.props; + return ( + <> + { + const vals = this.check(); + if (vals) { + onOk(vals).then(() => onCancel()); + } + }} + onClose={onCancel} + onCancel={onCancel} + afterClose={() => this.field.reset()} + > +
    + + + + + + +
    +
    + + ); + } +} + +export default NewUser; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/PasswordReset.js b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/PasswordReset.js new file mode 100644 index 000000000..63eb3df51 --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/PasswordReset.js @@ -0,0 +1,94 @@ +/* + * 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 { + Button, + Field, + Form, + Input, + Dialog, + Pagination, + Table, + ConfigProvider, + // Field, +} from '@alifd/next'; +import './UserManagement.scss'; + +const FormItem = Form.Item; + +const formItemLayout = { + labelCol: { fixedSpan: 3 }, + wrapperCol: { span: 20 }, +}; + +@ConfigProvider.config +class PasswordReset extends React.Component { + static displayName = 'PasswordReset'; + + field = new Field(this); + + static propTypes = { + locale: PropTypes.object, + visible: PropTypes.bool, + }; + + check() { + const errors = { password: '密码不能为空!' }; + const vals = ['password'].map(key => { + const val = this.field.getValue(key); + if (!val) { + this.field.setError(key, errors[key]); + } + return val; + }); + if (vals.filter(v => v).length === 1) { + return [this.props.username, ...vals]; + } + return null; + } + + render() { + const { getError } = this.field; + const { username, onOk, onCancel } = this.props; + return ( + <> + { + const vals = this.check(); + if (vals) { + onOk(vals).then(() => onCancel()); + } + }} + onClose={onCancel} + onCancel={onCancel} + afterClose={() => this.field.reset()} + > +
    + +

    {username}

    +
    + + + +
    +
    + + ); + } +} + +export default PasswordReset; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/UserManagement.js b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/UserManagement.js new file mode 100644 index 000000000..d73eb7601 --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/UserManagement.js @@ -0,0 +1,161 @@ +/* + * 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 { Button, Field, Form, Input, Dialog, Pagination, Table, ConfigProvider } from '@alifd/next'; +import { connect } from 'react-redux'; +import { getUsers, createUser, deleteUser, passwordReset } from '../../../reducers/authority'; +import RegionGroup from '../../../components/RegionGroup'; +import NewUser from './NewUser'; +import PasswordReset from './PasswordReset'; + +import './UserManagement.scss'; + +const FormItem = Form.Item; + +const formItemLayout = { + labelCol: { fixedSpan: 3 }, + wrapperCol: { span: 20 }, +}; + +@connect(state => ({ users: state.authority.users }), { getUsers }) +@ConfigProvider.config +class UserManagement extends React.Component { + static displayName = 'UserManagement'; + + static propTypes = { + locale: PropTypes.object, + users: PropTypes.object, + getUsers: PropTypes.func, + createUser: PropTypes.func, + }; + + constructor(props) { + super(props); + this.state = { + loading: true, + pageNo: 1, + pageSize: 9, + }; + } + + componentDidMount() { + this.getUsers(); + } + + getUsers() { + const { pageNo, pageSize } = this.state; + this.props + .getUsers({ pageNo, pageSize }) + .then(() => { + if (this.state.loading) { + this.setState({ loading: false }); + } + }) + .catch(() => this.setState({ loading: false })); + } + + colseCreateUser() { + this.setState({ createUserVisible: false }); + } + + render() { + const { users } = this.props; + const { loading, pageSize, pageNo, createUserVisible, passwordResetUser } = this.state; + return ( + <> + +
    + +
    + + + value.replace(/\S/g, '*')} + /> + ( + <> + +     + + + )} + /> +
    + {users.totalCount > pageSize && ( + this.setState({ pageNo }, () => this.getUsers())} + /> + )} + + createUser(user).then(res => { + this.setState({ pageNo: 1 }, () => this.getUsers()); + return res; + }) + } + onCancel={() => this.colseCreateUser()} + /> + + passwordReset(user).then(res => { + this.getUsers(); + return res; + }) + } + onCancel={() => this.setState({ passwordResetUser: undefined })} + /> + + ); + } +} + +export default UserManagement; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/UserManagement.scss b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/UserManagement.scss new file mode 100644 index 000000000..20cf13723 --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/UserManagement.scss @@ -0,0 +1,18 @@ +/* + * 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 '../authority.scss'; + +.users-pagination { + float: right; + margin-top: 20px; +} diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/index.js b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/index.js new file mode 100644 index 000000000..4df885840 --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/UserManagement/index.js @@ -0,0 +1,16 @@ +/* + * 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 UserManagement from './UserManagement'; + +export default UserManagement; diff --git a/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/authority.scss b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/authority.scss new file mode 100644 index 000000000..a1112a3ef --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/pages/AuthorityControl/authority.scss @@ -0,0 +1,17 @@ +/* + * 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. + */ + +.filter-panel { + text-align: right; + padding: 10px 0; +} diff --git a/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ConfigurationManagement/ConfigurationManagement.js b/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ConfigurationManagement/ConfigurationManagement.js index c9bc12e06..ede9e64a8 100644 --- a/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ConfigurationManagement/ConfigurationManagement.js +++ b/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ConfigurationManagement/ConfigurationManagement.js @@ -1095,7 +1095,7 @@ class ConfigurationManagement extends React.Component { render() { const { locale = {} } = this.props; return ( -
    + <> (this.batchHandle = ref)} />
    -
    + ); } } diff --git a/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ConfigurationManagement/index.scss b/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ConfigurationManagement/index.scss index c61bab940..29986bda4 100644 --- a/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ConfigurationManagement/index.scss +++ b/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ConfigurationManagement/index.scss @@ -13,7 +13,4 @@ .next-pagination-size-selector{ position: static !important; -} -.next-overlay-inner{ - top:154px !important; -} +} \ No newline at end of file diff --git a/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ListeningToQuery/ListeningToQuery.js b/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ListeningToQuery/ListeningToQuery.js index ec6638023..de5dbc1f2 100644 --- a/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ListeningToQuery/ListeningToQuery.js +++ b/console/src/main/resources/static/console-fe/src/pages/ConfigurationManagement/ListeningToQuery/ListeningToQuery.js @@ -183,7 +183,7 @@ class ListeningToQuery extends React.Component { }, ]; return ( -
    + <> -
    + ); } } diff --git a/console/src/main/resources/static/console-fe/src/pages/NameSpace/NameSpace.js b/console/src/main/resources/static/console-fe/src/pages/NameSpace/NameSpace.js index 99a20085e..0ab3b9dda 100644 --- a/console/src/main/resources/static/console-fe/src/pages/NameSpace/NameSpace.js +++ b/console/src/main/resources/static/console-fe/src/pages/NameSpace/NameSpace.js @@ -301,7 +301,7 @@ class NameSpace extends React.Component { namespaceOperation, } = locale; return ( -
    + <>
    -
    + ); } } diff --git a/console/src/main/resources/static/console-fe/src/pages/Welcome/Welcome.js b/console/src/main/resources/static/console-fe/src/pages/Welcome/Welcome.js index f5326f68f..aabfb2f64 100644 --- a/console/src/main/resources/static/console-fe/src/pages/Welcome/Welcome.js +++ b/console/src/main/resources/static/console-fe/src/pages/Welcome/Welcome.js @@ -24,15 +24,8 @@ class Welcome extends React.Component { render() { const { functionMode } = this.props; - return ( -
    - {functionMode !== '' && ( - - )} -
    - ); + const path = functionMode === 'naming' ? 'serviceManagement' : 'configurationManagement'; + return <>{functionMode !== '' && }; } } diff --git a/console/src/main/resources/static/console-fe/src/reducers/authority.js b/console/src/main/resources/static/console-fe/src/reducers/authority.js new file mode 100644 index 000000000..770f9af5f --- /dev/null +++ b/console/src/main/resources/static/console-fe/src/reducers/authority.js @@ -0,0 +1,96 @@ +/* + * 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 { Message } from '@alifd/next'; +import request from '../utils/request'; +import { UPDATE_USER, SIGN_IN, USER_LIST, ROLE_LIST } from '../constants'; + +const initialState = { + users: { + totalCount: 0, + pageNumber: 1, + pagesAvailable: 1, + pageItems: [], + }, + roles: {}, +}; + +const successMsg = res => { + if (res.code === 200) { + Message.success(res.message); + } + return res; +}; + +/** + * 用户列表 + * @param {*} params + */ +const getUsers = params => dispatch => + request.get('v1/auth/users', { params }).then(data => dispatch({ type: USER_LIST, data })); + +/** + * 创建用户 + * @param {*} param0 + */ +const createUser = ([username, password]) => + request.post('v1/auth/users', { username, password }).then(res => successMsg(res)); + +/** + * 删除用户 + * @param {*} username + */ +const deleteUser = username => + request.delete('v1/auth/users', { params: { username } }).then(res => successMsg(res)); + +/** + * 重置密码 + * @param {*} param0 + */ +const passwordReset = ([username, newPassword]) => + request.put('v1/auth/users', { username, newPassword }).then(res => successMsg(res)); + +/** + * 角色列表 + * @param {*} params + */ + +const getRoles = params => dispatch => + request.get('v1/auth/roles', { params }).then(data => dispatch({ type: ROLE_LIST, data })); + +/** + * 创建角色 + * @param {*} param0 + */ +const createRole = ([role, username]) => + request.post('v1/auth/roles', { role, username }).then(res => successMsg(res)); + +/** + * 删除角色 + * @param {*} param0 + */ +const deleteRole = role => + request.delete('v1/auth/roles', { params: role }).then(res => successMsg(res)); + +export default (state = initialState, action) => { + switch (action.type) { + case USER_LIST: + return { ...state, users: { ...action.data } }; + case ROLE_LIST: + return { ...state, roles: { ...action.data } }; + default: + return state; + } +}; + +export { getUsers, createUser, deleteUser, passwordReset, getRoles, createRole, deleteRole }; diff --git a/console/src/main/resources/static/console-fe/src/reducers/index.js b/console/src/main/resources/static/console-fe/src/reducers/index.js index a8c1d40bf..e3f9d5b11 100644 --- a/console/src/main/resources/static/console-fe/src/reducers/index.js +++ b/console/src/main/resources/static/console-fe/src/reducers/index.js @@ -14,5 +14,6 @@ import locale from './locale'; import base from './base'; import subscribers from './subscribers'; +import authority from './authority'; -export default { locale, base, subscribers }; +export default { locale, base, subscribers, authority }; diff --git a/console/src/main/resources/static/console-fe/src/utils/request.js b/console/src/main/resources/static/console-fe/src/utils/request.js index df475ff71..736fd8d56 100644 --- a/console/src/main/resources/static/console-fe/src/utils/request.js +++ b/console/src/main/resources/static/console-fe/src/utils/request.js @@ -1,4 +1,5 @@ import axios from 'axios'; +import qs from 'qs'; import { Message } from '@alifd/next'; // import { SUCCESS_RESULT_CODE } from '../constants'; @@ -7,6 +8,21 @@ const API_GENERAL_ERROR_MESSAGE = 'Request error, please try again later!'; const request = () => { const instance = axios.create(); + instance.interceptors.request.use( + function(config) { + if (['post', 'put'].includes(config.method)) { + config.data = qs.stringify(config.data); + config.headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + }; + } + return config; + }, + function(error) { + return Promise.reject(error); + } + ); + instance.interceptors.response.use( response => { const { success, resultCode, resultMessage = API_GENERAL_ERROR_MESSAGE } = response.data;