first commit

This commit is contained in:
yizhaorong
2019-06-30 17:22:53 +08:00
commit e31aff5ffb
71 changed files with 11619 additions and 0 deletions
BIN
View File
Binary file not shown.
+44
View File
@@ -0,0 +1,44 @@
########################################################
### Mysql
########################################################
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/app_manager
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
########################################################
### Java Persistence Api
########################################################
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect
############################################################
#
# 上传文件大小
#
############################################################
spring.servlet.multipart.max-file-size=300MB
spring.servlet.multipart.max-request-size=300MB
############################################################
#
# ssl
#
############################################################
server.ssl.key-store=classpath:server.pkcs12
server.ssl.key-store-password=123456
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=1
# 自定义配置
server.port=443
server.http.port=80
config.debug=debug
server.domain=192.168.0.108
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0"><dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string><![CDATA[${aPackage.safeDownloadURL}]]></string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<integer>0</integer>
<key>url</key>
<string><![CDATA[${aPackage.iconURL}]]></string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string><![CDATA[${aPackage.iconURL}]]></string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>${aPackage.bundleID}</string>
<key>bundle-version</key>
<string><![CDATA[${aPackage.version}]]></string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string><![CDATA[${aPackage.name}]]></string>
</dict>
</dict>
</array>
</dict></plist>
Binary file not shown.
Binary file not shown.
Binary file not shown.
+20
View File
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDVDCCAjwCCQCZ0rtCbbUBAjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQGEwJD
TjERMA8GA1UECAwIWmhlSmlhbmcxETAPBgNVBAcMCEhhbmdaaG91MSEwHwYDVQQL
DBhEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQxFDASBgNVBAMMCzE5Mi4xNjguMC4q
MB4XDTE5MDYzMDA4MjI0NFoXDTI5MDYyNzA4MjI0NFowbDELMAkGA1UEBhMCQ04x
ETAPBgNVBAgMCFpoZUppYW5nMREwDwYDVQQHDAhIYW5nWmhvdTEhMB8GA1UECwwY
RG9tYWluIENvbnRyb2wgVmFsaWRhdGVkMRQwEgYDVQQDDAsxOTIuMTY4LjAuKjCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMIEYFPCU5m4kP3/IqAzX21q
8rRzwpwe0FMxef3Q3NI64H6Y+Hi064WZuX5W9PuAHyyBuxUYTObMC+AI6rmtV8na
5+oGrpnJH0dBjtLL/04unFs5ArSd2ob5hQDZ+bukJMo8ffiOw4T882P9wEiRBNXw
RQOJBKuG4zAhDLyAgcpZ96g4Is+3TtgfQnVfbSWIcT6B+mS7yVKJM+Ov0twWb60q
94Fk8NlPyq5AhIiM8O7W74IMr9Uu/woMMJ91wJoBnp5MqDl79ebGQzuzOHY0E1VX
qyp2RkAZgzEgGOpwLXWOzYfGu2A+HdaMleCZQ2d/xF81w17x6hue3CCS0AIqvMUC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAlEeut6xHWX7H58c2uqUtak7AYS1P0KmB
hN1zuFQ/lwn87TQ9JtLJK8Ock+2mIDadnRzKPPwGfKlKgNRT6kj+MYixnL+xeiE8
0bIPs2RAPu0XGbbPFIX9VeHC7gTbixbjPQY8MmrvgTizwnooAdrFg9XrkN9BNgj/
f43kwlEA9lw0L8hjcr1EM86IQCFXTUzLdJAW13WrVMQsO7ZVz/09mtHnH0GEVfTv
jn/j7Sykr9sEwBNBtKSmbCahSj2CBft4WZl0PyE1LnEbeu29e6xN0XUh9C6OUyXZ
wTAwy+aaBE2XID9nHHH0G9EVHlDgm9SnvjNRN8nXag1/z2iESkqK/A==
-----END CERTIFICATE-----
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
+459
View File
@@ -0,0 +1,459 @@
@font-face {
font-family: partner;
src: url(./fonts/ipartner.eot?rkodm6);
src: url(./fonts/ipartner.eot?rkodm6#iefix) format("embedded-opentype"), url(./fonts/ipartner.ttf?rkodm6) format("truetype"), url(./fonts/ipartner.woff?rkodm6) format("woff"), url(./fonts/ipartner.svg?rkodm6#ipartner) format("svg");
font-weight: 400;
font-style: normal
}
[class*=" ipartner-"], [class^=ipartner-] {
font-family: partner!important;
speak: none;
font-style: normal;
font-weight: 400;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale
}
.ipartner-swift:before {
content: "\e900"
}
.ipartner-qingcloud:before {
content: "\e902"
}
.ipartner-devlink:before {
content: "\e920"
}
.ipartner-logo-pingxx:before {
content: "\e921"
}
.ipartner-logo-qiniu:before {
content: "\e922"
}
.ipartner-logo-leancloud:before {
content: "\e923"
}
.ipartner-logo-flowci:before {
content: "\e924"
}
.ipartner-deveco:before {
content: "\e925"
}
.ipartner-wilddog:before {
content: "\e926"
}
.ipartner-xitu:before {
content: "\e927"
}
.ipartner-36kr:before {
content: "\e928"
}
@font-face {
font-family: icomoon;
src: url(./fonts/icomoon.eot?wcusdg);
src: url(./fonts/icomoon.eot?wcusdg#iefix) format("embedded-opentype"), url(./fonts/icomoon.ttf?wcusdg) format("truetype"), url(./fonts/icomoon.woff?wcusdg) format("woff"), url(./fonts/icomoon.svg?wcusdg#icomoon) format("svg");
font-weight: 400;
font-style: normal
}
[class*=" icon-"], [class^=icon-] {
font-family: icomoon!important;
speak: none;
font-style: normal;
font-weight: 400;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale
}
.icon-cake:before {
content: "\e900"
}
.icon-weibo:before {
content: "\e600"
}
.icon-wechat:before {
content: "\e601"
}
.icon-firim:before {
content: "\e602"
}
.icon-bug:before {
content: "\e603"
}
.icon-ion:before {
content: "\e604"
}
.icon-angle-right:before {
content: "\e606"
}
.icon-cloud-download:before {
content: "\e607"
}
.icon-question:before {
content: "\e608"
}
.icon-optimize-upload:before {
content: "\e609"
}
.icon-console:before {
content: "\e60a"
}
.icon-microscope:before {
content: "\e60b"
}
.icon-user-access:before {
content: "\e60c"
}
.icon-logo-jiecao:before {
content: "\e60d"
}
.icon-m:before {
content: "\e60e"
}
.icon-f:before {
content: "\e60f"
}
.icon-plugin:before {
content: "\e610"
}
.icon-launch:before {
content: "\e611"
}
.icon-brace-left:before {
content: "\e613"
}
.icon-logo:before {
content: "\e620"
}
.icon-thumbsup:before {
content: "\e615"
}
.icon-webhooks:before {
content: "\e616"
}
.icon-brace-right:before {
content: "\e617"
}
.icon-comma-eye:before {
content: "\e618"
}
.icon-mouth:before {
content: "\e619"
}
.icon-brace-hor:before {
content: "\e61a"
}
.icon-brace-right-b:before {
content: "\e61b"
}
.icon-brace-left-b:before {
content: "\e61c"
}
.icon-brace-box:before {
content: "\e61d"
}
.icon-menu:before {
content: "\e61e"
}
.icon-app:before {
content: "\e61f"
}
.icon-box:before {
content: "\e620"
}
.icon-combo:before {
content: "\e621"
}
.icon-device:before {
content: "\e622"
}
.icon-face:before {
content: "\e623"
}
.icon-file:before {
content: "\e624"
}
.icon-msg:before {
content: "\e625"
}
.icon-pen:before {
content: "\e626"
}
.icon-ipa:before {
content: "\e627"
}
.icon-lock2:before {
content: "\e628"
}
.icon-qrcode:before {
content: "\e629"
}
.icon-rollback:before {
content: "\e62a"
}
.icon-eye:before {
content: "\e62b"
}
.icon-plus:before {
content: "\e62c"
}
.icon-chart:before {
content: "\e62d"
}
.icon-idea:before {
content: "\e62e"
}
.icon-owner:before {
content: "\e62f"
}
.icon-search:before {
content: "\e630"
}
.icon-studio:before {
content: "\e631"
}
.icon-upload-cloud2:before {
content: "\e632"
}
.icon-android:before {
content: "\e633"
}
.icon-trash:before {
content: "\e634"
}
.icon-attachment:before {
content: "\e635"
}
.icon-apple:before {
content: "\e636"
}
.icon-calendar:before {
content: "\e637"
}
.icon-calendar2:before {
content: "\e638"
}
.icon-eye-close:before {
content: "\e639"
}
.icon-reply:before {
content: "\e63a"
}
.icon-email:before {
content: "\e63b"
}
.icon-error2:before {
content: "\e63c"
}
.icon-cross:before {
content: "\e63d"
}
.icon-user-plus:before {
content: "\e63e"
}
.icon-ios:before {
content: "\e63f"
}
.icon-filter:before {
content: "\e640"
}
.icon-test-speed:before {
content: "\e641"
}
.icon-udid:before {
content: "\e642"
}
.icon-update:before {
content: "\e643"
}
.icon-comma:before {
content: "\e644"
}
.icon-i:before {
content: "\e645"
}
.icon-r:before {
content: "\e646"
}
.icon-f-dot:before {
content: "\e647"
}
.icon-layers:before {
content: "\e648"
}
.icon-news:before {
content: "\e649"
}
.icon-percent:before {
content: "\e64a"
}
.icon-bughd:before {
content: "\e64b"
}
.icon-incode:before {
content: "\e64c"
}
.icon-message:before {
content: "\e64d"
}
.icon-eclipse:before {
content: "\e64e"
}
.icon-turkey:before {
content: "\e901"
}
.icon-jenkins:before {
content: "\e902"
}
.icon-gradle:before {
content: "\e903"
}
.icon-statistics:before {
content: "\e904"
}
.icon-done:before {
content: "\e905"
}
.icon-qiniu:before {
content: "\e906"
}
.icon-logo-leancloud:before {
content: "\e907"
}
.icon-logo-jd:before {
content: "\e908"
}
.icon-logo-xiachufang:before {
content: "\e909"
}
.icon-logo-ebaoyang:before {
content: "\e90a"
}
.icon-logo-jumei:before {
content: "\e90b"
}
.icon-cart:before {
content: "\e90c"
}
.icon-users:before {
content: "\e90d"
}
.icon-spinner3:before {
content: "\e97c"
}
.icon-infinite:before {
content: "\ea2f"
}
.icon-spinner:before {
content: "\f110"
}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+183
View File
@@ -0,0 +1,183 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="renderer" content="webkit">
<title>应用列表</title>
<link rel="icon" type="image/x-icon" th:href="@{/images/favicon.ico}" />
<link rel="stylesheet" th:href="@{/css/icons.css}">
<link rel="stylesheet" th:href="@{/css/bootstrap.css}">
<link rel="stylesheet" th:href="@{/css/manage.css}">
<link rel="stylesheet" th:href="@{/css/index.css}">
<script type="text/javascript" th:src="@{/js/jquery-1.11.0.min.js}"></script>
</head>
<body class="ng-scope">
<nav class="navbar navbar-transparent fade-out navbar-black" role="navigation">
<div class="navbar-header"><a class="navbar-brand" href="/apps"><i class="icon-logo"></i> </a></div>
<div class="collapse navbar-collapse navbar-ex1-collapse ng-scope" ng-controller="NavbarController">
<div class="dropdown">
<div></div>
</div>
</div>
</nav>
<div class="menu-toggle fade-out"><i class="icon-menu"></i></div>
<div class="navbar-wrapper ng-scope">
<div ng-controller="NavbarController" class="ng-scope">
<div class="navbar-header-wrap">
<div class="middle-wrapper">
<nav>
<h1 class="navbar-title logo">
<i class="icon-logo"></i>
</h1>
<i class="icon-angle-right"></i>
<div class="navbar-title primary-title">
<a class="ng-binding" th:href="${baseURL} + 'apps'">我的应用</a>
</div>
<i class="icon-angle-right ng-hide"></i>
</nav>
</div>
</div>
</div>
</div><!-- ngInclude: '/templates_manage/upload_modal.html' -->
<section data-ui-view="" class="ng-scope" style="">
<div class="page-apps ng-scope">
<div class="middle-wrapper">
</div><!-- ngIf: !appsReady -->
<div class="middle-wrapper container-fluid" ng-show="appsReady">
<div class="apps row">
<upload-card id="uploadCard" class="components-upload-card col-xs-4 col-sm-4 col-md-4 app-animator" >
<div class="card text-center">
<div class="dashed-space">
<table>
<tbody>
<tr>
<td>
<i class="icon-upload-cloud2"></i>
<div class="text drag-state">
<span id="upload-progress" translate="DRAG_TO_UPLOAD" class="ng-scope">拖拽到这里上传</span>
<span translate="DROP_TO_UPLOAD" class="ng-scope">快松手</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</upload-card>
<div th:each="app : ${apps}" class="col-xs-4 col-sm-4 col-md-4 app-animator ng-scope">
<div th:class="'card app ' + @{'card-' + ${app.platform}}">
<i th:class="'type-icon ' + @{'icon-' + ${app.platform}}"></i>
<div class="type-mark"></div>
<a class="appicon" th:href="'/apps/' + ${app.id}" target="_blank">
<img class="icon ng-isolate-scope" width="100" height="100" th:src="@{'/' + ${app.icon}}" />
</a>
<!-- ngIf: app.has_combo --><br>
<p class="appname" th:data="@{${baseURL} + 'apps/' + ${app.id}}">
<i class="icon-owner"></i>
<span class="ng-binding">[[${app.name}]]</span></p>
<table>
<tbody>
<tr>
<td class="ng-binding">短链接:</td>
<td><span class="ng-binding">[[${baseURL}]]s/[[${app.shortCode}]]</span></td>
</tr>
<tr>
<td class="ng-binding">包名:</td>
<td>
<span title="com.mistong.ewt360" class="ng-binding">[[${app.bundleID}]]</span>
</td>
</tr>
<tr>
<td class="ng-binding">版本:</td>
<td>
<span class="ng-binding">[[${app.version}]] ( Build [[${app.buildVersion}]] )</span>
</td>
</tr>
</tbody>
</table>
<div class="action">
<a class="ng-binding" th:href="'/apps/' + ${app.id}">
<i class="icon-pen"></i> 编辑</a>
<a th:href="@{${baseURL}+'s/'+${app.shortCode}}" target="_blank" class="ng-binding">
<i class="icon-eye"></i> 预览</a>
<button class="btn btn-remove ng-scope" th:data="${app.id}">
<i class="icon icon-trash"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<div alert-bar="" class="alert-bar ng-hide" ng-show="anyErrors">
<div class="action" ng-click="close()"></div>
<div class="inner">
<p ng-bind="errors" class="ng-binding"></p>
</div>
</div>
<script type="text/javascript">
var dashboard = document.getElementById("uploadCard")
dashboard.addEventListener("dragover", function (e) {
e.preventDefault()
e.stopPropagation()
})
dashboard.addEventListener("dragenter", function (e) {
e.preventDefault()
e.stopPropagation()
})
dashboard.addEventListener("drop", function (e) {
// 必须要禁用浏览器默认事件
e.preventDefault()
e.stopPropagation()
var files = this.files || e.dataTransfer.files
var file = files[0]
//上传
var xhr = new XMLHttpRequest();
xhr.open("post", "/app/upload", true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
// 获取上传进度
xhr.upload.onprogress = function (event) {
if (event.lengthComputable) {
var percent = Math.floor(event.loaded / event.total * 100);
var uploadText = "拖拽到这里上传"
var uploadElement = document.getElementById("upload-progress")
if (percent < 100) {
uploadElement.innerText="正在上传:" + percent + "%"
} else {
uploadElement.innerText=uploadText
}
}
};
// 上传完成
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
window.location.href=window.location.href
window.location.reload
}
}
var fd = new FormData();
fd.append('file', file);
xhr.send(fd);
})
$(".btn-remove").click(function () {
var url = "/app/delete/" + $(this).attr("data");
$.ajax({url:url,success:function(result){
window.location.href=window.location.href
window.location.reload
}
});
});
$(".appname").click(function () {
window.open($(this).attr("data"))
});
</script>
</body>
</html>
+102
View File
@@ -0,0 +1,102 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport"
content="minimal-ui,width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="white">
<meta name="format-detection" content="telephone=no">
<link rel="icon" type="image/x-icon" th:href="@{/images/favicon.ico}" />
<link rel="stylesheet" th:href="@{/css/download.css}">
<script type="text/javascript" th:src="@{/js/qrcode.js}"></script>
<script type="text/javascript" th:src="@{/js/jquery-1.11.0.min.js}"></script>
<title>[[${app.name}]]</title>
</head>
<body class="app">
<div class="masklayer" id="MaskLayer" style="display:none"></div>
<span class="pattern left">
<img th:src="@{/images/download_pattern_left.png}" />
</span>
<span class="pattern right">
<img th:src="@{/images/download_pattern_right.png}" />
</span>
<div class="wechat_tip_content"></div>
<div class="out-container">
<div class="main">
<header itemscope="" itemtype="http://schema.org/SoftwareApplication">
<div class="table-container">
<div class="cell-container">
<div class="app-brief">
<div class="icon-container wrapper">
<i class="icon-icon_path bg-path"></i>
<span class="icon">
<img th:src="@{'/' + ${app.icon}}" itemprop="image">
</span>
<span class="qrcode" id="qrcode" th:data="${app.currentPackage.previewURL}">
</span>
</div>
<p class="release-type wrapper">内测版</p>
<h1 class="name wrapper">
<span class="icon-warp">
<i th:class="'icon-'+ ${app.platform}"></i>
[[${app.name}]]
</span>
</h1>
<p class="scan-tips">扫描二维码下载<br>或用手机浏览器输入这个网址:&nbsp;&nbsp;<span
class="text-black">[[${app.installPath}]]</span></p>
<div class="release-info">
<p>内测版 -
<span itemprop="softwareVersion">[[${app.version}]] (Build [[${app.buildVersion}]]) -
[[${app.currentPackage.displaySize}]]</span></p>
<p>更新于: <span itemprop="datePublished">[[${app.currentPackage.displayTime}]]</span></p>
</div>
<div class="action-animate">
<input id="installURL" th:value="${app.currentPackage.installURL}" style="display: none" />
<div class="action-animate-text" id="install">下载安装</div>
<div class="action-animate-active"></div>
</div>
<div class="action-animate">
<input id="crtURL" th:value="${ca_path}" style="display: none"/>
<div class="action-animate-text" id="installCRT">安装证书</div>
<div class="action-animate-active"></div>
</div>
</div>
</div>
</div>
</header>
<!-- Release list -->
</div>
</div>
<script type="application/javascript">
$("#install").click(function () {
window.location.href = ($("#installURL").val())
})
$("#installCRT").click(function () {
window.open($("#crtURL").val())
})
var codeData = $("#qrcode").attr("data");
new QRCode("qrcode", {
text: codeData,
width: 200,
height: 200,
colorDark: '#000000',
colorLight: '#ffffff',
correctLevel: QRCode.CorrectLevel.L
});
</script>
</body>
</html>
+161
View File
@@ -0,0 +1,161 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Stict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="renderer" content="webkit">
<title class="ng-binding">[[${package.name}]] - 应用动态</title>
<link rel="icon" type="image/x-icon" th:href="@{/images/favicon.ico}" />
<link rel="stylesheet" th:href="@{/css/icons.css}">
<link rel="stylesheet" th:href="@{/css/bootstrap.css}">
<link rel="stylesheet" th:href="@{/css/manage.css}">
<link rel="stylesheet" th:href="@{/css/index.css}">
<script type="text/javascript" th:src="@{/js/jquery-1.11.0.min.js}"></script>
</head>
<body class="ng-scope">
<nav class="navbar navbar-transparent fade-out navbar-black">
<div class="navbar-header">
<a class="navbar-brand" href="/apps"><i class="icon-logo"></i> </a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse ng-scope">
<div class="dropdown">
<div></div>
</div>
</div>
</nav>
<div class="menu-toggle fade-out"><i class="icon-menu"></i></div>
<div class="navbar-wrapper ng-scope">
<div ng-controller="NavbarController" class="ng-scope">
<div class="navbar-header-wrap">
<div class="middle-wrapper">
<nav>
<h1 class="navbar-title logo">
<i class="icon-logo"></i>
</h1>
<i class="icon-angle-right"></i>
<div class="navbar-title primary-title">
<a class="ng-binding" href="/apps">我的应用</a>
</div>
<i class="icon-angle-right"></i>
<div class="navbar-title secondary-title ng-binding"
style="">[[${package.name}]]</div>
</nav>
</div>
</div>
</div>
</div><!-- ngInclude: '/templates_manage/upload_modal.html' -->
<section data-ui-view="" class="ng-scope" style="">
<div class="page-app app-activities">
<div class="banner has-devices">
<div class="middle-wrapper clearfix">
<div class="pull-left icon-container appicon">
<img th:src="'/' + ${package.icon}" width="100" height="100" class="change_icon ng-isolate-scope"/>
</div>
<div class="badges">
<span tooltip-top="" tooltip="复制到剪贴板" id="js-app-short-copy-trigger"
class="short tooltip-top ng-binding ng-isolate-scope" th:value="${package.installPath}"
copy-trigger="">[[${package.installPath}]]</span>
<span class="apptype ng-binding" th:if="${#strings.containsIgnoreCase(package.platform,'ios')}">iOS</span>
<span class="apptype ng-binding" th:if="${#strings.containsIgnoreCase(package.platform,'android')}">Android</span>
<span class="bundleid ng-binding">BundleID<b class="ng-binding">&nbsp;&nbsp;[[${package.bundleID}]]</b></span>
<span class="version ng-scope" th:if="${#strings.containsIgnoreCase(package.platform,'ios')}" >iOS&nbsp;[[${package.minVersion}]]&nbsp;或者高版本</span>
</div>
<div class="actions">
<a class="download ng-binding"th:href="${package.installPath}" target="_blank">
<i class="icon-eye"></i>
预览
</a>
</div>
<div class="tabs-container">
<ul class="list-inline">
<li>
<a class="ng-binding"><i class="icon-file"></i> 基本信息</a></li>
<li>
<a class="ng-binding"><i class="icon-device"></i> 设备列表</a></li>
</ul>
</div>
</div>
</div><!-- uiView: -->
<div data-ui-view="" class="ng-scope">
<div class="page-app-activities page-tabcontent ng-scope">
<!-- ngIf: !activitiesReady -->
<div class="middle-wrapper" ng-show="activitiesReady">
<ul class="list-unstyled time-line">
<li>
<span class="dot"></span>
<span class="filter ng-binding">版本更新</span>
<span class="filter version-rollback ng-scope"></span>
</li>
<li>
<div class="market-app-info">
</div>
</li>
<li th:each="app,appStat : ${apps}">
<div>
<div class="directive-view-release">
<i class="icon-upload-cloud2"></i>
<b class="ng-binding">[[${app.version}]] (Build [[${app.buildVersion}]])</b>
<div class="release-metainfo ng-hide">
<small>
<i class="icon-calendar"></i>
<span class="ng-binding">[[${app.displayTime}]]</span>
</small>
</div>
<div class="release-metainfo">
<small>
<i class="icon-calendar"></i>
<span class="ng-binding">[[${app.displayTime}]]</span></small> &nbsp;&nbsp;·&nbsp;&nbsp;
<small class="ng-scope">内测版</small>
<i class="ng-hide">&nbsp;&nbsp;·&nbsp;&nbsp;</i>
<small class="ng-binding ng-hide"></small>
</div>
<div class="release-actions">
<button class="tooltip-top download-action" tooltip="下载原文件" th:value="${app.downloadURL}">
<i class="icon-cloud-download"></i>
<span class="ng-binding">[[${app.displaySize}]]</span>
</button>
<button class="preview" th:value="${app.previewURL}">
<i class="icon-eye"></i>
<span class="ng-binding">预览</span>
</button>
<button class="ng-scope app-delete" th:data="${app.id}" th:if="${appStat.index > 0}">
<i class="icon-trash"></i>
<span class="ng-binding">删除</span>
</button>
</div>
</div>
</div>
</li>
<li class="more ng-hide" ng-show="currentApp.releases.current_page &lt; currentApp.releases.total_pages">
<button ng-click="moreRelease()" class="ng-binding">显示更多版本</button></li>
</ul>
</div>
</div>
</div>
</div>
</section>
<script type="application/javascript">
$(".download-action").click(function(){
window.open($(this).val())
})
$(".preview").click(function () {
window.open($(this).val())
})
$(".app-delete").click(function () {
var url = "/p/delete/" + $(this).attr("data");
$.ajax({url:url,success:function(result){
window.location.href=window.location.href
window.location.reload
}
});
})
</script>
</body>
</html>