Commit 9bf8ec43 by Yiming Liu

Merge pull request #112 from lepdou/portal

Portal index page
parents 5b6e8bc8 b472d1b7
...@@ -8,11 +8,14 @@ import org.springframework.web.bind.annotation.RequestMethod; ...@@ -8,11 +8,14 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.ctrip.apollo.core.dto.AppDTO; import com.ctrip.apollo.core.dto.AppDTO;
import com.ctrip.apollo.core.enums.Env;
import com.ctrip.apollo.core.exception.BadRequestException; import com.ctrip.apollo.core.exception.BadRequestException;
import com.ctrip.apollo.core.utils.StringUtils; import com.ctrip.apollo.core.utils.StringUtils;
import com.ctrip.apollo.portal.entity.ClusterNavTree; import com.ctrip.apollo.portal.entity.ClusterNavTree;
import com.ctrip.apollo.portal.service.AppService; import com.ctrip.apollo.portal.service.AppService;
import java.util.List;
@RestController @RestController
@RequestMapping("/apps") @RequestMapping("/apps")
public class AppController { public class AppController {
...@@ -20,6 +23,12 @@ public class AppController { ...@@ -20,6 +23,12 @@ public class AppController {
@Autowired @Autowired
private AppService appService; private AppService appService;
@RequestMapping("/env/{env}")
public List<AppDTO> findAllApp(@PathVariable String env){
return appService.findAll(Env.valueOf(env));
}
@RequestMapping("/{appId}/navtree") @RequestMapping("/{appId}/navtree")
public ClusterNavTree nav(@PathVariable String appId) { public ClusterNavTree nav(@PathVariable String appId) {
if (StringUtils.isEmpty(appId)) { if (StringUtils.isEmpty(appId)) {
......
...@@ -29,6 +29,10 @@ public class AppService { ...@@ -29,6 +29,10 @@ public class AppService {
@Autowired @Autowired
private AdminServiceAPI.AppAPI appAPI; private AdminServiceAPI.AppAPI appAPI;
public List<AppDTO> findAll(Env env){
return appAPI.getApps(env);
}
public ClusterNavTree buildClusterNavTree(String appId) { public ClusterNavTree buildClusterNavTree(String appId) {
ClusterNavTree tree = new ClusterNavTree(); ClusterNavTree tree = new ClusterNavTree();
......
<!doctype html> <!doctype html>
<html ng-app="create_app"> <html ng-app="index">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- styles --> <!-- styles -->
<link rel="stylesheet" type="text/css" href="vendor/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="vendor/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="vendor/angular/angular-toastr-1.4.1.min.css"> <link rel="stylesheet" type="text/css" href="vendor/angular/angular-toastr-1.4.1.min.css">
<link rel="stylesheet" type="text/css" media='all' href="vendor/angular/loading-bar.min.css"> <link rel="stylesheet" type="text/css" media='all' href="vendor/angular/loading-bar.min.css">
<link href="//cdn.bootcss.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="styles/common-style.css"> <link rel="stylesheet" type="text/css" href="styles/common-style.css">
<title>apollo</title> <title>apollo</title>
</head> </head>
<body> <body ng-controller="IndexController">
<div ng-include="'views/common/nav.html'"></div> <!--<div ng-include="'views/common/nav.html'"></div>-->
<div class="container-fluid apollo-container"> <header class="site-header jumbotron">
<div class="container">
<div class="row">
<div class="col-xs-12"><h1>Apollo</h1>
<p>携程统一配置中心<br>
<span class="package-amount">共收录了 <strong>{{appsCount}}</strong> 个项目</span>
<a class="btn btn-success btn-lg" href="views/create-app.html">创建项目</a>
</p>
<div class="row"> <form class="" role="search">
<div class="col-lg-12 text-center"> <div class="form-group"><input type="text" class="form-control search clearable"
<h1>welcome to apollo!~~</h1> placeholder="搜索App, 例如:900088" ng-model="searchKey" ng-change="search()"></div>
</form>
</div>
<img src="img/dolphin.jpg" style="width: 100px; height: 130px;"/>
<a class="btn btn-primary btn-lg" href="views/create-app.html" role="button">create app</a>
</div> </div>
</div> </div>
</header>
<div class="container-fluid apollo-container">
<div class="list-group apps">
<a class="package list-group-item" target="_blank" href="/views/app.html?#/appid={{app.appId}}" ng-repeat="app in apps ">
<div class="row">
<div class="col-md-3"><h4 class="apps-name">{{app.appId}}</h4></div>
<div class="col-md-7 hidden-xs">
<p class="apps-description">{{app.name}}</p>
</div>
<div class="col-md-2">
<p class="apps-description">
{{app.ownerName}}
<br>
{{app.ownerEmail}}
</p>
</div>
<!--<div class="package-extra-info col-md-9 col-md-offset-3 col-xs-12"><span><i-->
<!--class="glyphicon glyphicon-fire"></i> 92793</span>-->
<!--</div>-->
</div>
</a>
</div>
</div> </div>
<div ng-include="'views/common/footer.html'"></div> <div ng-include="'views/common/footer.html'"></div>
<!--angular--> <!--angular-->
<script src="vendor/angular/angular.min.js"></script> <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-resource.min.js"></script>
<script src="vendor/angular/angular-toastr-1.4.1.tpls.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/loading-bar.min.js"></script>
...@@ -43,6 +73,6 @@ ...@@ -43,6 +73,6 @@
<script type="application/javascript" src="scripts/app.js"></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/AppService.js"></script>
<script type="application/javascript" src="scripts/controller/CreateAppController.js"></script> <script type="application/javascript" src="scripts/controller/IndexController.js"></script>
</body> </body>
</html> </html>
...@@ -2,8 +2,10 @@ ...@@ -2,8 +2,10 @@
var appService = angular.module('app.service', ['ngResource']); var appService = angular.module('app.service', ['ngResource']);
/** page module 定义*/ /** page module 定义*/
// 首页
var index_module = angular.module('index', ['toastr', 'app.service', 'angular-loading-bar']);
//项目主页 //项目主页
var application_module = angular.module('application', ['ngResource','ui.router', 'app.service', 'toastr', 'angular-loading-bar']); var application_module = angular.module('application', ['app.service', 'toastr', 'angular-loading-bar']);
//创建项目页面 //创建项目页面
var create_app_module = angular.module('create_app', ['ngResource', 'toastr', 'app.service', 'angular-loading-bar']); var create_app_module = angular.module('create_app', ['ngResource', 'toastr', 'app.service', 'angular-loading-bar']);
......
create_app_module.controller('CreateAppController', ['$scope', '$window', 'toastr', 'AppService', create_app_module.controller('CreateAppController', ['$scope', '$window', 'toastr', 'AppService',
function ($scope, $window, toastr, AppService) { function ($scope, $window, toastr, AppService) {
//todo 便于测试,后续删掉
$scope.app = {
appId: 1001,
name: 'lepdou',
ownerEmail: 'qqq@qq.com',
ownerName: 'le'
};
$scope.save = function () { $scope.save = function () {
AppService.add($scope.app).then(function (result) { AppService.add($scope.app).then(function (result) {
toastr.success('添加成功!'); toastr.success('添加成功!');
......
index_module.controller('IndexController', ['$scope', '$window', 'toastr', 'AppService',
function ($scope, $window, toastr, AppService) {
$scope.env = 'LOCAL';
var apps = [];
AppService.find_all_app($scope.env).then(function (result) {
apps = result;
$scope.apps = apps;
$scope.appsCount = apps.length;
});
$scope.search = function () {
var key = $scope.searchKey;
if (key == '') {
$scope.apps = apps;
return;
}
var result = [];
apps.forEach(function (item) {
if (item.appId.indexOf(key) >= 0 || item.name.indexOf(key) >= 0) {
result.push(item);
}
});
$scope.apps = result;
};
}]);
appService.service('AppService', ['$resource', '$q', function ($resource, $q) { appService.service('AppService', ['$resource', '$q', function ($resource, $q) {
var app_resource = $resource('/apps/:appId', {}, { var app_resource = $resource('/apps/:appId', {}, {
find_all_app:{
method: 'GET',
isArray: true,
url:'/apps/env/:env'
},
load_navtree:{ load_navtree:{
methode: 'GET', methode: 'GET',
isArray:false, isArray:false,
...@@ -15,7 +20,18 @@ appService.service('AppService', ['$resource', '$q', function ($resource, $q) { ...@@ -15,7 +20,18 @@ appService.service('AppService', ['$resource', '$q', function ($resource, $q) {
} }
}); });
return { return {
load_nav_tree: function loadNavTree(appId){ find_all_app: function (env) {
var d = $q.defer();
app_resource.find_all_app({
env: env
}, function (result) {
d.resolve(result);
}, function (result) {
d.reject(result);
});
return d.promise;
},
load_nav_tree: function (appId){
var d = $q.defer(); var d = $q.defer();
app_resource.load_navtree({ app_resource.load_navtree({
appId: appId appId: appId
...@@ -26,7 +42,7 @@ appService.service('AppService', ['$resource', '$q', function ($resource, $q) { ...@@ -26,7 +42,7 @@ appService.service('AppService', ['$resource', '$q', function ($resource, $q) {
}); });
return d.promise; return d.promise;
}, },
add: function add(app) { add: function (app) {
var d = $q.defer(); var d = $q.defer();
app_resource.add_app({}, app, function (result) { app_resource.add_app({}, app, function (result) {
d.resolve(result); d.resolve(result);
...@@ -35,7 +51,7 @@ appService.service('AppService', ['$resource', '$q', function ($resource, $q) { ...@@ -35,7 +51,7 @@ appService.service('AppService', ['$resource', '$q', function ($resource, $q) {
}); });
return d.promise; return d.promise;
}, },
load: function load(appId) { load: function (appId) {
var d = $q.defer(); var d = $q.defer();
app_resource.load_app({ app_resource.load_app({
appId: appId appId: appId
......
...@@ -39,6 +39,36 @@ table th { ...@@ -39,6 +39,36 @@ table th {
text-align: center; text-align: center;
} }
/*首页*/
.site-header{
position: relative;
text-align: center;
background-color: #27AE60;
color: #fff;
margin-bottom: 0;
}
.site-header .search{
border: 2px solid #27AE60;
-webkit-box-shadow: none;
box-shadow: none;
font-size: 16px;
padding: 13px 30px;
border-radius: 0;
height: auto;
text-align: center;
}
.list-group{
margin-top: 20px;
}
.apps .apps-description{
color: gray;
font-family: "Apple Color Emoji";
font-size: 16px;
}
.app { .app {
background-color: #f5f5f5; background-color: #f5f5f5;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment