提交 5cfdd0d1 编写于 作者: N nobodyiam 提交者: Jason Song

Revert "add i18n support and English translations (#2641)"

This reverts commit 437026f3.
上级 95aaa41d
......@@ -45,7 +45,6 @@ public class WebMvcConfig implements WebMvcConfigurer, WebServerFactoryCustomize
addCacheControl(registry, "scripts", 86400);
addCacheControl(registry, "styles", 86400);
addCacheControl(registry, "views", 86400);
addCacheControl(registry, "i18n", 86400);
}
private void addCacheControl(ResourceHandlerRegistry registry, String folder, int cachePeriod) {
......
......@@ -11,7 +11,7 @@ public class AppDTO extends BaseDTO{
@Pattern(
regexp = InputValidator.CLUSTER_NAMESPACE_VALIDATOR,
message = "Invalid AppId format: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE
message = "AppId格式错误: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE
)
private String appId;
......
......@@ -11,7 +11,7 @@ public class ClusterDTO extends BaseDTO{
@NotBlank(message = "cluster name cannot be blank")
@Pattern(
regexp = InputValidator.CLUSTER_NAMESPACE_VALIDATOR,
message = "Invalid Cluster format: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE
message = "Cluster格式错误: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE
)
private String name;
......
......@@ -12,7 +12,7 @@ public class NamespaceDTO extends BaseDTO{
@Pattern(
regexp = InputValidator.CLUSTER_NAMESPACE_VALIDATOR,
message = "Invalid Namespace format: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE
message = "Namespace格式错误: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE
)
private String namespaceName;
......
......@@ -22,7 +22,7 @@ public class AppNamespace extends BaseEntity {
@NotBlank(message = "AppNamespace Name cannot be blank")
@Pattern(
regexp = InputValidator.CLUSTER_NAMESPACE_VALIDATOR,
message = "Invalid Namespace format: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE + " & " + InputValidator.INVALID_NAMESPACE_NAMESPACE_MESSAGE
message = "Namespace格式错误: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE + " & " + InputValidator.INVALID_NAMESPACE_NAMESPACE_MESSAGE
)
@Column(name = "Name", nullable = false)
private String name;
......
......@@ -8,8 +8,8 @@ import java.util.regex.Pattern;
* @author Jason Song(song_s@ctrip.com)
*/
public class InputValidator {
public static final String INVALID_CLUSTER_NAMESPACE_MESSAGE = "Only digits, alphabets and symbol - _ . are allowed";
public static final String INVALID_NAMESPACE_NAMESPACE_MESSAGE = "not allowed to end with .json, .yml, .yaml, .xml, .properties";
public static final String INVALID_CLUSTER_NAMESPACE_MESSAGE = "只允许输入数字,字母和符号 - _ .";
public static final String INVALID_NAMESPACE_NAMESPACE_MESSAGE = "不允许以.json, .yml, .yaml, .xml, .properties结尾";
public static final String CLUSTER_NAMESPACE_VALIDATOR = "[0-9a-zA-Z_.-]+";
private static final String APP_NAMESPACE_VALIDATOR = "[a-zA-Z0-9._-]+(?<!\\.(json|yml|yaml|xml|properties))$";
private static final Pattern CLUSTER_NAMESPACE_PATTERN = Pattern.compile(CLUSTER_NAMESPACE_VALIDATOR);
......
......@@ -59,7 +59,7 @@ public class ClusterController {
if (!InputValidator.isValidClusterNamespace(clusterName)) {
throw new BadRequestException(
String.format("Invalid ClusterName format: %s", InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE));
String.format("Cluster Name 格式错误: %s", InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE));
}
if (userService.findByUserId(operator) == null) {
......
......@@ -68,7 +68,7 @@ public class NamespaceController {
appNamespaceDTO.getFormat(), appNamespaceDTO.getDataChangeCreatedBy());
if (!InputValidator.isValidAppNamespace(appNamespaceDTO.getName())) {
throw new BadRequestException(String.format("Invalid Namespace format: %s",
throw new BadRequestException(String.format("Namespace格式错误: %s",
InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE + " & "
+ InputValidator.INVALID_NAMESPACE_NAMESPACE_MESSAGE));
}
......
......@@ -193,7 +193,7 @@ public class NamespaceController {
@RequestParam(defaultValue = "true") boolean appendNamespacePrefix,
@Valid @RequestBody AppNamespace appNamespace) {
if (!InputValidator.isValidAppNamespace(appNamespace.getName())) {
throw new BadRequestException(String.format("Invalid Namespace format: %s",
throw new BadRequestException(String.format("Namespace格式错误: %s",
InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE + " & " + InputValidator.INVALID_NAMESPACE_NAMESPACE_MESSAGE));
}
......
......@@ -154,7 +154,7 @@ public class PermissionController {
Set<String> assignedUser = rolePermissionService.assignRoleToUsers(RoleUtils.buildNamespaceRoleName(appId, namespaceName, roleType, env),
Sets.newHashSet(user), userInfoHolder.getUser().getUserId());
if (CollectionUtils.isEmpty(assignedUser)) {
throw new BadRequestException(user + " already authorized");
throw new BadRequestException(user + "已授权");
}
return ResponseEntity.ok().build();
......@@ -209,7 +209,7 @@ public class PermissionController {
Set<String> assignedUser = rolePermissionService.assignRoleToUsers(RoleUtils.buildNamespaceRoleName(appId, namespaceName, roleType),
Sets.newHashSet(user), userInfoHolder.getUser().getUserId());
if (CollectionUtils.isEmpty(assignedUser)) {
throw new BadRequestException(user + " already authorized");
throw new BadRequestException(user + "已授权");
}
return ResponseEntity.ok().build();
......@@ -253,7 +253,7 @@ public class PermissionController {
Set<String> assignedUsers = rolePermissionService.assignRoleToUsers(RoleUtils.buildAppRoleName(appId, roleType),
Sets.newHashSet(user), userInfoHolder.getUser().getUserId());
if (CollectionUtils.isEmpty(assignedUsers)) {
throw new BadRequestException(user + " already authorized");
throw new BadRequestException(user + "已授权");
}
return ResponseEntity.ok().build();
......
......@@ -14,7 +14,7 @@ public class AppModel {
@NotBlank(message = "appId cannot be blank")
@Pattern(
regexp = InputValidator.CLUSTER_NAMESPACE_VALIDATOR,
message = "Invalid AppId format: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE
message = "AppId格式错误: " + InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE
)
private String appId;
......
......@@ -271,7 +271,7 @@ public class AuthConfiguration {
http.csrf().disable();
http.headers().frameOptions().sameOrigin();
http.authorizeRequests()
.antMatchers("/prometheus/**","/metrics/**","/openapi/**", "/vendor/**", "/styles/**", "/scripts/**", "/views/**", "/img/**", "/i18n/**").permitAll()
.antMatchers("/prometheus/**","/metrics/**","/openapi/**", "/vendor/**", "/styles/**", "/scripts/**", "/views/**", "/img/**").permitAll()
.antMatchers("/**").hasAnyRole(USER_ROLE);
http.formLogin().loginPage("/signin").defaultSuccessUrl("/", true).permitAll().failureUrl("/signin?#/error").and()
.httpBasic();
......@@ -403,7 +403,7 @@ public class AuthConfiguration {
http.csrf().disable();
http.headers().frameOptions().sameOrigin();
http.authorizeRequests()
.antMatchers("/prometheus/**","/metrics/**","/openapi/**", "/vendor/**", "/styles/**", "/scripts/**", "/views/**", "/img/**", "/i18n/**").permitAll()
.antMatchers("/prometheus/**","/metrics/**","/openapi/**", "/vendor/**", "/styles/**", "/scripts/**", "/views/**", "/img/**").permitAll()
.antMatchers("/**").authenticated();
http.formLogin().loginPage("/signin").defaultSuccessUrl("/", true).permitAll().failureUrl("/signin?#/error").and()
.httpBasic();
......
......@@ -12,11 +12,11 @@ public class RelativeDateFormat {
private static final long ONE_HOUR = 3600000L;
private static final long ONE_DAY = 86400000L;
private static final String ONE_SECOND_AGO = " seconds ago";
private static final String ONE_MINUTE_AGO = " minutes ago";
private static final String ONE_HOUR_AGO = " hours ago";
private static final String ONE_DAY_AGO = " days ago";
private static final String ONE_MONTH_AGO = " months ago";
private static final String ONE_SECOND_AGO = "秒前";
private static final String ONE_MINUTE_AGO = "分钟前";
private static final String ONE_HOUR_AGO = "小时前";
private static final String ONE_DAY_AGO = "天前";
private static final String ONE_MONTH_AGO = "月前";
public static String format(Date date) {
if (date.after(new Date())) {
......@@ -39,11 +39,11 @@ public class RelativeDateFormat {
Date lastDayBeginTime = getDateOffset(-1);
if (date.after(lastDayBeginTime)) {
return "yesterday";
return "昨天";
}
Date lastTwoDaysBeginTime = getDateOffset(-2);
if (date.after(lastTwoDaysBeginTime)) {
return "the day before yesterday";
return "前天";
}
if (delta < 30L * ONE_DAY) {
long days = toDays(delta);
......
......@@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" media='all' href="vendor/angular/loading-bar.min.css">
<link rel="stylesheet" type="text/css" href="styles/common-style.css">
<title>{{'App.CreateProject' | translate }}</title>
<title>新建项目</title>
</head>
<body>
......@@ -22,7 +22,7 @@
<div class="col-md-8 col-md-offset-2">
<div class="panel">
<header class="panel-heading">
{{'App.CreateProject' | translate }}
创建项目
</header>
<form class="form-horizontal panel-body" name="appForm" ng-controller="CreateAppController"
......@@ -31,7 +31,7 @@
<div class="form-group">
<label class="col-sm-3 control-label">
<apollorequiredfield></apollorequiredfield>
{{'Common.Department' | translate }}</label>
部门</label>
<div class="col-sm-3">
<select id="organization">
<option></option>
......@@ -41,44 +41,43 @@
<div class="form-group" valdr-form-group>
<label class="col-sm-3 control-label">
<apollorequiredfield></apollorequiredfield>
{{'Common.AppId' | translate }}</label>
应用Id</label>
<div class="col-sm-3">
<input type="text" class="form-control" name="appId" ng-model="app.appId">
<small>{{'App.AppIdTips' | translate }}
</small>
<small>(应用唯一标识)</small>
</div>
</div>
<div class="form-group" valdr-form-group>
<label class="col-sm-3 control-label">
<apollorequiredfield></apollorequiredfield>
{{'Common.AppName' | translate }}</label>
应用名称</label>
<div class="col-sm-5">
<input type="text" class="form-control" name="appName" ng-model="app.name">
<small>{{'App.AppNameTips' | translate }}</small>
<small>(建议格式 xx-yy-zz 例:apollo-server)</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">
<apollorequiredfield></apollorequiredfield>
{{'Common.AppOwnerLong' | translate }}</label>
应用负责人</label>
<div class="col-sm-6 J_ownerSelectorPanel">
<apollouserselector apollo-id="'ownerSelector'" disabled="isOpenManageAppMasterRoleLimit"></apollouserselector>
<small style="color: maroon" ng-if="isOpenManageAppMasterRoleLimit">{{'App.AppOwnerTips' | translate }}</small>
<small style="color: maroon" ng-if="isOpenManageAppMasterRoleLimit">(开启项目管理员分配权限控制后,应用负责人和项目管理员默认为本账号,不可选择)</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">{{'Common.AppAdmin' | translate }}<br>
<label class="col-sm-3 control-label">项目管理员<br>
</label>
<div class="col-sm-9 J_adminSelectorPanel">
<apollomultipleuserselector apollo-id="'adminSelector'" ng-disabled="isOpenManageAppMasterRoleLimit"></apollomultipleuserselector>
<br>
<small>{{'App.AppAdminTips1' | translate }}</small>
<small>(应用负责人默认具有项目管理员权限,</small>
<br>
<small>{{'App.AppAdminTips2' | translate }}</small>
<small>项目管理员可以创建Namespace和集群、分配用户权限)</small>
</div>
</div>
......@@ -87,7 +86,7 @@
<div class="col-sm-offset-3 col-sm-9">
<button type="submit" class="btn btn-primary"
ng-disabled="appForm.$invalid || submitBtnDisabled">{{'Common.Submit' | translate }}
ng-disabled="appForm.$invalid || submitBtnDisabled">提交
</button>
</div>
</div>
......@@ -105,11 +104,6 @@
<script src="vendor/angular/angular-resource.min.js"></script>
<script src="vendor/angular/angular-toastr-1.4.1.tpls.min.js"></script>
<script src="vendor/angular/loading-bar.min.js"></script>
<script src="vendor/angular/angular-cookies.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate-loader-static-files.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate-storage-cookie.min.js"></script>
<!-- jquery.js -->
<script src="vendor/jquery.min.js" type="text/javascript"></script>
......
<!doctype html>
<html ng-app="setting">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="icon" href="../img/config.png">
......@@ -10,198 +9,192 @@
<link rel="stylesheet" type="text/css" media='all' href="../vendor/angular/loading-bar.min.css">
<link rel="stylesheet" type="text/css" href="../styles/common-style.css">
<link rel="stylesheet" type="text/css" href="../vendor/select2/select2.min.css">
<title>{{'App.Setting.Title' | translate }}</title>
<title>项目管理</title>
</head>
<body>
<apollonav></apollonav>
<apollonav></apollonav>
<div class="container-fluid apollo-container project-setting" ng-controller="SettingController">
<section class="col-md-10 col-md-offset-1 panel hidden">
<header class="panel-heading">
<div class="row">
<div class="col-md-7">
<h4 class="modal-title">{{'App.Setting.Title' | translate }} (
{{'Common.AppId' | translate }}:<label ng-bind="pageContext.appId"></label> )
</h4>
</div>
<div class="col-md-5 text-right">
<a type="button" class="btn btn-info" data-dismiss="modal"
href="/config.html?#appid={{pageContext.appId}}">{{'Common.ReturnToIndex' | translate }}
</a>
</div>
<div class="container-fluid apollo-container project-setting" ng-controller="SettingController">
<section class="col-md-10 col-md-offset-1 panel hidden">
<header class="panel-heading">
<div class="row">
<div class="col-md-7">
<h4 class="modal-title">项目管理 ( AppId:<label ng-bind="pageContext.appId"></label> )
</h4>
</div>
</header>
<div class="panel-body row">
<section class="context" ng-show="hasAssignUserPermission">
<!--project admin-->
<section class="form-horizontal" ng-show="hasManageAppMasterPermission">
<h5>{{'App.Setting.Admin' | translate }}
<small>
{{'App.Setting.AdminTips' | translate }}
</small>
</h5>
<hr>
<div class="col-md-offset-1">
<form class="form-inline" ng-submit="assignMasterRoleToUser()">
<div class="form-group" style="padding-left: 15px">
<apollouserselector apollo-id="userSelectWidgetId"></apollouserselector>
</div>
<button type="submit" class="btn btn-default" style="margin-left: 20px;"
ng-disabled="submitBtnDisabled">{{'App.Setting.Add' | translate }}
</button>
</form>
<!-- Split button -->
<div class="item-container">
<div class="col-md-5 text-right">
<a type="button" class="btn btn-info" data-dismiss="modal"
href="/config.html?#appid={{pageContext.appId}}">返回到项目首页
</a>
</div>
</div>
</header>
<div class="panel-body row">
<section class="context" ng-show="hasAssignUserPermission">
<!--project admin-->
<section class="form-horizontal" ng-show="hasManageAppMasterPermission">
<h5>管理员
<small>
(项目管理员具有以下权限: 1. 创建Namespace 2. 创建集群 3. 管理项目、Namespace权限)
</small>
</h5>
<hr>
<div class="col-md-offset-1">
<form class="form-inline" ng-submit="assignMasterRoleToUser()">
<div class="form-group" style="padding-left: 15px">
<apollouserselector apollo-id="userSelectWidgetId"></apollouserselector>
</div>
<button type="submit" class="btn btn-default" style="margin-left: 20px;"
ng-disabled="submitBtnDisabled">添加
</button>
</form>
<!-- Split button -->
<div class="item-container">
<div class="btn-group item-info" ng-repeat="user in appRoleUsers.masterUsers">
<button type="button" class="btn btn-default" ng-bind="user.userId"></button>
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"
<div class="btn-group item-info" ng-repeat="user in appRoleUsers.masterUsers">
<button type="button" class="btn btn-default" ng-bind="user.userId"></button>
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false"
ng-click="removeMasterRoleFromUser(user.userId)">
<span class="glyphicon glyphicon-remove"></span>
</button>
</div>
<span class="glyphicon glyphicon-remove"></span>
</button>
</div>
</div>
</div>
</section>
<!--application info-->
<section>
<h5>{{'App.Setting.BasicInfo' | translate }}</h5>
<hr>
<form class="form-horizontal" name="appForm" valdr-type="App" ng-submit="updateAppInfo()">
</section>
<div class="form-group" valdr-form-group>
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
{{'Common.AppId' | translate }}
<!--application info-->
<section>
<h5>基本信息</h5>
<hr>
<form class="form-horizontal" name="appForm" valdr-type="App"
ng-submit="updateAppInfo()">
<div class="form-group" valdr-form-group>
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
AppId</label>
<div class="col-sm-3">
<label class="form-control-static" ng-bind="pageContext.appId">
</label>
<div class="col-sm-3">
<label class="form-control-static" ng-bind="pageContext.appId">
</label>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
{{'Common.Department' | translate }}
</label>
<div class="col-sm-3">
<select id="organization" ng-disabled="!display.app.edit">
<option></option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
部门</label>
<div class="col-sm-3">
<select id="organization" ng-disabled="!display.app.edit">
<option></option>
</select>
</div>
</div>
<div class="form-group" valdr-form-group>
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
{{'App.Setting.ProjectName' | translate }}
</label>
<div class="col-sm-4">
<input type="text" class="form-control" name="appName" ng-model="viewApp.name"
ng-disabled="!display.app.edit">
<small>{{'App.Setting.ProjectNameTips' | translate }}</small>
</div>
<div class="form-group" valdr-form-group>
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
项目名称</label>
<div class="col-sm-4">
<input type="text" class="form-control" name="appName" ng-model="viewApp.name"
ng-disabled="!display.app.edit">
<small>(建议格式 xx-yy-zz 例:apollo-server)</small>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
{{'App.Setting.ProjectOwner' | translate }}
</label>
<div class="col-sm-6 J_ownerSelectorPanel">
<apollouserselector apollo-id="'ownerSelector'" disabled="!display.app.edit">
</apollouserselector>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
项目负责人</label>
<div class="col-sm-6 J_ownerSelectorPanel">
<apollouserselector apollo-id="'ownerSelector'"
disabled="!display.app.edit"></apollouserselector>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-9">
<button type="button" class="btn btn-primary" ng-show="!display.app.edit"
<div class="form-group">
<div class="col-sm-offset-2 col-sm-9">
<button type="button" class="btn btn-primary"
ng-show="!display.app.edit"
ng-click="toggleEditStatus()">
{{'App.Setting.Modify' | translate }}
</button>
<button type="button" class="btn btn-warning" ng-show="display.app.edit"
修改项目信息
</button>
<button type="button" class="btn btn-warning"
ng-show="display.app.edit"
ng-click="toggleEditStatus()">
{{'App.Setting.Cancel' | translate }}
</button>
<button type="submit" class="btn btn-primary" ng-show="display.app.edit"
取消修改
</button>
<button type="submit" class="btn btn-primary"
ng-show="display.app.edit"
ng-disabled="appForm.$invalid || submitBtnDisabled">
{{'Common.Submit' | translate }}
</button>
</div>
提交
</button>
</div>
</form>
</section>
</div>
</form>
</section>
<section class="context" ng-show="!hasAssignUserPermission">
<div class="panel-body text-center">
<h4 translate="App.Setting.NoPermissionTips" translate-value-users="{{admins.join(',')}}"></h4>
</div>
</section>
</div>
<apolloconfirmdialog apollo-dialog-id="'warning'" apollo-title="'App.Setting.DeleteAdmin' | translate"
apollo-detail="'App.Setting.CanNotDeleteAllAdmin' | translate" apollo-show-cancel-btn="false">
</apolloconfirmdialog>
</section>
</div>
<div ng-include="'../views/common/footer.html'"></div>
<!-- jquery.js -->
<script src="../vendor/jquery.min.js" type="text/javascript"></script>
<!--angular-->
<script src="../vendor/angular/angular.min.js"></script>
<script src="../vendor/angular/angular-route.min.js"></script>
<script src="../vendor/angular/angular-resource.min.js"></script>
<script src="../vendor/angular/angular-toastr-1.4.1.tpls.min.js"></script>
<script src="../vendor/angular/loading-bar.min.js"></script>
<script src="../vendor/angular/angular-cookies.min.js"></script>
<script src="../vendor/angular/angular-translate.2.18.1/angular-translate.min.js"></script>
<script src="../vendor/angular/angular-translate.2.18.1/angular-translate-loader-static-files.min.js"></script>
<script src="../vendor/angular/angular-translate.2.18.1/angular-translate-storage-cookie.min.js"></script>
<!--valdr-->
<script src="../vendor/valdr/valdr.min.js" type="text/javascript"></script>
<script src="../vendor/valdr/valdr-message.min.js" type="text/javascript"></script>
<!-- bootstrap.js -->
<script src="../vendor/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="../vendor/lodash.min.js"></script>
<script src="../vendor/select2/select2.min.js" type="text/javascript"></script>
<!--biz-->
<!--must import-->
<script type="application/javascript" src="../scripts/app.js"></script>
<script type="application/javascript" src="../scripts/services/AppService.js"></script>
<script type="application/javascript" src="../scripts/services/EnvService.js"></script>
<script type="application/javascript" src="../scripts/services/UserService.js"></script>
<script type="application/javascript" src="../scripts/services/CommonService.js"></script>
<script type="application/javascript" src="../scripts/services/PermissionService.js"></script>
<script type="application/javascript" src="../scripts/services/OrganizationService.js"></script>
<script type="application/javascript" src="../scripts/services/PermissionService.js"></script>
<script type="application/javascript" src="../scripts/AppUtils.js"></script>
<script type="application/javascript" src="../scripts/PageCommon.js"></script>
<script type="application/javascript" src="../scripts/directive/directive.js"></script>
<script type="application/javascript" src="../scripts/valdr.js"></script>
<script type="application/javascript" src="../scripts/controller/SettingController.js"></script>
</body>
</section>
</html>
\ No newline at end of file
<section class="context" ng-show="!hasAssignUserPermission">
<div class="panel-body text-center">
<h4>您没有权限操作,请找 [{{admins.join(',')}}] 开通权限</h4>
</div>
</section>
</div>
<apolloconfirmdialog apollo-dialog-id="'warning'" apollo-title="'删除管理员'"
apollo-detail="'不能删除所有的管理员'"
apollo-show-cancel-btn="false"></apolloconfirmdialog>
</section>
</div>
<div ng-include="'../views/common/footer.html'"></div>
<!-- jquery.js -->
<script src="../vendor/jquery.min.js" type="text/javascript"></script>
<!--angular-->
<script src="../vendor/angular/angular.min.js"></script>
<script src="../vendor/angular/angular-route.min.js"></script>
<script src="../vendor/angular/angular-resource.min.js"></script>
<script src="../vendor/angular/angular-toastr-1.4.1.tpls.min.js"></script>
<script src="../vendor/angular/loading-bar.min.js"></script>
<!--valdr-->
<script src="../vendor/valdr/valdr.min.js" type="text/javascript"></script>
<script src="../vendor/valdr/valdr-message.min.js" type="text/javascript"></script>
<!-- bootstrap.js -->
<script src="../vendor/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="../vendor/lodash.min.js"></script>
<script src="../vendor/select2/select2.min.js" type="text/javascript"></script>
<!--biz-->
<!--must import-->
<script type="application/javascript" src="../scripts/app.js"></script>
<script type="application/javascript" src="../scripts/services/AppService.js"></script>
<script type="application/javascript" src="../scripts/services/EnvService.js"></script>
<script type="application/javascript" src="../scripts/services/UserService.js"></script>
<script type="application/javascript" src="../scripts/services/CommonService.js"></script>
<script type="application/javascript" src="../scripts/services/PermissionService.js"></script>
<script type="application/javascript" src="../scripts/services/OrganizationService.js"></script>
<script type="application/javascript" src="../scripts/services/PermissionService.js"></script>
<script type="application/javascript" src="../scripts/AppUtils.js"></script>
<script type="application/javascript" src="../scripts/PageCommon.js"></script>
<script type="application/javascript" src="../scripts/directive/directive.js"></script>
<script type="application/javascript" src="../scripts/valdr.js"></script>
<script type="application/javascript" src="../scripts/controller/SettingController.js"></script>
</body>
</html>
......@@ -9,7 +9,7 @@
<link rel="stylesheet" type="text/css" href="vendor/select2/select2.min.css">
<link rel="stylesheet" type="text/css" media='all' href="vendor/angular/loading-bar.min.css">
<link rel="stylesheet" type="text/css" href="styles/common-style.css">
<title>{{'Cluster.CreateCluster' | translate }}</title>
<title>新建集群</title>
</head>
<body>
......@@ -23,10 +23,10 @@
<header class="panel-heading">
<div class="row">
<div class="col-md-6">
<h4>{{'Cluster.CreateCluster' | translate }}</h4>
<h4>创建集群</h4>
</div>
<div class="col-md-6 text-right">
<a type="button" class="btn btn-info" href="/config.html?#/appid={{appId}}">{{'Common.ReturnToIndex' | translate }}
<a type="button" class="btn btn-info" href="/config.html?#/appid={{appId}}">返回到项目首页
</a>
</div>
</div>
......@@ -39,10 +39,13 @@
<div class="alert alert-info no-radius" role="alert">
<strong>Tips:</strong>
<ul>
<li>{{'Cluster.Tips.1' | translate }}</li>
<li>{{'Cluster.Tips.2' | translate }}</li>
<li>{{'Cluster.Tips.3' | translate }}</li>
<li>{{'Cluster.Tips.4' | translate }}</li>
<li>通过添加集群,可以使同一份程序在不同的集群(如不同的数据中心)使用不同的配置</li>
<li>如果不同集群使用一样的配置,则没有必要创建集群</li>
<li>
Apollo默认会读取机器上/opt/settings/server.properties(linux)或C:\opt\settings\server.properties(windows)文件中的idc属性作为集群名字,
如SHAJQ(金桥数据中心)、SHAOY(欧阳数据中心)
</li>
<li>在这里创建的集群名字需要和机器上server.properties中的idc属性一致</li>
</ul>
</div>
<form class="form-horizontal" name="clusterForm" valdr-type="Cluster" ng-show="step == 1"
......@@ -50,7 +53,7 @@
<div class="form-group">
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
{{'Common.AppId' | translate }}</label>
应用AppId</label>
<div class="col-sm-6">
<label class="form-control-static" ng-bind="appId"></label>
</div>
......@@ -58,16 +61,16 @@
<div class="form-group" valdr-form-group>
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
{{'Common.ClusterName' | translate }}</label>
集群名称</label>
<div class="col-sm-6">
<input type="text" class="form-control" name="clusterName" ng-model="clusterName">
<small>{{'Cluster.CreateNameTips' | translate }}</small>
<small>(部署集群如:SHAJQ,SHAOY 或自定义集群如:SHAJQ-xx,SHAJQ-yy)</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">
<apollorequiredfield></apollorequiredfield>
{{'Cluster.ChooseEnvironment' | translate }}</label>
选择环境</label>
<div class="col-sm-5">
<table class="table table-hover" style="width: 100px">
<tbody>
......@@ -86,14 +89,14 @@
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary"
ng-disabled="clusterForm.$invalid || submitBtnDisabled">{{'Common.Submit' | translate }}
ng-disabled="clusterForm.$invalid || submitBtnDisabled">提交
</button>
</div>
</div>
</form>
<div class="row text-center" ng-show="step == 2">
<img src="img/sync-succ.png" style="height: 100px; width: 100px">
<h3>{{'Common.Created' | translate }}!</h3>
<h3>创建成功!</h3>
</div>
</div>
</div>
......@@ -108,11 +111,6 @@
<script src="vendor/angular/angular-resource.min.js"></script>
<script src="vendor/angular/angular-toastr-1.4.1.tpls.min.js"></script>
<script src="vendor/angular/loading-bar.min.js"></script>
<script src="vendor/angular/angular-cookies.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate-loader-static-files.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate-storage-cookie.min.js"></script>
<!-- jquery.js -->
<script src="vendor/jquery.min.js" type="text/javascript"></script>
......
<!doctype html>
<html ng-app="diff_item">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="icon" href="../img/config.png">
......@@ -10,12 +9,11 @@
<link rel="stylesheet" type="text/css" media='all' href="../vendor/angular/loading-bar.min.css">
<link rel="stylesheet" type="text/css" href="../styles/common-style.css">
<link rel="stylesheet" type="text/css" href="../vendor/select2/select2.min.css">
<title>{{'Config.Diff.Title' | translate }}</title>
<title>比较配置</title>
<style>
.comment-toggle {
margin-left: 8px !important;
}
.diff-content {
margin-top: 12px;
}
......@@ -24,139 +22,134 @@
<body>
<apollonav></apollonav>
<div class="container-fluid apollo-container" ng-controller="DiffItemController">
<section class="panel col-md-offset-1 col-md-10">
<header class="panel-heading">
<div class="row">
<div class="col-md-7">
<h4 class="modal-title">{{'Config.Diff.Title' | translate }}
<small ng-show="syncItemStep == 1">{{'Config.Diff.FirstStep' | translate }}</small>
<small ng-show="syncItemStep == 2">{{'Config.Diff.SecondStep' | translate }}</small>
</h4>
</div>
<div class="col-md-5 text-right">
<button type="button" class="btn btn-primary" ng-show="syncItemStep > 1 && syncItemStep < 3"
ng-click="syncItemNextStep(-1)">{{'Config.Diff.PreviousStep' | translate }}
</button>
<button type="button" class="btn btn-primary" ng-show="syncItemStep < 2"
ng-click="diff()">{{'Config.Diff.NextStep' | translate }}
</button>
<button type="button" class="btn btn-info" data-dismiss="modal"
ng-click="backToAppHomePage()">{{'Common.ReturnToIndex' | translate }}
</button>
</div>
<apollonav></apollonav>
<div class="container-fluid apollo-container" ng-controller="DiffItemController">
<section class="panel col-md-offset-1 col-md-10">
<header class="panel-heading">
<div class="row">
<div class="col-md-7">
<h4 class="modal-title">比较配置
<small ng-show="syncItemStep == 1">(第一步:选择比较信息)</small>
<small ng-show="syncItemStep == 2">(第二步:查看差异配置)</small>
</h4>
</div>
</header>
<div class="panel-body">
<div class="row" ng-show="syncItemStep == 1">
<div class="alert-info alert no-radius">
<strong>{{'Config.Diff.TipsTitle' | translate }}:</strong>
<ul>
<li>{{'Config.Diff.Tips' | translate }}</li>
</ul>
</div>
<div class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">{{'Config.Diff.DiffCluster' | translate }}</label>
<div class="col-sm-6">
<apolloclusterselector apollo-app-id="pageContext.appId"
apollo-default-all-checked="false" apollo-select="collectSelectedClusters"
apollo-default-checked-env="pageContext.env"
apollo-default-checked-cluster="pageContext.clusterName"></apolloclusterselector>
</div>
<div class="col-md-5 text-right">
<button type="button" class="btn btn-primary" ng-show="syncItemStep > 1 && syncItemStep < 3"
ng-click="syncItemNextStep(-1)">上一步
</button>
<button type="button" class="btn btn-primary" ng-show="syncItemStep < 2"
ng-click="diff()">下一步
</button>
<button type="button" class="btn btn-info" data-dismiss="modal"
ng-click="backToAppHomePage()">返回到项目首页
</button>
</div>
</div>
</header>
<div class="panel-body">
<div class="row" ng-show="syncItemStep == 1">
<div class="alert-info alert no-radius">
<strong>Tips:</strong>
<ul>
<li>通过比较配置功能,可以查看多个环境、集群间的配置差异</li>
</ul>
</div>
<div class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">要比较的集群</label>
<div class="col-sm-6">
<apolloclusterselector apollo-app-id="pageContext.appId" apollo-default-all-checked="false"
apollo-select="collectSelectedClusters"
apollo-default-checked-env="pageContext.env"
apollo-default-checked-cluster="pageContext.clusterName"></apolloclusterselector>
</div>
</div>
<hr>
</div>
<hr>
</div>
<!--step 2-->
<div class="row" ng-show="syncItemStep == 2">
<div class="row" style="margin-top: 10px;">
<div class="form-horizontal">
<div class="col-sm-12">
<label class="control-label">
<input type="checkbox" class="comment-toggle" ng-checked="showCommentDiff"
ng-click="showCommentDiff=!showCommentDiff">
{{'Config.Diff.HasDiffComment' | translate }}
</label>
</div>
<div class="col-sm-12 diff-content">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<td>Key</td>
<td ng-repeat="cluster in syncData.syncToNamespaces"
ng-bind="cluster.env + ':' + cluster.clusterName + ':' + cluster.namespaceName + ':Value'">
</td>
<td ng-show="showCommentDiff"
ng-repeat="cluster in syncData.syncToNamespaces"
ng-bind="cluster.env + ':' + cluster.clusterName + ':' + cluster.namespaceName + ':Comment'">
</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="(key, itemsKeyedByCluster) in itemsKeyedByKey">
<td width="15%" ng-bind="key"></td>
<td ng-repeat="cluster in syncData.syncToNamespaces"
ng-bind="(itemsKeyedByCluster[cluster.env + ':' + cluster.clusterName + ':' + cluster.namespaceName] || {}).value">
</td>
<td ng-show="showCommentDiff"
ng-repeat="cluster in syncData.syncToNamespaces"
ng-bind="(itemsKeyedByCluster[cluster.env + ':' + cluster.clusterName + ':' + cluster.namespaceName] || {}).comment">
</td>
</tr>
</tbody>
</table>
</div>
<!--step 2-->
<div class="row" ng-show="syncItemStep == 2">
<div class="row" style="margin-top: 10px;">
<div class="form-horizontal">
<div class="col-sm-12">
<label class="control-label">
<input type="checkbox"
class="comment-toggle"
ng-checked="showCommentDiff"
ng-click="showCommentDiff=!showCommentDiff">
是否比较注释
</label>
</div>
<div class="col-sm-12 diff-content">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<td>Key</td>
<td ng-repeat="cluster in syncData.syncToNamespaces"
ng-bind="cluster.env + ':' + cluster.clusterName + ':' + cluster.namespaceName + ':Value'"
></td>
<td ng-show="showCommentDiff"
ng-repeat="cluster in syncData.syncToNamespaces"
ng-bind="cluster.env + ':' + cluster.clusterName + ':' + cluster.namespaceName + ':Comment'"
></td>
</tr>
</thead>
<tbody>
<tr ng-repeat="(key, itemsKeyedByCluster) in itemsKeyedByKey">
<td width="15%" ng-bind="key"></td>
<td ng-repeat="cluster in syncData.syncToNamespaces"
ng-bind="(itemsKeyedByCluster[cluster.env + ':' + cluster.clusterName + ':' + cluster.namespaceName] || {}).value"></td>
<td ng-show="showCommentDiff"
ng-repeat="cluster in syncData.syncToNamespaces"
ng-bind="(itemsKeyedByCluster[cluster.env + ':' + cluster.clusterName + ':' + cluster.namespaceName] || {}).comment"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</section>
</div>
</section>
<showtextmodal text="text" />
</div>
<showtextmodal text="text"/>
</div>
<div ng-include="'../views/common/footer.html'"></div>
<div ng-include="'../views/common/footer.html'"></div>
<!-- jquery.js -->
<script src="../vendor/jquery.min.js" type="text/javascript"></script>
<script src="../vendor/select2/select2.min.js" type="text/javascript"></script>
<!-- jquery.js -->
<script src="../vendor/jquery.min.js" type="text/javascript"></script>
<script src="../vendor/select2/select2.min.js" type="text/javascript"></script>
<!--angular-->
<script src="../vendor/angular/angular.min.js"></script>
<script src="../vendor/angular/angular-resource.min.js"></script>
<script src="../vendor/angular/angular-toastr-1.4.1.tpls.min.js"></script>
<script src="../vendor/angular/loading-bar.min.js"></script>
<script src="../vendor/angular/angular-cookies.min.js"></script>
<!--angular-->
<script src="../vendor/angular/angular.min.js"></script>
<script src="../vendor/angular/angular-resource.min.js"></script>
<script src="../vendor/angular/angular-toastr-1.4.1.tpls.min.js"></script>
<script src="../vendor/angular/loading-bar.min.js"></script>
<script src="../vendor/angular/angular-translate.2.18.1/angular-translate.min.js"></script>
<script src="../vendor/angular/angular-translate.2.18.1/angular-translate-loader-static-files.min.js"></script>
<script src="../vendor/angular/angular-translate.2.18.1/angular-translate-storage-cookie.min.js"></script>
<!-- bootstrap.js -->
<script src="../vendor/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<!-- bootstrap.js -->
<script src="../vendor/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="../vendor/clipboard.min.js" type="text/javascript"></script>
<!--biz-->
<script type="application/javascript" src="../scripts/app.js"></script>
<script type="application/javascript" src="../scripts/services/AppService.js"></script>
<script type="application/javascript" src="../scripts/services/EnvService.js"></script>
<script type="application/javascript" src="../scripts/services/ConfigService.js"></script>
<script type="application/javascript" src="../scripts/services/UserService.js"></script>
<script type="application/javascript" src="../scripts/services/CommonService.js"></script>
<script type="application/javascript" src="../scripts/services/PermissionService.js"></script>
<script src="../vendor/clipboard.min.js" type="text/javascript"></script>
<!--biz-->
<script type="application/javascript" src="../scripts/app.js"></script>
<script type="application/javascript" src="../scripts/services/AppService.js"></script>
<script type="application/javascript" src="../scripts/services/EnvService.js"></script>
<script type="application/javascript" src="../scripts/services/ConfigService.js"></script>
<script type="application/javascript" src="../scripts/services/UserService.js"></script>
<script type="application/javascript" src="../scripts/services/CommonService.js"></script>
<script type="application/javascript" src="../scripts/services/PermissionService.js"></script>
<script type="application/javascript" src="../scripts/AppUtils.js"></script>
<script type="application/javascript" src="../scripts/controller/config/DiffConfigController.js"></script>
<script type="application/javascript" src="../scripts/AppUtils.js"></script>
<script type="application/javascript" src="../scripts/controller/config/DiffConfigController.js"></script>
<script type="application/javascript" src="../scripts/PageCommon.js"></script>
<script type="application/javascript" src="../scripts/directive/directive.js"></script>
<script type="application/javascript" src="../scripts/directive/show-text-modal-directive.js"></script>
<script type="application/javascript" src="../scripts/PageCommon.js"></script>
<script type="application/javascript" src="../scripts/directive/directive.js"></script>
<script type="application/javascript" src="../scripts/directive/show-text-modal-directive.js"></script>
</body>
</html>
\ No newline at end of file
</html>
<!doctype html>
<html ng-app="index">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="icon" href="./img/config.png">
......@@ -12,130 +11,127 @@
<link rel="stylesheet" type="text/css" media='all' href="vendor/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="styles/common-style.css">
<title>{{'Common.Title' | translate }}</title>
<title>Apollo配置中心</title>
</head>
<body>
<apollonav></apollonav>
<div id="app-list" class="hidden" ng-controller="IndexController">
<section class="media create-app-list">
<aside class="media-left text-center">
<h5>{{'Index.MyProject' | translate }}</h5>
</aside>
<aside class="media-body">
<div class="app-panel col-md-2 text-center" ng-click="goToCreateAppPage()"
ng-if="hasCreateApplicationPermission">
<div href="#" class="thumbnail create-btn hover cursor-pointer">
<img src="img/plus-white.png" />
<h5>{{'Index.CreateProject' | translate }}</h5>
</div>
<apollonav></apollonav>
<div id="app-list" class="hidden" ng-controller="IndexController">
<section class="media create-app-list">
<aside class="media-left text-center">
<h5>我的项目</h5>
</aside>
<aside class="media-body">
<div class="app-panel col-md-2 text-center" ng-click="goToCreateAppPage()" ng-if="hasCreateApplicationPermission">
<div href="#" class="thumbnail create-btn hover cursor-pointer">
<img src="img/plus-white.png"/>
<h5>创建项目</h5>
</div>
<div class="app-panel col-md-2 text-center" ng-repeat="app in createdApps"
ng-click="goToAppHomePage(app.appId)">
<div href="#" class="thumbnail hover cursor-pointer">
<h4 ng-bind="app.appId"></h4>
<h5 ng-bind="app.name"></h5>
</div>
</div>
<div class="app-panel col-md-2 text-center" ng-repeat="app in createdApps"
ng-click="goToAppHomePage(app.appId)">
<div href="#" class="thumbnail hover cursor-pointer">
<h4 ng-bind="app.appId"></h4>
<h5 ng-bind="app.name"></h5>
</div>
<div class="app-panel col-md-2 text-center" ng-show="hasMoreCreatedApps"
ng-click="getUserCreatedApps()">
<div href="#" class="thumbnail hover cursor-pointer">
<img class="more-img" src="img/more.png" />
<h5>{{'Index.LoadMore' | translate }}</h5>
</div>
</div>
<div class="app-panel col-md-2 text-center" ng-show="hasMoreCreatedApps"
ng-click="getUserCreatedApps()">
<div href="#" class="thumbnail hover cursor-pointer">
<img class="more-img" src="img/more.png"/>
<h5>加载更多</h5>
</div>
</aside>
</section>
<section class="media favorites-app-list">
<aside class="media-left text-center">
<h5>{{'Index.FavoriteItems' | translate }}</h5>
</aside>
<aside class="media-body">
<div class="app-panel col-md-2 text-center" ng-repeat="app in favorites"
ng-click="goToAppHomePage(app.appId)" ng-mouseover="toggleOperationBtn(app)"
ng-mouseout="toggleOperationBtn(app)">
<div class="thumbnail hover">
<h4 ng-bind="app.appId"></h4>
<h5 ng-bind="app.name"></h5>
<p class="operate-panel" ng-show="app.showOperationBtn">
<button class="btn btn-default btn-xs" title="{{'Index.Topping' | translate }}"
</div>
</aside>
</section>
<section class="media favorites-app-list">
<aside class="media-left text-center">
<h5>收藏的项目</h5>
</aside>
<aside class="media-body">
<div class="app-panel col-md-2 text-center"
ng-repeat="app in favorites"
ng-click="goToAppHomePage(app.appId)"
ng-mouseover="toggleOperationBtn(app)"
ng-mouseout="toggleOperationBtn(app)">
<div class="thumbnail hover">
<h4 ng-bind="app.appId"></h4>
<h5 ng-bind="app.name"></h5>
<p class="operate-panel" ng-show="app.showOperationBtn">
<button class="btn btn-default btn-xs" title="置顶"
ng-click="toTop(app.favoriteId);$event.stopPropagation();">
<img src="img/top.png" class="i-15">
</button>
<button class="btn btn-default btn-xs" title="{{'Index.FavoriteCancel' | translate }}"
<img src="img/top.png" class="i-15">
</button>
<button class="btn btn-default btn-xs" title="取消收藏"
ng-click="deleteFavorite(app.favoriteId);$event.stopPropagation();">
<img src="img/like.png" class="i-15">
</button>
</p>
</div>
<img src="img/like.png" class="i-15">
</button>
</p>
</div>
<div class="col-md-2 text-center" ng-show="hasMoreFavorites" ng-click="getUserFavorites()">
<div href="#" class="thumbnail hover cursor-pointer">
<img class="more-img" src="img/more.png" />
<h5>{{'Index.LoadMore' | translate }}</h5>
</div>
</div>
<div class="col-md-2 text-center" ng-show="hasMoreFavorites"
ng-click="getUserFavorites()">
<div href="#" class="thumbnail hover cursor-pointer">
<img class="more-img" src="img/more.png"/>
<h5>加载更多</h5>
</div>
<div class="no-favorites text-center" ng-show="!favorites || favorites.length == 0">
<h4>{{'Index.FavoriteTip' | translate }}</h4>
</div>
<div class="no-favorites text-center" ng-show="!favorites || favorites.length == 0">
<h4>您还没有收藏过任何项目,在项目主页可以收藏项目哟~</h4>
</div>
</aside>
</section>
<section class="media visit-app-list" ng-show="visitedApps && visitedApps.length">
<aside class="media-left text-center">
<h5>最近浏览的项目</h5>
</aside>
<aside class="media-body">
<div class="app-panel col-md-2 text-center"
ng-repeat="app in visitedApps"
ng-click="goToAppHomePage(app.appId)">
<div class="thumbnail hover">
<h4 ng-bind="app.appId"></h4>
<h5 ng-bind="app.name"></h5>
</div>
</div>
</aside>
</section>
</div>
</aside>
</section>
<section class="media visit-app-list" ng-show="visitedApps && visitedApps.length">
<aside class="media-left text-center">
<h5>{{'Index.RecentlyViewedItems' | translate }}</h5>
</aside>
<aside class="media-body">
<div class="app-panel col-md-2 text-center" ng-repeat="app in visitedApps"
ng-click="goToAppHomePage(app.appId)">
<div class="thumbnail hover">
<h4 ng-bind="app.appId"></h4>
<h5 ng-bind="app.name"></h5>
</div>
</div>
</aside>
</section>
</div>
<div ng-include="'views/common/footer.html'"></div>
<div ng-include="'views/common/footer.html'"></div>
<!--angular-->
<script src="vendor/angular/angular.min.js"></script>
<script src="vendor/angular/angular-resource.min.js"></script>
<script src="vendor/angular/angular-toastr-1.4.1.tpls.min.js"></script>
<script src="vendor/angular/loading-bar.min.js"></script>
<!--angular-->
<script src="vendor/angular/angular.min.js"></script>
<script src="vendor/angular/angular-resource.min.js"></script>
<script src="vendor/angular/angular-toastr-1.4.1.tpls.min.js"></script>
<script src="vendor/angular/loading-bar.min.js"></script>
<script src="vendor/angular/angular-cookies.min.js"></script>
<!-- jquery.js -->
<script src="vendor/jquery.min.js" type="text/javascript"></script>
<script src="vendor/select2/select2.min.js" type="text/javascript"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate-loader-static-files.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate-storage-cookie.min.js"></script>
<!-- bootstrap.js -->
<script src="vendor/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<!-- jquery.js -->
<script src="vendor/jquery.min.js" type="text/javascript"></script>
<script src="vendor/select2/select2.min.js" type="text/javascript"></script>
<script type="application/javascript" src="scripts/app.js"></script>
<script type="application/javascript" src="scripts/services/AppService.js"></script>
<script type="application/javascript" src="scripts/services/EnvService.js"></script>
<script type="application/javascript" src="scripts/services/UserService.js"></script>
<script type="application/javascript" src="scripts/services/CommonService.js"></script>
<script type="application/javascript" src="scripts/services/FavoriteService.js"></script>
<script type="application/javascript" src="scripts/services/PermissionService.js"></script>
<script type="application/javascript" src="scripts/AppUtils.js"></script>
<script type="application/javascript" src="scripts/directive/directive.js"></script>
<!-- bootstrap.js -->
<script src="vendor/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script type="application/javascript" src="scripts/app.js"></script>
<script type="application/javascript" src="scripts/services/AppService.js"></script>
<script type="application/javascript" src="scripts/services/EnvService.js"></script>
<script type="application/javascript" src="scripts/services/UserService.js"></script>
<script type="application/javascript" src="scripts/services/CommonService.js"></script>
<script type="application/javascript" src="scripts/services/FavoriteService.js"></script>
<script type="application/javascript" src="scripts/services/PermissionService.js"></script>
<script type="application/javascript" src="scripts/AppUtils.js"></script>
<script type="application/javascript" src="scripts/directive/directive.js"></script>
<script type="application/javascript" src="scripts/controller/IndexController.js"></script>
<script type="application/javascript" src="scripts/controller/IndexController.js"></script>
</body>
</html>
\ No newline at end of file
</html>
......@@ -2,7 +2,7 @@
<html lang="en" ng-app="login">
<head>
<meta charset="UTF-8">
<title>{{ 'Common.Title' | translate }}</title>
<title>Apollo配置中心</title>
<link rel="icon" href="./img/config.png">
<link rel="stylesheet" type="text/css" href="vendor/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="vendor/font-awesome.min.css">
......@@ -257,7 +257,7 @@
</div>
<div class="col-xs-12 form-group pull-right">
<input type="submit" name="login-submit" id="login-submit" tabindex="4"
class="form-control btn btn-login" value="{{'Login.Login' | translate }}">
class="form-control btn btn-login" value="登录">
</div>
</form>
</div>
......@@ -277,11 +277,6 @@
<script src="vendor/angular/angular-resource.min.js"></script>
<script src="vendor/angular/angular-toastr-1.4.1.tpls.min.js"></script>
<script src="vendor/angular/loading-bar.min.js"></script>
<script src="vendor/angular/angular-cookies.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate-loader-static-files.min.js"></script>
<script src="vendor/angular/angular-translate.2.18.1/angular-translate-storage-cookie.min.js"></script>
<script type="application/javascript" src="scripts/app.js"></script>
<script type="application/javascript" src="scripts/AppUtils.js"></script>
......
appUtil.service('AppUtil', ['toastr', '$window', '$q', '$translate', function (toastr, $window, $q, $translate) {
appUtil.service('AppUtil', ['toastr', '$window', '$q', function (toastr, $window, $q) {
function parseErrorMsg(response) {
if (response.status == -1) {
return $translate.instant('Common.LoginExpiredTips');
return "您的登录信息已过期,请刷新页面后重试";
}
var msg = "Code:" + response.status;
if (response.data.message != null) {
......@@ -13,7 +13,7 @@ appUtil.service('AppUtil', ['toastr', '$window', '$q', '$translate', function (t
function parsePureErrorMsg(response) {
if (response.status == -1) {
return $translate.instant('Common.LoginExpiredTips');
return "您的登录信息已过期,请刷新页面后重试";
}
if (response.data.message != null) {
return response.data.message;
......@@ -25,23 +25,23 @@ appUtil.service('AppUtil', ['toastr', '$window', '$q', '$translate', function (t
var d = $q.defer();
if (requestBody) {
resource(requestParams, requestBody, function (result) {
d.resolve(result);
},
function (result) {
d.reject(result);
});
d.resolve(result);
},
function (result) {
d.reject(result);
});
} else {
resource(requestParams, function (result) {
d.resolve(result);
},
function (result) {
d.reject(result);
});
d.resolve(result);
},
function (result) {
d.reject(result);
});
}
return d.promise;
}
return {
errorMsg: parseErrorMsg,
pureErrorMsg: parsePureErrorMsg,
......@@ -92,7 +92,7 @@ appUtil.service('AppUtil', ['toastr', '$window', '$q', '$translate', function (t
hideModal: function (modal) {
$(modal).modal("hide");
},
checkIPV4: function (ip) {
checkIPV4:function (ip) {
return /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test(ip);
}
}
......
/**utils*/
var appUtil = angular.module('app.util', ['toastr', 'ngCookies', 'pascalprecht.translate'])
.config(['$translateProvider', function ($translateProvider) {
var appUtil = angular.module('app.util', ['toastr']);
$translateProvider.useSanitizeValueStrategy(null); // disable sanitization by default
$translateProvider.useCookieStorage();
$translateProvider.useStaticFilesLoader({
prefix: '/i18n/',
suffix: '.json'
});
$translateProvider.registerAvailableLanguageKeys(['en', 'zh-CN'], {
'zh-*': 'zh-CN',
'zh': 'zh-CN',
'en-*': 'en',
"*": "en"
})
$translateProvider.uniformLanguageTag('bcp47').determinePreferredLanguage();
}]);
/**service module 定义*/
var appService = angular.module('app.service', ['ngResource', 'app.util'])
var appService = angular.module('app.service', ['ngResource']);
/** directive */
var directive_module = angular.module('apollo.directive', ['app.service', 'app.util', 'toastr', 'pascalprecht.translate']);
var directive_module = angular.module('apollo.directive', ['app.service', 'app.util', 'toastr']);
/** page module 定义*/
// 首页
var index_module = angular.module('index', ['toastr', 'app.service', 'apollo.directive', 'app.util', 'angular-loading-bar', 'pascalprecht.translate']);
var index_module = angular.module('index', ['toastr', 'app.service', 'apollo.directive', 'app.util', 'angular-loading-bar']);
//项目主页
var application_module = angular.module('application', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar', 'valdr', 'ui.ace', 'ngSanitize']);
var application_module = angular.module('application', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar', 'valdr', 'ui.ace']);
//创建项目页面
var app_module = angular.module('create_app', ['apollo.directive', 'toastr', 'app.service', 'app.util', 'angular-loading-bar', 'valdr','pascalprecht.translate']);
var app_module = angular.module('create_app', ['apollo.directive', 'toastr', 'app.service', 'app.util', 'angular-loading-bar', 'valdr']);
//配置同步页面
var sync_item_module = angular.module('sync_item', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar']);
// 比较页面
......@@ -43,7 +27,7 @@ var setting_module = angular.module('setting', ['app.service', 'apollo.directive
//role
var role_module = angular.module('role', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar']);
//cluster
var cluster_module = angular.module('cluster', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar', 'valdr']);
var cluster_module = angular.module('cluster', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar' , 'valdr']);
//release history
var release_history_module = angular.module('release_history', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar']);
//open manage
......@@ -51,7 +35,7 @@ var open_manage_module = angular.module('open_manage', ['app.service', 'apollo.d
//user
var user_module = angular.module('user', ['apollo.directive', 'toastr', 'app.service', 'app.util', 'angular-loading-bar', 'valdr']);
//login
var login_module = angular.module('login', ['app.service', 'toastr', 'app.util', 'pascalprecht.translate']);
var login_module = angular.module('login', ['toastr', 'app.util']);
//delete app cluster namespace
var delete_app_cluster_namespace_module = angular.module('delete_app_cluster_namespace', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar']);
//system info
......
......@@ -24,10 +24,10 @@ function publishDenyDirective(AppUtil, EventManager) {
AppUtil.hideModal(MODAL_ID);
EventManager.emit(EventManager.EventType.EMERGENCY_PUBLISH,
{
mergeAndPublish: scope.mergeAndPublish,
namespace: scope.toReleaseNamespace
});
{
mergeAndPublish: scope.mergeAndPublish,
namespace: scope.toReleaseNamespace
});
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册