优化前端代码

v1.0.0
youngS 4 years ago
parent 54e9de66b6
commit 3623b36247
  1. 6
      fir_client/src/App.vue
  2. 11
      fir_client/src/components/FirBase.vue
  3. 433
      fir_client/src/components/FirDownload.vue
  4. 18
      fir_client/src/components/FirFooter.vue
  5. 28
      fir_client/src/components/FirHeader.vue
  6. 20
      fir_client/src/components/FirLogin.vue
  7. 22
      fir_client/src/components/FirRegist.vue
  8. 18
      fir_client/src/components/ShortDownload.vue
  9. 19
      fir_client/src/components/apps/FirAppInfosBase.vue
  10. 68
      fir_client/src/components/apps/FirAppInfosbaseinfo.vue
  11. 50
      fir_client/src/components/apps/FirAppInfoscombo.vue
  12. 31
      fir_client/src/components/apps/FirAppInfosdevices.vue
  13. 29
      fir_client/src/components/apps/FirAppInfossecurity.vue
  14. 33
      fir_client/src/components/apps/FirAppInfossupersign.vue
  15. 164
      fir_client/src/components/apps/FirAppInfostimeline.vue
  16. 863
      fir_client/src/components/apps/FirApps.vue
  17. 42
      fir_client/src/components/user/FirSuperSignBase.vue
  18. 5
      fir_client/src/components/user/FirUserOrders.vue
  19. 7
      fir_client/src/components/user/FirUserProfileBase.vue
  20. 5
      fir_client/src/components/user/FirUserProfileCertification.vue
  21. 12
      fir_client/src/components/user/FirUserProfileChangePwd.vue
  22. 37
      fir_client/src/components/user/FirUserProfileInfo.vue
  23. 81
      fir_client/src/components/user/FirUserStorage.vue
  24. 6
      fir_client/src/main.js

@ -16,7 +16,11 @@
<style>
body {
background-color: rgba(0, 166, 224, 0.18)
background-color: #F6F6F6;
}
html, body {
height: 100%;
}
@font-face {

@ -1,17 +1,16 @@
<template>
<div ref="appbase">
<canvas ref="canvas" class="canvas" @mousemove="canvas_move" @mouseleave="canvas_leave"></canvas>
<canvas ref="canvas" class="canvas" @mousemove="canvas_move" @mouseleave="canvas_leave"/>
<el-container>
<el-header>
<FirHeader></FirHeader>
<FirHeader/>
</el-header>
<div class="pbody">
<router-view></router-view>
<router-view/>
</div>
<el-footer>
<el-divider/>
<FirFooter></FirFooter>
<FirFooter/>
</el-footer>
</el-container>
</div>
@ -52,7 +51,7 @@
<style scoped>
.pbody {
padding-top: 20px;
padding-top: 30px;
}
</style>

@ -5,16 +5,16 @@
<div class="wechat_tip_content" v-if="agent === 'wxandroid' || agent === 'wxapple'">
<div class="wechat_tip" v-show="agent === 'wxandroid'">
<i class="triangle-up"></i>请点击右上角<br>选择"在浏览器打开"
<i class="triangle-up"/>请点击右上角<br>选择"在浏览器打开"
</div>
<div class="wechat_tip" v-show="agent === 'wxapple'">
<i class="triangle-up"></i>请点击右上角<br>选择"在Safari中打开"
<i class="triangle-up"/>请点击右上角<br>选择"在Safari中打开"
</div>
</div>
<div v-else>
<!-- <span class="pattern left"><img src="@/assets/down_left.png"></span>-->
<!-- <span class="pattern right"><img src="@/assets/down_right.png"></span>-->
<!-- <span class="pattern left"><img src="@/assets/down_left.png"></span>-->
<!-- <span class="pattern right"><img src="@/assets/down_right.png"></span>-->
</div>
<el-container class="out-container " v-if="wxeasytypeflag">
@ -25,9 +25,9 @@
<div class="cell-container">
<div class="app-brief">
<div class="icon-container wrapper">
<i class="i bg-path"></i>
<i class="i bg-path"/>
<span class="icon"><img
:src="mcurrentappinfo.icon_url"></span>
:src="mcurrentappinfo.icon_url" alt=""></span>
<span id="qrcode" class="qrcode">
</span>
</div>
@ -99,9 +99,9 @@
<el-input prefix-icon="el-icon-lock" clearable
placeholder="请输入密码" v-model="password"
icon="el-icon-loadings" type="primary"
:underline="false"></el-input>
:underline="false"/>
</div>
<el-divider v-if="currentappinfo.need_password"></el-divider>
<el-divider v-if="currentappinfo.need_password"/>
<button @click="download">
<el-link icon="el-icon-loadings" type="primary"
:underline="false">
@ -184,7 +184,7 @@
<div class="screenshots-section" v-if="imagelist && imagelist.length > 0" style="margin-top: 30%">
<el-divider></el-divider>
<el-divider/>
<div v-if="miscomboappinfo.release_id">
<h3 v-if="currentappinfo.type === 0">
Android 应用截图
@ -198,7 +198,7 @@
<div class="list-wrapper">
<ul>
<li v-for="screen in imagelist" :key="screen">
<img v-lazy="screen"/>
<img v-lazy="screen" alt=""/>
</li>
</ul>
</div>
@ -230,7 +230,7 @@
<div class="list-wrapper" style="width: 300px;">
<ul>
<li v-for="sign in signhelplist" :key="sign.url">
<img v-lazy="sign.url" :key="sign.url"/>
<img v-lazy="sign.url" :key="sign.url" alt=""/>
<p>
安装引导<br>{{ sign.msg}}
</p>
@ -579,7 +579,7 @@
trident: u.indexOf('Trident') > -1, //IE
presto: u.indexOf('Presto') > -1, //opera
webKit: u.indexOf('AppleWebKit') > -1, //
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1, //
mobile: !!u.match(/AppleWebKit.*Mobile/i) || !!u.match(/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/), //
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //androiduc
@ -729,7 +729,7 @@
box-sizing: border-box
}
.desc-section pre, .releases-section .release-view .version-info .changelog .wrapper, body, html {
.desc-section pre, body, html {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif
}
@ -744,13 +744,6 @@
-webkit-font-smoothing: antialiased
}
.no-scroll {
overflow: hidden
}
.text-center {
text-align: center
}
.text-black {
color: #505556
@ -840,26 +833,6 @@
text-align: center
}
.show-wechat-notice .out-container, .show-wechat-notice .pattern {
top: 180px
}
.show-wechat-notice .notice-wechat {
height: 180px
}
.notice-wechat {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 0;
background-color: #505556;
box-shadow: 0 -9px 29px -7px rgba(0, 0, 0, .1) inset;
-webkit-transition: all .5s;
transition: all .5s
}
.constraint .main header, .expired .main header, .forbidden .main header, .legal_forbidden .main header, .not_found .main header {
opacity: 1;
@ -889,11 +862,6 @@
line-height: 24px
}
.constraint .main .fade-out, .expired .main .fade-out, .forbidden .main .fade-out, .legal_forbidden .main .fade-out, .not_found .main .fade-out {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px)
}
.constraint .pattern img, .expired .pattern img, .forbidden .pattern img, .legal_forbidden .pattern img, .not_found .pattern img {
-webkit-filter: grayscale(1)
@ -906,63 +874,6 @@
}
@media screen and (max-width: 425px) {
.error-container pre, .error-container small {
display: none
}
.error-container {
width: 100%;
margin-top: 100px;
margin-bottom: 50px;
text-align: center
}
.error-container h1 {
padding: 0 70px
}
}
.back-btn {
position: fixed;
top: 28px;
left: 28px;
z-index: 3;
width: 60px;
height: 60px;
border: 1px solid #bdc6c7;
border-radius: 60px;
background-color: #fff
}
.back-btn i {
display: block;
margin-top: 29px;
margin-left: 21px
}
.back-btn i:after, .back-btn i:before {
position: absolute;
display: inline-block;
width: 16px;
height: 1px;
background-color: #505556;
content: ' ';
-webkit-transform-origin: left;
transform-origin: left
}
.back-btn i:before {
-webkit-transform: rotateZ(-42deg);
transform: rotateZ(-42deg)
}
.back-btn i:after {
-webkit-transform: rotateZ(42deg);
transform: rotateZ(42deg)
}
.combo .main {
min-width: 960px;
max-width: 100%
@ -995,31 +906,12 @@
text-transform: uppercase
}
.data_error .reload, .error .reload, .forbidden .reload, .passwd .reload {
color: #a9b1b3;
font-size: 12px;
text-decoration: none;
border: 1px solid #a9b1b3;
background-color: transparent;
padding: 6px 12px;
border-radius: 40px
}
.data_error .no-release-tips, .error .no-release-tips, .forbidden .no-release-tips, .passwd .no-release-tips {
line-height: 20px;
max-width: 80%;
margin: 0 auto
}
.data_error .no-release-tips a, .error .no-release-tips a, .forbidden .no-release-tips a, .passwd .no-release-tips a {
text-decoration: underline;
color: #9b9b9b
}
#passwd-wrong {
display: none
}
.main .icon-container {
position: relative;
@ -1124,11 +1016,6 @@
line-height: 1.6
}
.main > header .release-type {
margin: 24px auto 0;
width: 290px;
text-align: left
}
.main > header .scan-tips {
margin: 0 auto;
@ -1223,20 +1110,12 @@
}
}
.master-section {
overflow: hidden;
padding: 40px 0
}
@media screen and (max-width: 768px) {
.main > header {
min-height: 400px
}
.main > header .release-type {
display: none
}
.main > header .release-info {
display: block
}
@ -1264,36 +1143,10 @@
.main > header .scan-tips {
display: none
}
.master-section {
text-align: center
}
.master-section .store-link {
display: inline-block;
float: none;
margin-bottom: 0
}
.master-section p {
display: none
}
}
.master-section p {
margin: 0;
line-height: 21px
}
.master-section pre {
text-align: left;
white-space: pre-line;
word-wrap: break-word;
word-break: break-all;
line-height: 22px
}
.footer, .per-type-info .info, .releases-section .release-view .qrcode, .section-store-link, .store-section {
.footer, .per-type-info .info {
text-align: center
}
@ -1317,17 +1170,6 @@
font-weight: 400
}
.store-section .store-link {
display: block;
margin: 0 auto;
padding: 14px 40px 10px;
width: 260px;
border: 1px solid #505556;
border-radius: 5px;
background-color: transparent;
color: #505556;
font-size: 28px
}
.per-type-info {
position: relative;
@ -1341,23 +1183,6 @@
width: 50%
}
.per-type-info .type:first-child .releases-section {
padding: 70px 70px 0 0
}
.per-type-info .type .master-section {
padding: 70px 0 0;
border-top: 0
}
.per-type-info .type .master-section pre {
white-space: pre-line
}
.per-type-info .type:last-child .master-section, .per-type-info .type:last-child .releases-section {
padding: 70px 0 0 70px
}
.per-type-info .type-icon {
margin-bottom: 0
}
@ -1444,107 +1269,6 @@
max-height: 462px
}
.type:first-child .master-section {
padding-right: 5px
}
.type:last-child .master-section {
padding-left: 5px
}
.hide {
display: none
}
.wechat-tips img, .wechat-tips span {
display: inline-block;
margin-right: 10px;
vertical-align: middle
}
.wechat-tips {
position: fixed;
top: 10px;
z-index: 103;
padding-top: 14px;
width: 100%;
text-align: right
}
.wechat-tips span {
color: #fff;
text-align: left;
font-weight: 700;
font-size: 16px;
line-height: 30px
}
.wechat-tips span.en {
width: 240px
}
.wechat-tips img {
margin-bottom: 13px;
width: 50px
}
@media (min-width: 420px) {
.wechat-tips span {
margin-right: 15px
}
.wechat-tips span.en {
margin-bottom: -20px;
width: auto
}
.wechat-tips img {
margin-right: 20px
}
}
.list-unstyled {
margin: 0;
padding: 0;
list-style-type: none
}
.list-unstyled li:first-child {
padding-bottom: 10px
}
.tip {
margin-left: 15px;
vertical-align: middle;
font-size: 14px;
cursor: pointer
}
.tip.en {
margin-left: 5px
}
.tip img {
margin-right: 5px;
height: 16px;
position: relative;
top: 4px
}
.tip.RISK {
color: #d95656
}
.tip.SCANED {
color: #8fbf46
}
.tip.SCANED img {
height: 14px;
top: 2px
}
@-webkit-keyframes rotate {
0% {
@ -1637,139 +1361,12 @@
vertical-align: bottom
}
.main header .app-brief .name > .tip {
vertical-align: bottom;
position: relative;
top: -3px
}
.main.forbidden .footer .one-key-report, .main.not_found .footer .one-key-report {
display: none
}
.app_bottom_fixed img {
width: 100%;
max-height: 80px
}
@media only screen and (max-width: 991px) and (min-width: 768px) {
.after-install-games-fixed .popularize-games .popularize-list > li:nth-child(n+5) {
display: none
}
.after-install-games-fixed .popularize-games .popularize-list .popularize-app-game {
margin-bottom: 30px !important
}
}
@media only screen and (max-width: 1024px) and (min-width: 991px) {
.after-install-games-fixed .popularize-games .popularize-list > li:nth-child(n+6) {
display: none
}
.after-install-games-fixed .popularize-games .popularize-list .popularize-app-game {
margin-bottom: 30px !important
}
}
.after-install-games-fixed .popularize-games .popularize-list {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-ms-flex-pack: distribute;
justify-content: space-around
}
.after-install-games-fixed .popularize-games .popularize-list .popularize-app-game {
max-width: 180px;
width: 45%;
box-shadow: 0 6px 20px 0 rgba(0, 0, 0, .1);
margin-bottom: 10px;
border-radius: 20px;
background: #35a89b
}
.after-install-games-fixed .popularize-games .popularize-list .popularize-app-game .app-download {
font-size: 16px;
height: 30px;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
color: #fff
}
.after-install-games-fixed .popularize-games .popularize-list .popularize-app-game .popularize-app-game-content {
height: 145px;
background: #fff;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border-radius: 20px
}
.after-install-games-fixed .popularize-games .popularize-list .popularize-app-game .popularize-app-game-content .app-zhibo-icon-img {
margin-top: 10px
}
.after-install-games-fixed .popularize-games .popularize-list .popularize-app-game .popularize-app-game-content .app-zhibo-icon-img > img {
border-radius: 5px;
height: 50px;
width: 50px
}
.after-install-games-fixed .popularize-games .popularize-list .popularize-app-game .primary-text {
max-width: 80%;
color: #4a4a4a;
text-align: center;
font-size: 16px;
font-weight: 700
}
.after-install-games-fixed .popularize-games .popularize-list .popularize-app-game .secondary-text {
max-width: 80%;
height: 32px;
overflow: hidden;
text-align: center;
font-size: 12px;
color: rgba(93, 103, 109, .9);
padding-bottom: 5px
}
@media screen and (max-height: 500px) {
.bottom-popularize {
position: static
}
}
.visiable-moblie {
display: none
}
@media screen and (max-width: 720px) {
.main .ad-section {
width: 100%
}
}
@media screen and (max-width: 768px) {
.combo .main, .main {
width: 100%;
@ -1848,7 +1445,7 @@
background-color: #000;
width: 100%;
height: 100%;
top: 0px;
top: 0;
position: fixed;
opacity: 0.3;
-webkit-opacity: 0.3;

@ -1,20 +1,17 @@
<template>
<div>
<el-container class="navbar-wrapper">
<el-main align="center">
<el-container>
<el-main>
<div style="width: 300px; margin: 0 auto; padding: 5px 0;">
<el-link :underline="false"> {{ footer.copyright }}</el-link>
</div>
<div style="width: 300px; margin: 0 auto; padding: 5px 0;">
<a style="display: inline-block; text-decoration: none; height: 20px; line-height: 20px;"
:href="footer.gongAnBeiAn.url"
target="_blank" rel="noopener">
<img style="float: left;" src="@/assets/beianlogo.png"/>
<img style="float: left;" src="@/assets/beianlogo.png" alt=""/>
<el-link :underline="false"
style="float: left; height: 20px; line-height: 20px; margin: 0px 0px 0px 5px; color: #939393;">
style="float: left; height: 20px; line-height: 20px; margin: 0 0 0 5px; color: #939393;">
{{ footer.gongAnBeiAn.text }}
</el-link>
</a>
@ -61,17 +58,12 @@
</script>
<style scoped>
.el-container {
margin: 10px auto 100px;
width: 1166px;
}
.navbar-wrapper {
text-align: center;
font-size: 0;
border-radius: 10px;
}
</style>

@ -1,7 +1,6 @@
<template>
<div>
<div style="background-color: rgba(162,193,230,0.18);">
<el-container class="navbar-wrapper">
<el-dialog
title="API Token"
:visible.sync="dialogVisible"
@ -16,12 +15,9 @@
<el-button type="primary" @click="maketoken">重新生成</el-button>
</span>
</el-dialog>
<el-row :gutter="20">
<el-col :span="14" style="padding-top: 16px;margin-left: 60px">
<el-breadcrumb separator-class="el-icon-arrow-right" style="height: 80px;font-size: 20px">
<el-col :span="14" style="padding-top: 36px;margin-left: 60px">
<el-breadcrumb separator-class="el-icon-arrow-right" style="height: 60px;font-size: 20px">
<el-breadcrumb-item :to="{ name:'FirIndex' }">首页</el-breadcrumb-item>
<el-breadcrumb-item :to="{ name:'FirApps'}">我的应用</el-breadcrumb-item>
@ -35,14 +31,13 @@
</el-breadcrumb-item>
</el-breadcrumb>
</el-col>
<el-col :span="2" :push="3">
<el-col :span="2" :push="3" style="padding-top: 16px;">
<div class="block">
<el-avatar :size="66" :src="$store.state.userinfo.head_img"></el-avatar>
</div>
</el-col>
<el-col :span="4" :push="3">
<el-col :span="4" :push="3" style="padding-top: 16px;">
<el-dropdown style="padding-top: 12px;" @command="handleCommand">
<el-button type="success" plain round>
{{$store.state.userinfo.first_name }}<i class="el-icon-arrow-down el-icon--right"></i>
@ -66,7 +61,6 @@
</el-container>
</div>
</template>
@ -159,16 +153,10 @@
.el-container, .el-row {
margin: 10px auto;
width: 1166px;
}
.el-container {
margin: 10px auto 100px;
width: 1166px;
width: 1266px;
}
.navbar-wrapper {
background-color: #dbffeb;
font-size: 0;
border-radius: 10px;
}
@ -185,9 +173,5 @@
font-size: 12px;
}
.elbi {
color: #67c23a;
}
</style>

@ -1,8 +1,8 @@
<template>
<el-container>
<div style="margin: 10px 0 10px 0 ;position:absolute;right:20px;top:auto;">
<el-button round icon="el-icon-arrow-left" @click="$router.go(-1)"></el-button>
<el-button round icon="el-icon-s-home" @click="$router.push({name:'FirIndex'})"></el-button>
<el-button round icon="el-icon-arrow-left" @click="$router.go(-1)"/>
<el-button round icon="el-icon-s-home" @click="$router.push({name:'FirIndex'})"/>
</div>
<el-header>
@ -20,13 +20,13 @@
<el-tab-pane label="用户名登录" name="username" v-if="allow_ways.up">
<el-form-item>
<el-input v-model="form.email" prefix-icon="el-icon-user" placeholder="用户名" autofocus
clearable></el-input>
clearable/>
</el-form-item>
</el-tab-pane>
<el-tab-pane :label="rutitle+'登录'" name="smsemail" v-if="allow_ways.sms || allow_ways.email">
<el-form-item>
<el-input v-model="form.email" prefix-icon="el-icon-user" :placeholder="rutitle" autofocus
clearable></el-input>
clearable/>
</el-form-item>
</el-tab-pane>
@ -35,21 +35,21 @@
<el-form-item v-if="is_cptch">
<el-input v-model="form.password" prefix-icon="el-icon-lock" placeholder="密码"
@keyup.enter.native="onSubmit"
show-password></el-input>
show-password/>
</el-form-item>
<el-form-item v-else>
<el-input v-model="form.password" prefix-icon="el-icon-lock" placeholder="密码"
show-password></el-input>
show-password/>
</el-form-item>
<el-form-item style="height: 40px" v-if="cptch.cptch_image">
<el-row style="height: 40px">
<el-col :span="16">
<el-input placeholder="请输入验证码" v-model="form.authcode" maxlength="6"
@keyup.enter.native="onSubmit"></el-input>
@keyup.enter.native="onSubmit"/>
</el-col>
<el-col :span="8">
<el-image
style="margin:0px 4px;border-radius:4px;cursor:pointer;height: 40px"
style="margin:0 4px;border-radius:4px;cursor:pointer;height: 40px"
:src="cptch.cptch_image"
fit="contain" @click="get_auth_code">
</el-image>
@ -260,11 +260,11 @@
.el-container {
margin: 10px auto;
width: 1166px;
width: 1266px;
}
.el-header {
margin-top: 16%;
margin-top: 13%;
}
.el-form {

@ -1,8 +1,8 @@
<template>
<el-container>
<div style="margin: 10px 0 10px 0 ;position:absolute;right:20px;top:auto;">
<el-button round icon="el-icon-arrow-left" @click="$router.go(-1)"></el-button>
<el-button round icon="el-icon-s-home" @click="$router.push({name:'FirIndex'})"></el-button>
<el-button round icon="el-icon-arrow-left" @click="$router.go(-1)"/>
<el-button round icon="el-icon-s-home" @click="$router.push({name:'FirIndex'})"/>
</div>
<el-header>
@ -18,22 +18,22 @@
<el-form-item v-if="allow_ways.code">
<el-input v-model="form.icode" prefix-icon="el-icon-postcard" placeholder="邀请码必填" clearable
></el-input>
/>
</el-form-item>
<el-form-item>
<el-input v-model="form.email" prefix-icon="el-icon-user" :placeholder="rutitle" autofocus
clearable></el-input>
clearable/>
</el-form-item>
<el-form-item style="height: 40px" v-if="cptch.cptch_image">
<el-row style="height: 40px">
<el-col :span="16">
<el-input placeholder="请输入图片验证码" v-model="form.authcode" maxlength="6"></el-input>
<el-input placeholder="请输入图片验证码" v-model="form.authcode" maxlength="6"/>
</el-col>
<el-col :span="8">
<el-image
style="margin:0px 4px;border-radius:4px;cursor:pointer;height: 40px"
style="margin:0 4px;border-radius:4px;cursor:pointer;height: 40px"
:src="cptch.cptch_image"
fit="contain" @click="get_auth_code">
</el-image>
@ -50,7 +50,7 @@
</el-col>
<el-col :span="8">
<el-button type="info" @click="getphonecode" plain
style="margin:0px 4px;border-radius:4px;cursor:pointer;height: 40px">获取验证码
style="margin:0 4px;border-radius:4px;cursor:pointer;height: 40px">获取验证码
</el-button>
</el-col>
</el-row>
@ -59,11 +59,11 @@
<el-form-item>
<el-input v-model="form.password" prefix-icon="el-icon-lock" placeholder="密码"
show-password></el-input>
show-password/>
</el-form-item>
<el-form-item>
<el-input v-model="form.password2" prefix-icon="el-icon-lock" placeholder="确认密码"
show-password @keyup.enter.native="onRegist"></el-input>
show-password @keyup.enter.native="onRegist"/>
</el-form-item>
<el-form-item>
@ -337,12 +337,12 @@
.el-container {
margin: 10px auto;
width: 1166px;
width: 1266px;
}
.el-header {
margin-top: 16%;
margin-top: 13%;
}
.el-form {

@ -11,7 +11,7 @@
<div class="list-wrapper" style="width: 300px;">
<ul>
<li v-for="sign in signhelplist" :key="sign.url">
<img v-lazy="sign.url" :key="sign.url"/>
<img v-lazy="sign.url" :key="sign.url" alt=""/>
<p>
安装引导<br>{{ sign.msg}}
</p>
@ -26,10 +26,10 @@
<div class="wechat_tip_content" v-if="agent === 'wxandroid' || agent === 'wxapple'">
<div class="wechat_tip" v-show="agent === 'wxandroid'">
<i class="triangle-up"></i>请点击右上角<br>选择"在浏览器打开"
<i class="triangle-up"/>请点击右上角<br>选择"在浏览器打开"
</div>
<div class="wechat_tip" v-show="agent === 'wxapple'">
<i class="triangle-up"></i>请点击右上角<br>选择"在Safari中打开"
<i class="triangle-up"/>请点击右上角<br>选择"在Safari中打开"
</div>
</div>
@ -46,7 +46,7 @@
<div class="cell-container">
<div class="app-brief">
<div class="icon-container wrapper">
<i class="i bg-path"></i>
<i class="i bg-path"/>
<span class="icon"><img
:src="mcurrentappinfo.icon_url"></span>
<span id="qrcode" class="qrcode">
@ -56,7 +56,7 @@
<p v-else class="scan-tips wrapper icon-warp">{{ mcurrentappinfo.release_type|getiOStype
}}</p>
<h1 class="name wrapper">
<span class="icon-warp" style="margin-left:0px">
<span class="icon-warp" style="margin-left:0">
<i v-if="currentappinfo.type === 0 && agent !== ''"
class="iconfont icon-android2"/>
<i v-if="currentappinfo.type === 1 && agent !== ''"
@ -86,7 +86,7 @@
<div id="actions" class="actions" v-if="agent !==''"
style="margin-top: 20%;margin-bottom: 20%">
<button type="info" round v-if="agent === 'wxandroid' || agent === 'wxapple'">
<button v-if="agent === 'wxandroid' || agent === 'wxapple'">
不支持在微信内下载
</button>
@ -103,7 +103,7 @@
<div><p>正在安装请按 Home 键在桌面查看</p>
<p v-if="!this.currentappinfo.issupersign && this.mcurrentappinfo.release_type!==1">
<button @click="gomobileaction">
<a icon="el-icon-loadings" type="primary"
<a type="primary"
:underline="false">
安装完成后,需立即信任
</a>
@ -121,7 +121,7 @@
</div>
<br/>
<button @click="download">
<a icon="el-icon-loadings" type="primary" :underline="false"> 下载安装 </a>
<a :underline="false"> 下载安装 </a>
</button>
<a v-if="(currentappinfo.issupersign || mcurrentappinfo.release_type === 2) && !$route.query.udid"
@click="jiaocheng('open')"
@ -211,7 +211,7 @@
<div class="list-wrapper">
<ul>
<li v-for="screen in imagelist" :key="screen">
<img v-lazy="screen"/>
<img v-lazy="screen" alt=""/>
</li>
</ul>
</div>

@ -87,7 +87,7 @@
</el-slider>
</div>
<el-container style="padding-top: 20px;max-width: 96%">
<router-view></router-view>
<router-view/>
</el-container>
</div>
</div>
@ -248,10 +248,8 @@
<style scoped>
.el-main {
margin: 10px auto 100px;
width: 1166px;
position: relative;
padding-bottom: 1px;
background-color: #bfe7f9;
color: #9b9b9b;
-webkit-font-smoothing: antialiased;
border-radius: 1%;
@ -264,14 +262,16 @@
}
.page-app {
padding-bottom: 0
padding-bottom: 0;
width: 1266px;
margin: 10px auto 100px;
}
.page-app .banner {
padding-top: 60px;
padding-bottom: 40px;
border-bottom: 1px solid rgba(208, 208, 208, .5);
background-color: #d5f9f9;
background-color: #ffffff;
border-radius: 10px;
}
@ -281,7 +281,7 @@
top: 0;
}
.page-app .banner .actions .download, .page-app .banner .actions .upload {
.page-app .banner .actions .download {
display: block;
min-width: 150px;
padding: 10px 20px;
@ -291,13 +291,6 @@
}
.page-app .banner .actions .upload {
background-color: #3ab2a7;
border: 1px solid transparent;
color: #fff;
cursor: pointer
}
.page-app .banner .actions .download {
text-align: center;
text-decoration: none;

@ -1,14 +1,10 @@
<template>
<div style="margin-top: 20px;width: 100%;margin-left: 8%">
<el-form ref="form" label-width="80px">
<el-form-item label="应用ID" style="width: 55%">
<el-form-item label="应用ID" style="width: 56%">
<el-row>
<el-col :span="19">
<el-input v-model="currentapp.app_id" :disabled="true"></el-input>
</el-col>
<el-col :span="4">
<el-button type="danger" plain @click="delApp"
@ -40,30 +36,38 @@
class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item label="应用描述" style="width: 66%">
<el-input type="textarea" v-model="currentapp.description"
:autosize="{ minRows: 6, maxRows: 18}"></el-input>
:autosize="{ minRows: 8, maxRows: 18}"></el-input>
</el-form-item>
<el-form-item>
<el-row>
<el-col :span="15">
<el-button type="primary" plain @click="saveappinfo('save')" size="medium"
style="width: 160px;height: 50px;font-size: large;float: right">保存信息
</el-button>
</el-col>
</el-row>
</el-form-item>
<el-divider></el-divider>
<el-form-item label="应用截图" style="width: 100%">
<div class="appdownload">
<el-image
style="width: 155px;height: 288px;margin-right: 20px;background-color: #d1eef9;float: left"
fit="scale-down"
@click="delscreen(screen.id)"
v-for="(screen) in currentapp.screenshots" :key="screen.id" :src="screen.url" alt="">
<div slot="error" class="image-slot" @click="delscreen(screen.id)"
style="text-align: center;margin-top: 80%">
<i class="el-icon-picture-outline"> 加载失败</i>
</div>
</el-image>
<div style="width: 155px;height: 288px;background-color: #d1eef9;float: left"
<el-tooltip content="点击删除该应用截图" v-for="(screen) in currentapp.screenshots" :key="screen.id"
placement="top" effect="light">
<el-image
class="screen-img"
fit="scale-down"
@click="delscreen(screen.id)"
:src="screen.url" alt="">
<div slot="error" class="image-slot" @click="delscreen(screen.id)"
style="text-align: center;margin-top: 80%">
<i class="el-icon-picture-outline"> 加载失败</i>
</div>
</el-image>
</el-tooltip>
<div class="screen-img"
v-if="currentapp.screenshots && currentapp.screenshots.length < 5">
<el-upload
drag
@ -77,10 +81,6 @@
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="saveappinfo('save')">保存</el-button>
</el-form-item>
</el-form>
</div>
@ -140,7 +140,6 @@
this.$confirm('确认删除 ' + this.currentapp.name + ' ?')
// eslint-disable-next-line no-unused-vars
.then(res => {
this.willDeleteApp = false;
apputils(data => {
if (data.code === 1000) {
this.$message({
@ -160,9 +159,8 @@
});
})
// eslint-disable-next-line no-unused-vars
.catch(err => {
this.willDeleteApp = false;
this.$message.error(err)
});
},
getappinfo() {
@ -240,7 +238,7 @@
<style scoped>
.appdownload /deep/ .el-upload-dragger {
background: #d1eef9;
background: #f1f1f1;
width: 155px;
height: 288px;
}
@ -258,8 +256,16 @@
}
.avatar-uploader .el-image:hover {
border-color: #409EFF;
.screen-img {
width: 155px;
height: 288px;
margin-right: 20px;
background-color: #f1f1f1;
float: left
}
.screen-img:hover {
background-color: #c2dcf1;
}
.avatar-uploader-icon {

@ -6,19 +6,19 @@
<table>
<tr>
<td><span class="type">{{ currentapp.type|getapptype}}</span></td>
<td></td>
<td/>
<td><span class="type">{{ has_combo.type|getapptype}}</span></td>
</tr>
<tr>
<td>
<div class="icon"><img v-if="cmaster_release" :src="cmaster_release.icon_url"
class="ng-isolate-scope">
class="ng-isolate-scope" alt="">
</div>
</td>
<td><i class="icon-combo"></i></td>
<td><i class="icon-combo"/></td>
<td>
<div class="icon"><img v-if="hmaster_release" :src="hmaster_release.icon_url"
class="ng-isolate-scope">
class="ng-isolate-scope" alt="">
</div>
</td>
</tr>
@ -39,34 +39,30 @@
<b>选择已有的应用进行合并</b>
</p>
<div class="apps">
<b v-if="comboapplists.length ===0 ">暂无可以合并的应用</b>
<el-link v-if="comboapplists.length ===0 " :underline="false" type="danger">暂无可以合并的应用
</el-link>
<div :key="comboapp.app_id" @click="each_add(comboapp.app_id)" class="app ng-scope"
v-for="comboapp in comboapplists">
<div class="icon">
<img :src="comboapp.master_release|geticon_url" class="ng-isolate-scope">
<img :src="comboapp.master_release|geticon_url" class="ng-isolate-scope" alt="">
</div>
<p class="ng-binding">{{ comboapp.name }}</p></div>
</div>
</div>
<span class="hr-vertical"></span>
<span class="hr-vertical"/>
<div class="find-apps">
<p class="lead ">
<b>输入需要合并的应用的短链接或者名字</b>
</p>
<div class="form-group">
<el-input
@click="searchapps"
clearables
clearable
placeholder="输入短链接或者名字"
prefix-icon="el-icon-search"
v-model="searchKey"
/>
</div>
</div>
</div>
@ -366,37 +362,9 @@
padding-top: 40px
}
.apps-app-combo .request-wrapper table .actions .btn {
margin-bottom: 20px;
min-width: 100px;
border-radius: 30px
}
.apps-app-combo .request-wrapper table .actions .btn-link {
color: #a9b1b3;
text-decoration: none;
border: 1px solid transparent;
-webkit-transition: border-color .25s;
transition: border-color .25s
}
.apps-app-combo .request-wrapper table .actions .btn-link:hover {
border-color: #a9b1b3
}
.apps-app-combo .request-wrapper table i.icon-combo {
font-size: 30px
}
.apps-app-combo .combo-loading-wrap {
margin-bottom: 8px
}
.apps-app-combo .combo-loading-wrap > .icon {
display: inline-block;
-webkit-animation: rotating 1s linear infinite;
animation: rotating 1s linear infinite
}
</style>

@ -1,6 +1,4 @@
<template>
<div style="margin-top: 20px;width: 90%;margin-left: 8%">
<el-link type="primary" v-if="this.currentapp.issupersign" style="margin-bottom: 30px;font-size: x-large"
@click="$router.push({name:'FirSuperSignBase',params:{act:'useddevices'},query:{bundleid: currentapp.bundle_id}})">
@ -60,33 +58,4 @@
<style scoped>
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
height: 100px;
width: 100px;
border-radius: 10px;
display: block;
}
</style>

@ -341,33 +341,4 @@
<style scoped>
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
height: 100px;
width: 100px;
border-radius: 10px;
display: block;
}
</style>

@ -32,7 +32,7 @@
<el-tooltip content="本应用签名使用额度,超过该额度,新设备将无法安装本应用。0代表不限额" placement="top">
<el-input-number v-model="currentapp.supersign_limit_number" :disabled="supersign_disable"
:placeholder="defualt_dtitle" :min="0"
style="width: 40%;margin-right: 10px" label="签名限额"></el-input-number>
style="width: 40%;margin-right: 10px" label="签名限额"/>
</el-tooltip>
<el-button @click="saveappinfo({supersign_limit_number:currentapp.supersign_limit_number})"
@ -54,7 +54,7 @@
<el-select v-model="currentapp.supersign_type" placeholder="特殊签名权限"
style="width: 60%;margin-right: 10px" :disabled="supersign_disable">
<el-option v-for="st in sign_type_list" :key="st.id" :label="st.name"
:value="st.id"></el-option>
:value="st.id"/>
</el-select>
<el-button @click="saveappinfo({supersign_type:currentapp.supersign_type})"
:disabled="supersign_disable"
@ -203,33 +203,4 @@
<style scoped>
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
height: 100px;
width: 100px;
border-radius: 10px;
display: block;
}
</style>

@ -9,21 +9,21 @@
<el-card>
<div class="directive-view-release">
<i class="el-icon-cloudy" v-if="! app.is_master"></i>
<i class="el-icon-cloudy" style="background-color: rgb(96, 200, 279)" v-else></i>
<i class="el-icon-cloudy" v-if="! app.is_master"/>
<i class="el-icon-cloudy" style="background-color: rgb(139,195,248)" v-else/>
<b class="ng-binding">{{app.app_version}} (Build {{app.build_version}})</b>
<div class="release-metainfo ng-hide"
v-if="app.release_type === 0">
<small>
<i class="icon-calendar"></i>
<i class="icon-calendar"/>
<span class="el-icon-date">&nbsp;{{app.created_time|formattimeline}}</span>
</small>
</div>
<div class="release-metainfo" v-else>
<small>
<i class="icon-calendar"></i>
<i class="icon-calendar"/>
<span class="el-icon-date">&nbsp;{{app.created_time|formattimeline}}</span>
</small> &nbsp;&nbsp;·&nbsp;&nbsp;
@ -32,19 +32,18 @@
</div>
<p>{{app.changelog}}</p>
<textarea v-if="app.editing.changelog"
v-model="app.changelog"
placeholder="更新日志">
</textarea>
<label>
<textarea v-if="app.editing.changelog"
v-model="app.changelog"
placeholder="更新日志">
</textarea>
</label>
<div class="release-actions editing " v-if="app.editing.changelog">
<button class="btn-cancel" @click="endEdit(app,'changelog')"><span
>取消</span></button>
<button class="btn-save" @click="updateChangelog(app,'changelog')"><span
>保存</span></button>
</div>
<el-input v-if="app.editing.binary_url"
v-model="app.binary_url"
placeholder="下载地址,默认本服务器,填写第三方可以 自动跳转到第三方平台" clearable>
@ -56,52 +55,42 @@
<button class="btn-save" @click="updateChangelog(app,'binary_url')"><span
>保存</span></button>
</div>
<div class="release-actions" v-show="!app.editing.changelog && !app.editing.binary_url ">
<el-tooltip class="tooltip-top" content="编辑更新日志" placement="top">
<el-button @click="startEdit(app,'changelog')"
tooltip="编辑更新日志"
class="tooltip-top ">
<i class="el-icon-edit"></i>
<i class="el-icon-edit"/>
</el-button>
</el-tooltip>
<el-tooltip class="tooltip-top" content="下载原文件" placement="top">
<el-button class="tooltip-top" tooltip="下载原文件"
@click="downloadPackage(app)">
<i class="el-icon-download"></i>
<i class="el-icon-download"/>
<span>{{app.binary_size}}</span>
</el-button>
</el-tooltip>
<el-tooltip class="tooltip-top" :content="app.binary_url|downcontent" placement="top">
<el-button class="tooltip-top" tooltip="修改下载地址"
@click="startEdit(app,'binary_url')"><i
class="el-icon-link"></i> <span>下载地址</span>
@click="startEdit(app,'binary_url')"><i class="el-icon-link"/> <span>下载地址</span>
</el-button>
</el-tooltip>
<el-button class="tooltip-top" @click="previewRelase(app)"><i
class="el-icon-view"></i> <span class="ng-binding">预览</span>
<el-button class="tooltip-top" @click="previewRelase(app)"><i class="el-icon-view"/> <span
class="ng-binding">预览</span>
</el-button>
<el-button v-if="! app.is_master" class="tooltip-top" @click="make_master_release(app)">
<i class="el-icon-view"></i>
<i class="el-icon-view"/>
<span class="ng-binding ng-scope">标记上线</span>
</el-button>
<el-button v-if="(! app.is_master )|| (app.is_master && release_apps.length === 1)"
class="tooltip-top" @click="del_release_app(app)">
<i class="el-icon-delete"></i>
<i class="el-icon-delete"/>
<span class="ng-binding ng-scope">删除</span>
</el-button>
@ -128,7 +117,6 @@
editing: {'changelog': false, 'binary_url': false}
},
updatas: {},
}
},
methods: {
@ -412,50 +400,12 @@
color: #9b9b9b;
}
.directive-view-release .edit-pen {
cursor: pointer
}
.directive-view-release .release-type {
position: relative;
display: inline-block;
margin-left: 8px;
padding: 2px 6px;
border: 1px solid;
border-radius: 5px
}
.directive-view-release .release-info {
margin-top: 6px
}
.directive-view-release .release-info i, .directive-view-release .release-info span {
display: inline-block;
vertical-align: middle
}
.directive-view-release .release-info span {
margin-right: 12px;
margin-left: 4px
}
.directive-view-release .release-actions {
margin-top: 10px;
position: relative
}
.directive-view-release .release-actions .is-history {
display: inline-block
}
.directive-view-release .release-actions toggle {
margin-right: 8px
}
.directive-view-release .release-actions .comp-toggle.toggle-off {
background-color: #9b9b9b
}
.directive-view-release .release-actions a, .directive-view-release .release-actions button {
display: inline-block;
vertical-align: middle;
@ -467,7 +417,7 @@
padding: 4px 10px
}
.directive-view-release .release-actions .release-actions-group .mqc-wait-btn, .directive-view-release .release-actions .tooltip-top {
.directive-view-release .release-actions .tooltip-top {
overflow: visible;
position: relative
}
@ -480,13 +430,11 @@
.directive-view-release .release-actions a.btn-save, .directive-view-release .release-actions button.btn-save {
border-color: #3d6df8;
background-color: #92c1f8;
color: #fff
}
.directive-view-release .release-actions a.btn-cancel, .directive-view-release .release-actions button.btn-cancel {
border: 0;
}
.directive-view-release .release-actions a.btn-cancel:hover, .directive-view-release .release-actions button.btn-cancel:hover {
@ -512,80 +460,4 @@
width: 500px
}
.time-line {
position: relative
}
.time-line:before {
position: absolute;
left: 25px;
z-index: 1;
height: 100%;
border-left: 1px solid rgba(151, 151, 151, .2);
content: ' '
}
.time-line li {
margin-top: 80px
}
.time-line li:first-child {
padding-left: 80px;
margin-top: 0
}
.time-line li:first-child .dot {
position: absolute;
left: 20px;
z-index: 2;
display: inline-block;
width: 10px;
height: 10px;
border: 1px solid rgba(151, 151, 151, .2);
border-radius: 50%;
background-color: #9b9b9b;
text-align: center
}
.time-line li:nth-child(2) {
margin-top: 20px
}
.time-line li:nth-child(3) {
margin-top: 40px
}
.time-line .filter {
position: relative;
top: -6px;
display: inline-block;
margin-right: 32px;
font-weight: 700;
cursor: pointer
}
.time-line .filter.active {
color: #4a4a4a
}
.time-line .filter.version-rollback .button {
display: inline-block;
vertical-align: middle;
background-color: transparent;
border: 1px solid;
padding: 4px 20px;
border-radius: 17px
}
.time-line .more button {
background: #f6f6f6;
border: 1px solid;
position: relative;
z-index: 99;
width: 160px;
padding: 10px 0;
border-radius: 40px
}
</style>

@ -1,47 +1,45 @@
<template>
<div>
<el-container>
<el-header style="height: 100px">
<el-dialog
:visible.sync="show_buy_download_times"
width="780px"
:close-on-click-modal="false"
:close-on-press-escape="false"
center>
<el-container>
<el-header style="height: 100px">
<el-dialog
:visible.sync="show_buy_download_times"
width="780px"
:close-on-click-modal="false"
:close-on-press-escape="false"
center>
<span slot="title" style="color: #313639;font-size: 28px; margin-bottom: 14px;">
购买下载次数包
</span>
<div class="packages" style="max-width: 768px;">
<div class="package-item" v-for="(packages,index) in data_package_prices" :key="packages.name">
<div class="arraw-badge" v-if="index===1"><span></span> <span class="arraw"></span></div>
<div class="package-content">
<div class="money ">{{ packages.price / 100 }}</div>
<div class="times ">{{ packages.package_size |formatMoney }}</div>
<div class="unit" style="font-size: 14px;color: #869096">累计下载次数</div>
<div class="text-gift" v-if="packages.download_count_gift">{ <span>{{ packages.download_count_gift }}</span>
}
</div>
</div>
<div class="package-actions">
<el-radio v-model="default_price_radio" :label="packages.name" border>
<span>此套餐</span>
<span class="pay-current" v-if="default_price_radio === packages.name"
:style="{background:`url(${pay_image.selected}) right bottom/100% no-repeat`}"/>
</el-radio>
<div class="packages" style="max-width: 768px;">
<div class="package-item" v-for="(packages,index) in data_package_prices" :key="packages.name">
<div class="arraw-badge" v-if="index===1"><span></span> <span class="arraw"/></div>
<div class="package-content">
<div class="money ">{{ packages.price / 100 }}</div>
<div class="times ">{{ packages.package_size |formatMoney }}</div>
<div class="unit" style="font-size: 14px;color: #869096">累计下载次数</div>
<div class="text-gift" v-if="packages.download_count_gift">{ <span>{{ packages.download_count_gift }}</span>
}
</div>
</div>
<div class="package-actions">
<el-radio v-model="default_price_radio" :label="packages.name" border>
<span>此套餐</span>
<span class="pay-current" v-if="default_price_radio === packages.name"
:style="{background:`url(${pay_image.selected}) right bottom/100% no-repeat`}"/>
</el-radio>
</div>
</div>
<div>
<div style="margin-top: 30px;text-align: center">
<el-radio v-model="default_pay_radio" :label="pay.name" border v-for="pay in pay_choices"
:key="pay.name">
<span style="color: white">xxxxxxxxxxxxxx</span>
<span style="width: 160px; height: 45px">
</div>
<div>
<div style="margin-top: 30px;text-align: center">
<el-radio v-model="default_pay_radio" :label="pay.name" border v-for="pay in pay_choices"
:key="pay.name">
<span style="color: white">xxxxxxxxxxxxxx</span>
<span style="width: 160px; height: 45px">
<span class="pay-icon alipay" :style="{backgroundImage:`url(${pay_image.ali})`}"
v-if="pay.type === 'ALI'"/>
<span class="pay-icon" :style="{backgroundImage:`url(${pay_image.wx})`}"
@ -49,454 +47,444 @@
<span class="pay-current" v-if="default_pay_radio === pay.name"
:style="{background:`url(${pay_image.selected}) right bottom/100% no-repeat` }"/>
</span>
</el-radio>
</div>
<div style="text-align: center">
<el-button type="primary" :disabled="buy_button_disable" @click="buy"
style="margin-top:30px;width: 166px"> 立即支付
</el-button>
</div>
</el-radio>
</div>
<div style="text-align: center">
<el-button type="primary" :disabled="buy_button_disable" @click="buy"
style="margin-top:30px;width: 166px"> 立即支付
</el-button>
</div>
<span slot="footer">
</div>
<span slot="footer">
如对充值订单有疑问请联系 nineven@qq.com
</span>
</el-dialog>
</el-dialog>
<el-dialog
:title="getDelappTitle"
:visible.sync="willDeleteApp"
width="50%">
<el-dialog
:title="getDelappTitle"
:visible.sync="willDeleteApp"
width="50%">
<span v-if="delapp.issupersign">该应用开启了超级签名执行删除操作将会删除相关开发者账户下的证书等数据可能会导致已经下载的APP闪退并且删除后不可恢复请谨慎操作</span>
<span v-else>删除后不可恢复请谨慎操作</span>
<span v-if="delapp.issupersign">该应用开启了超级签名执行删除操作将会删除相关开发者账户下的证书等数据可能会导致已经下载的APP闪退并且删除后不可恢复请谨慎操作</span>
<span v-else>删除后不可恢复请谨慎操作</span>
<span slot="footer" class="dialog-footer">
<span slot="footer" class="dialog-footer">
<el-button @click="willDeleteApp = false"> </el-button>
<!-- <el-button v-if="delapp.issupersign" type="danger" @click="$router.push({name: 'FirAppInfossecurity', params: {id: delapp.app_id}})"> </el-button>-->
<el-button type="danger" @click="delApp"> </el-button>
</span>
</el-dialog>
<el-dialog class="upload-app"
style="position: fixed"
:visible.sync="willuploadApp"
:destroy-on-close="true"
:show-close="!uploading"
width="40%"
:close-on-click-modal="false"
@closed="closeUpload">
<div v-if="!uploading">
<el-row :gutter="20">
<el-col :span="6">
<div class="grid-content bg-purple">
<div style="width: 100px;height: 100px">
<el-avatar shape="square" :size="100" :src="analyseappinfo.icon"></el-avatar>
</div>
</div>
</el-col>
<el-col :span="18">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 8px;">
<el-col :span="18">
{{ analyseappinfo.version}} (Build {{ analyseappinfo.buildversion}}) {{
analyseappinfo.release_type_id|getiOStype}}
<el-link :underline="false"
v-if="analyseappinfo.udid && analyseappinfo.udid.length > 0"
@click="showUDID(analyseappinfo)">- {{ analyseappinfo.udid.length
}} UDID
</el-link>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 18px;">
<el-col :span="18">
<el-input v-model="analyseappinfo.appname"></el-input>
</el-col>
</el-row>
</div>
</el-col>
</el-row>
<el-divider></el-divider>
<el-row :gutter="20">
<el-col :span="6">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 18px;">
<el-col :span="18" :offset="8">
<span>短连接</span>
</el-col>
</el-row>
</div>
</el-col>
<el-col :span="18">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 10px;">
<el-col :span="18">
<el-input v-model="short">
<template slot="prepend">{{analyseappinfo.domain_name}}/</template>
</el-input>
</el-col>
</el-row>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 18px;">
<el-col :span="18" :offset="8">
<span>更新日志</span>
</el-col>
</el-row>
</div>
</el-col>
<el-col :span="18">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 10px;">
<el-col :span="18">
<el-input type="textarea"
v-model="analyseappinfo.changelog"
placeholder="请输入内容"
rows="5"
show-word-limit></el-input>
</el-col>
</el-row>
</div>
</el-col>
</el-row>
</div>
<div v-if="uploading">
<canvas ref="canvas" class="canvas"/>
<div class="wrap">
<!--包裹所有元素的容器-->
<div class="cube">
<!--前面图片 -->
<div class="out_front">
<img src="@/assets/imgs/1.png" class="pic">
</div>
<!--后面图片 -->
<div class="out_back">
<img src="@/assets/imgs/5.png" class="pic">
</div>
<!--左面图片 -->
<div class="out_left">
<img src="@/assets/imgs/6.png" class="pic">
</div>
<!--右面图片 -->
<div class="out_right">
<img src="@/assets/imgs/7.png" class="pic">
</div>
<!--上面图片 -->
<div class="out_top">
<img src="@/assets/imgs/8.png" class="pic">
</div>
<!--下面图片 -->
<div class="out_bottom">
<img src="@/assets/imgs/9.png" class="pic">
</el-dialog>
<el-dialog class="upload-app"
style="position: fixed"
:visible.sync="willuploadApp"
:destroy-on-close="true"
:show-close="!uploading"
width="40%"
:close-on-click-modal="false"
@closed="closeUpload">
<div v-if="!uploading">
<el-row :gutter="20">
<el-col :span="6">
<div class="grid-content bg-purple">
<div style="width: 100px;height: 100px">
<el-avatar shape="square" :size="100" :src="analyseappinfo.icon"/>
</div>
</div>
</el-col>
<el-col :span="18">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 8px;">
<el-col :span="18">
{{ analyseappinfo.version}} (Build {{ analyseappinfo.buildversion}}) {{
analyseappinfo.release_type_id|getiOStype}}
<el-link :underline="false"
v-if="analyseappinfo.udid && analyseappinfo.udid.length > 0"
@click="showUDID(analyseappinfo)">- {{ analyseappinfo.udid.length
}} UDID
</el-link>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 18px;">
<el-col :span="18">
<el-input v-model="analyseappinfo.appname"/>
</el-col>
</el-row>
</div>
</el-col>
</el-row>
<el-divider/>
<el-row :gutter="20">
<el-col :span="6">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 18px;">
<el-col :span="18" :offset="8">
<span>短连接</span>
</el-col>
</el-row>
</div>
</el-col>
<el-col :span="18">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 10px;">
<el-col :span="18">
<el-input v-model="short">
<template slot="prepend">{{analyseappinfo.domain_name}}/</template>
</el-input>
</el-col>
</el-row>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 18px;">
<el-col :span="18" :offset="8">
<span>更新日志</span>
</el-col>
</el-row>
</div>
</el-col>
<el-col :span="18">
<div class="grid-content bg-purple">
<el-row :gutter="20" style="margin-top: 10px;">
<el-col :span="18">
<el-input type="textarea"
v-model="analyseappinfo.changelog"
placeholder="请输入内容"
rows="5"
show-word-limit/>
</el-col>
</el-row>
</div>
</el-col>
</el-row>
</div>
<div v-if="uploading">
<!-- <canvas ref="canvas" class="canvas"/>-->
<div class="wrap">
<!--包裹所有元素的容器-->
<div class="cube">
<!--前面图片 -->
<div class="out_front">
<img src="@/assets/imgs/1.png" class="pic" alt="">
</div>
<!--后面图片 -->
<div class="out_back">
<img src="@/assets/imgs/5.png" class="pic" alt="">
</div>
<!--左面图片 -->
<div class="out_left">
<img src="@/assets/imgs/6.png" class="pic" alt="">
</div>
<!--右面图片 -->
<div class="out_right">
<img src="@/assets/imgs/7.png" class="pic" alt="">
</div>
<!--上面图片 -->
<div class="out_top">
<img src="@/assets/imgs/8.png" class="pic" alt="">
</div>
<!--下面图片 -->
<div class="out_bottom">
<img src="@/assets/imgs/9.png" class="pic" alt="">
</div>
<!--小正方体 -->
<span class="in_front">
<img :src="this.analyseappinfo.icon" class="in_pic">
<!--小正方体 -->
<span class="in_front">
<img :src="this.analyseappinfo.icon" class="in_pic" alt="">
</span>
<span class="in_back">
<img :src="this.analyseappinfo.icon" class="in_pic">
<span class="in_back">
<img :src="this.analyseappinfo.icon" class="in_pic" alt="">
</span>
<span class="in_left">
<img :src="this.analyseappinfo.icon" class="in_pic">
<span class="in_left">
<img :src="this.analyseappinfo.icon" class="in_pic" alt="">
</span>
<span class="in_right">
<img :src="this.analyseappinfo.icon" class="in_pic">
<span class="in_right">
<img :src="this.analyseappinfo.icon" class="in_pic" alt="">
</span>
<span class="in_top">
<img :src="this.analyseappinfo.icon" class="in_pic">
<span class="in_top">
<img :src="this.analyseappinfo.icon" class="in_pic" alt="">
</span>
<span class="in_bottom">
<img :src="this.analyseappinfo.icon" class="in_pic">
<span class="in_bottom">
<img :src="this.analyseappinfo.icon" class="in_pic" alt="">
</span>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
</div>
<span slot="footer" class="dialog-footer">
<el-progress :text-inside="true" :stroke-width="26" :percentage="uploadprocess"
v-if="uploadflag === true"></el-progress>
v-if="uploadflag === true"/>
<el-button type="primary" plain @click="uploadcloud" v-else>{{ analyseappinfo.is_new|get_upload_text}}</el-button>
</span>
</el-dialog>
<el-row>
<el-col :span="3">
<el-radio-group v-model="searchfromtype">
<el-radio-button label="android" icon="el-icon-mobile-phone"><i
class="iconfont icon-android2"/>
</el-radio-button>
<el-radio-button label="ios"><i class="iconfont icon-ios"/>
</el-radio-button>
</el-radio-group>
</el-col>
<el-col :span="5">
<el-row>
<el-col :span="20">
<el-input
placeholder="请输入名称搜索"
v-model="keysearch"
@click="searchapps"
@keyup.enter.native="searchapps"
clearable>
</el-input>
</el-col>
<el-col :span="2">
<el-button icon="el-icon-search" @click="searchFun">
</el-button>
</el-col>
</el-row>
</el-col>
<el-col :span="4" class="surplus-card">
<el-row>
<el-col :span="12">
<div>
<span class="name">iOS应用</span>
<el-divider direction="vertical"></el-divider>
</div>
<div>
<span class="value">{{ hdata.ios_count }}</span>
<el-divider direction="vertical"></el-divider>
</div>
</el-col>
<el-col :span="12">
<div>
<span class="name">Android应用</span>
<el-divider direction="vertical"></el-divider>
</div>
<div>
<span class="value">{{ hdata.android_count }}</span>
<el-divider direction="vertical"></el-divider>
</div>
</el-col>
</el-row>
</el-col>
<el-col :span="5" class="surplus-card">
<el-row>
<el-col :span="12">
<div>
<span class="name">今日苹果下载次数</span>
<el-divider direction="vertical"></el-divider>
</div>
<div>
<span class="value">{{ hdata.ios_today_hits_count }}</span>
<el-divider direction="vertical"></el-divider>
</div>
</el-col>
<el-col :span="12">
<div>
<span class="name">今日安卓下载次数</span>
<el-divider direction="vertical"></el-divider>
</div>
<div>
<span class="value">{{ hdata.android_today_hits_count }}</span>
<el-divider direction="vertical"></el-divider>
</div>
</el-col>
</el-row>
</el-col>
<el-col :span="7" class="surplus-card">
<el-row>
<el-col :span="9">
<div>
<el-tooltip placement="top">
<div slot="content">
1.账号下所有应用共用此剩余下载次数<br/>
2.每日凌晨 0 点自动重置下载次数<br/>
</div>
<span class="name">今日剩余免费次数</span>
</el-tooltip>
<el-divider direction="vertical"></el-divider>
</div>
<div>
<span class="value">{{$store.state.userinfo.free_download_times }}</span>
<el-divider direction="vertical"></el-divider>
</div>
</el-col>
<el-col :span="8">
<div>
<el-tooltip placement="top">
<div slot="content">1.下载次数包没有时间限制用完为止<br/>2.购买的下载次数包为总下载量不会每日重置</div>
<span class="name">剩余付费次数</span>
</el-tooltip>
<el-divider direction="vertical"></el-divider>
</div>
<div>
<span class="value">{{$store.state.userinfo.download_times }}</span>
<el-divider direction="vertical"></el-divider>
</div>
</el-col>
<el-col :span="6">
<div>
<el-tooltip placement="top">
<div slot="content">
1.下载应用每100M消耗一次下载次数<br>
2.超级签下载下载消耗次数翻倍<br>
</div>
<span class="name">购买次数</span>
</el-tooltip>
</div>
<div>
<el-button class="action" size="small" icon="el-icon-shopping-cart-1"
@click="show_package_prices"></el-button>
</div>
</el-col>
</el-row>
</el-col>
</el-row>
</el-header>
<div
ref="appmain" style="margin: 40px 20px;height: 100%">
<el-row style="max-height: 460px; margin: 0 auto;" :gutter="10" class="page-apps">
<el-col style="width: 33%;height: 460px ">
<div class=" app-animator appdownload">
<div class=" card app card-ios" style="padding: 0">
</el-dialog>
<el-row>
<el-col :span="3">
<el-radio-group v-model="searchfromtype">
<el-radio-button label="android" icon="el-icon-mobile-phone"><i
class="iconfont icon-android2"/>
</el-radio-button>
<el-radio-button label="ios"><i class="iconfont icon-ios"/>
</el-radio-button>
</el-radio-group>
</el-col>
<el-col :span="5">
<el-row>
<el-col :span="20">
<el-input
placeholder="请输入名称搜索"
v-model="keysearch"
@click="searchapps"
@keyup.enter.native="searchapps"
clearable>
</el-input>
</el-col>
<el-col :span="2">
<el-button icon="el-icon-search" @click="searchFun">
</el-button>
</el-col>
</el-row>
</el-col>
<el-col :span="4" class="surplus-card">
<el-row>
<el-col :span="12">
<div>
<span class="name">iOS应用</span>
<el-divider direction="vertical"/>
</div>
<div>
<span class="value">{{ hdata.ios_count }}</span>
<el-divider direction="vertical"/>
</div>
</el-col>
<el-upload
drag
:show-file-list="false"
:before-upload="beforeAvatarUpload"
accept=".ipa , .apk"
action="#"
multiple>
<i class="el-icon-upload" style="color: #fff"></i>
<div class="el-upload__text" style="color: #fff;margin-top: 20px">拖拽到这里上传</div>
</el-upload>
<el-col :span="12">
<div>
<span class="name">Android应用</span>
<el-divider direction="vertical"/>
</div>
<div>
<span class="value">{{ hdata.android_count }}</span>
<el-divider direction="vertical"/>
</div>
</el-col>
</el-row>
</el-col>
<el-col :span="5" class="surplus-card">
<el-row>
<el-col :span="12">
<div>
<span class="name">今日苹果下载次数</span>
<el-divider direction="vertical"/>
</div>
<div>
<span class="value">{{ hdata.ios_today_hits_count }}</span>
<el-divider direction="vertical"/>
</div>
</el-col>
<el-col :span="12">
<div>
<span class="name">今日安卓下载次数</span>
<el-divider direction="vertical"/>
</div>
<div>
<span class="value">{{ hdata.android_today_hits_count }}</span>
<el-divider direction="vertical"/>
</div>
</el-col>
</el-row>
</el-col>
<el-col :span="7" class="surplus-card">
<el-row>
<el-col :span="9">
<div>
<el-tooltip placement="top">
<div slot="content">
1.账号下所有应用共用此剩余下载次数<br/>
2.每日凌晨 0 点自动重置下载次数<br/>
</div>
<span class="name">今日剩余免费次数</span>
</el-tooltip>
<el-divider direction="vertical"/>
</div>
<div>
<span class="value">{{$store.state.userinfo.free_download_times }}</span>
<el-divider direction="vertical"/>
</div>
</el-col>
<el-col :span="8">
<div>
<el-tooltip placement="top">
<div slot="content">1.下载次数包没有时间限制用完为止<br/>2.购买的下载次数包为总下载量不会每日重置</div>
<span class="name">剩余付费次数</span>
</el-tooltip>
<el-divider direction="vertical"/>
</div>
<div>
<span class="value">{{$store.state.userinfo.download_times }}</span>
<el-divider direction="vertical"/>
</div>
</el-col>
<el-col :span="6">
<div>
<el-tooltip placement="top">
<div slot="content">
1.下载应用每100M消耗一次下载次数<br>
2.超级签下载下载消耗次数翻倍<br>
</div>
<span class="name">购买次数</span>
</el-tooltip>
</div>
<div>
<el-button class="action" size="small" icon="el-icon-shopping-cart-1"
@click="show_package_prices"/>
</div>
</el-col>
</el-row>
</el-col>
</el-row>
</el-header>
<div ref="appmain" style="margin: 40px 20px;height: 100%;width:1166px">
<el-row style="max-height: 460px; margin: 0 auto;" :gutter="10" class="page-apps">
<el-col style="width: 30%;height: 460px ;margin-left: 3%">
<div class=" app-animator appdownload">
<div class=" card app card-ios" style="padding: 0">
<el-upload
drag
:show-file-list="false"
:before-upload="beforeAvatarUpload"
accept=".ipa , .apk"
action="#"
multiple>
<i class="el-icon-upload" style="color: #fff"/>
<div class="el-upload__text" style="color: #fff;margin-top: 20px">拖拽到这里上传</div>
</el-upload>
</div>
</div>
</el-col>
<el-col style="width: 33%;height: 460px"
v-for="(r,index) in applists" :key="r.id" @click="appInfos(index)">
</el-col>
<el-col style="width: 30%;height: 460px;margin-left: 3%"
v-for="(r,index) in applists" :key="r.id" @click="appInfos(index)">
<div class=" app-animator">
<div class="card app card-ios">
<div class=" app-animator">
<div class="card app card-ios">
<i class=" type-icon iconfont icon-ios" v-if="r.type === 1" src=""></i>
<i class="type-icon iconfont icon-android2" v-if="r.type === 0"></i>
<i class=" type-icon iconfont icon-ios" v-if="r.type === 1"/>
<i class="type-icon iconfont icon-android2" v-if="r.type === 0"/>
<div class="type-mark" v-if="r.type === 1"></div>
<div class="type-mark" style="border-top: 48px solid #A4C639" v-if="r.type === 0"></div>
<a class="appicon" @click="appInfos(r)">
<img class="icon ng-isolate-scope" width="100" height="100"
:src="r.master_release.icon_url|make_icon_url"></a>
<div class="type-mark" v-if="r.type === 1"></div>
<div class="type-mark" style="border-top: 48px solid #A4C639" v-if="r.type === 0"></div>
<a class="appicon" @click="appInfos(r)">
<img class="icon ng-isolate-scope" width="100" height="100"
:src="r.master_release.icon_url|make_icon_url" alt=""></a>
<div class="combo-info ng-scope" v-if="r.has_combo !== null ">
<i class="el-icon-copy-document" style="transform:rotateX(180deg);"></i>
<a @click="appInfos(r.has_combo)">
<img class="icon ng-isolate-scope" width="45" height="45"
:src="r.has_combo.master_release.icon_url|make_icon_url">
</a>
</div>
<div class="combo-info ng-scope" v-if="r.has_combo !== null ">
<i class="el-icon-copy-document" style="transform:rotateX(180deg);"/>
<a @click="appInfos(r.has_combo)">
<img class="icon ng-isolate-scope" width="45" height="45"
:src="r.has_combo.master_release.icon_url|make_icon_url" alt="">
</a>
</div>
<br>
<p class="appname"><i class="el-icon-user-solid"></i><span class="ng-binding">{{ r.name }}</span>
</p>
<table>
<tbody>
<tr>
<td class="ng-binding">应用大小</td>
<td><span
class="ng-binding">{{ r.master_release.binary_size }}</span>
</td>
</tr>
<tr>
<td class="ng-binding">应用平台</td>
<td><span class="ng-binding">{{ r.type |getapptype }}</span></td>
</tr>
<tr>
<td class="ng-binding">应用标识</td>
<td><span class="ng-binding">{{ r.bundle_id | autoformat }}</span></td>
</tr>
<tr>
<td class="ng-binding">最新版本</td>
<td><span class="ng-binding">{{ r.master_release.app_version }}Build {{ r.master_release.build_version }}</span>
</td>
</tr>
<tr v-if="r.type === 1 && r.master_release.binary_url === ''">
<td class="ng-binding">打包类型</td>
<td>
<br>
<p class="appname"><i class="el-icon-user-solid"/><span
class="ng-binding">{{ r.name }}</span>
</p>
<table>
<tbody>
<tr>
<td class="ng-binding">应用大小</td>
<td><span
class="ng-binding">{{ r.master_release.binary_size }}</span>
</td>
</tr>
<tr>
<td class="ng-binding">应用平台</td>
<td><span class="ng-binding">{{ r.type |getapptype }}</span></td>
</tr>
<tr>
<td class="ng-binding">应用标识</td>
<td><span class="ng-binding">{{ r.bundle_id | autoformat }}</span></td>
</tr>
<tr>
<td class="ng-binding">最新版本</td>
<td><span class="ng-binding">{{ r.master_release.app_version }}Build {{ r.master_release.build_version }}</span>
</td>
</tr>
<tr v-if="r.type === 1 && r.master_release.binary_url === ''">
<td class="ng-binding">打包类型</td>
<td>
<span class="ng-binding">
{{ r.master_release.release_type|getiOStype }}
<span v-if="r.issupersign">超级签名</span>
</span>
</td>
</tr>
<tr v-if=" r.master_release.binary_url !== ''">
<td>第三方平台下载</td>
<td>
</td>
</tr>
<tr v-if=" r.master_release.binary_url !== ''">
<td>第三方平台下载</td>
<td>
<span>
<el-tooltip :content="r.master_release.binary_url" placement="top">
<a target="_blank" :href="r.master_release.binary_url">{{ r.master_release.binary_url| autoformat}}</a>
</el-tooltip>
</span>
</td>
</tr>
</td>
</tr>
</tbody>
</table>
</tbody>
</table>
<div class="action">
<el-button @click="appInfos(r)">
<i class="icon-pen el-icon-edit"></i> 管理
</el-button>
<div class="action">
<el-button @click="appInfos(r)">
<i class="icon-pen el-icon-edit"/> 管理
</el-button>
<el-button @click="appDownload(r)" class="ng-binding">
<i class="icon-eye el-icon-view"></i> 预览
</el-button>
<el-button @click="appDownload(r)" class="ng-binding">
<i class="icon-eye el-icon-view"/> 预览
</el-button>
<el-button v-if="r.issupersign" @click="DeleteApp(r)" class="btn btn-remove"
icon="el-icon-loading"
circle></el-button>
<el-button v-if="r.issupersign" @click="DeleteApp(r)" class="btn btn-remove"
icon="el-icon-loading"
circle/>
<el-button v-else @click="DeleteApp(r)" class="btn btn-remove" icon="el-icon-delete"
circle></el-button>
<el-button v-else @click="DeleteApp(r)" class="btn btn-remove" icon="el-icon-delete"
circle/>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
</div>
</el-col>
</el-container>
</el-row>
</div>
</div>
</el-container>
</template>
<script>
import {analyseApps, apputils, get_package_prices, getapps, getuploadurl, my_order} from "@/restful";
import {
@ -506,7 +494,6 @@
getScrollHeight,
getScrollTop,
getWindowHeight,
show_beautpic,
uploadaliyunoss,
uploadlocalstorage,
uploadqiniuoss
@ -520,7 +507,7 @@
default_pay_radio: '',
default_price_radio: '',
pay_choices: [],
analyseappinfo: {},
analyseappinfo: {icon: ''},
short: '',
keysearch: '',
searchfromtype: '',
@ -707,10 +694,10 @@
this.uploadflag = true;
this.uploading = true;
// eslint-disable-next-line no-unused-vars
this.timmer = setTimeout(data => {
let canvas = this.$refs.canvas;
show_beautpic(this, canvas, 888, 0.6);
}, 100);
// this.timmer = setTimeout(data => {
// let canvas = this.$refs.canvas;
// show_beautpic(this, canvas, 888, 0.6);
// }, 100);
let file = dataURLtoFile(this.analyseappinfo.icon, this.analyseappinfo.png_key);
@ -888,7 +875,6 @@
});
},
DeleteApp(delapp) {
//
this.willDeleteApp = true;
this.delapp = delapp;
},
@ -1000,13 +986,11 @@
</script>
<style scoped>
.el-container {
margin: 10px auto 100px;
width: 1166px;
width: 1266px;
position: relative;
padding-bottom: 1px;
background-color: #bfe7f9;
color: #9b9b9b;
-webkit-font-smoothing: antialiased;
border-radius: 1%;
@ -1016,7 +1000,6 @@
margin-top: 20px;
padding-top: 30px;
border-bottom: 1px solid rgba(208, 208, 208, .5);
background-color: #d5f9f9;
border-radius: 10px;
}
@ -1025,7 +1008,6 @@
text-align: right;
display: inline-block;
vertical-align: middle;
/*border-right: 1px solid #9b9b9b;*/
}
@ -1053,15 +1035,14 @@
width: 96%;
height: 96%;
margin: 2px auto; /*水平居中*/
/*background: #f8ba0b;*/
border-radius: 5px;
}
.appdownload /deep/ .el-upload-dragger {
width: 349.22px;
width: 339.8px;
height: 430px;
background: #9cb8f8;
background: #8bc3f8;
border: 0;
}

@ -10,35 +10,35 @@
<div v-if="editdeveloperinfo.auth_type===0">
<el-form-item label-width="110px" label="issuer_id">
<el-input :disabled='isedit' v-model="editdeveloperinfo.issuer_id"></el-input>
<el-input :disabled='isedit' v-model="editdeveloperinfo.issuer_id"/>
</el-form-item>
<el-form-item label-width="110px" label="private_key_id">
<el-input v-model="editdeveloperinfo.private_key_id"></el-input>
<el-input v-model="editdeveloperinfo.private_key_id"/>
</el-form-item>
<el-form-item label-width="110px" label="p8key">
<el-input type="textarea"
:rows="6" v-model="editdeveloperinfo.p8key" :placeholder="placeholder"></el-input>
:rows="6" v-model="editdeveloperinfo.p8key" :placeholder="placeholder"/>
</el-form-item>
</div>
<div v-if="editdeveloperinfo.auth_type===1">
<el-form-item label-width="110px" label="APP_ID">
<el-input :disabled='isedit' v-model="editdeveloperinfo.email"></el-input>
<el-input :disabled='isedit' v-model="editdeveloperinfo.email"/>
</el-form-item>
<el-form-item label-width="110px" label="password">
<el-input v-model="editdeveloperinfo.password" :placeholder="placeholder"></el-input>
<el-input v-model="editdeveloperinfo.password" :placeholder="placeholder"/>
</el-form-item>
</div>
<el-form-item label-width="110px" label="设备数量">
<el-input v-model="editdeveloperinfo.usable_number"></el-input>
<el-input v-model="editdeveloperinfo.usable_number"/>
</el-form-item>
<el-form-item label-width="110px" label="备注">
<el-input v-model="editdeveloperinfo.description"></el-input>
<el-input v-model="editdeveloperinfo.description"/>
</el-form-item>
<div style="">
<el-button v-if="isedit && editdeveloperinfo.is_actived" size="small" @click="syncdevices">同步设备信息
@ -96,7 +96,7 @@
type="line"
:color="developer_usedColor"
:text-inside="true" :stroke-width="18" :percentage="percentage"
status="success"></el-progress>
status="success"/>
</div>
<el-table
@ -120,10 +120,10 @@
?scope.row.usable_number-scope.row.developer_used_number :0 }}</p>
<div slot="reference" class="name-wrapper">
<el-tag size="medium" v-if="scope.row.email"><i class="el-icon-s-custom"></i> {{
<el-tag size="medium" v-if="scope.row.email"><i class="el-icon-s-custom"/> {{
scope.row.email }}
</el-tag>
<el-tag size="medium" v-if="scope.row.issuer_id"><i class="el-icon-key"></i> {{
<el-tag size="medium" v-if="scope.row.issuer_id"><i class="el-icon-key"/> {{
scope.row.issuer_id }}
</el-tag>
</div>
@ -233,41 +233,41 @@
<el-select v-model="editdeveloperinfo.auth_type" placeholder="认证类型"
style="margin-left: -100px">
<el-option v-for="st in apple_auth_list" :key="st.id" :label="st.name"
:value="st.id"></el-option>
:value="st.id"/>
</el-select>
</el-form-item>
<div v-if="editdeveloperinfo.auth_type===0">
<el-form-item label-width="110px" label="issuer_id">
<el-input :disabled='isedit' v-model="editdeveloperinfo.issuer_id"></el-input>
<el-input :disabled='isedit' v-model="editdeveloperinfo.issuer_id"/>
</el-form-item>
<el-form-item label-width="110px" label="private_key_id">
<el-input v-model="editdeveloperinfo.private_key_id" :placeholder="placeholder"></el-input>
<el-input v-model="editdeveloperinfo.private_key_id" :placeholder="placeholder"/>
</el-form-item>
<el-form-item label-width="110px" label="p8key">
<el-input type="textarea"
:rows="6" v-model="editdeveloperinfo.p8key" :placeholder="placeholder"></el-input>
:rows="6" v-model="editdeveloperinfo.p8key" :placeholder="placeholder"/>
</el-form-item>
</div>
<div v-if="editdeveloperinfo.auth_type===1">
<el-form-item label-width="110px" label="APP_ID">
<el-input :disabled='isedit' v-model="editdeveloperinfo.email"></el-input>
<el-input :disabled='isedit' v-model="editdeveloperinfo.email"/>
</el-form-item>
<el-form-item label-width="110px" label="password">
<el-input v-model="editdeveloperinfo.password" :placeholder="placeholder"></el-input>
<el-input v-model="editdeveloperinfo.password" :placeholder="placeholder"/>
</el-form-item>
</div>
<el-form-item label-width="110px" label="设备数量">
<el-input v-model="editdeveloperinfo.usable_number"></el-input>
<el-input v-model="editdeveloperinfo.usable_number"/>
</el-form-item>
<el-form-item label-width="110px" label="备注">
<el-input v-model="editdeveloperinfo.description"></el-input>
<el-input v-model="editdeveloperinfo.description"/>
</el-form-item>
<div style="">
<el-button @click="updateorcreate">添加</el-button>
@ -753,15 +753,13 @@
<style scoped>
.el-main {
margin: 10px auto 100px;
width: 1166px;
margin: 20px auto 100px;
width: 1266px;
position: relative;
padding-bottom: 1px;
background-color: #bfe7f9;
color: #9b9b9b;
-webkit-font-smoothing: antialiased;
border-radius: 1%;
}
</style>

@ -441,11 +441,10 @@
<style scoped>
.el-main {
margin: 10px auto 100px;
width: 1166px;
margin: 20px auto 100px;
width: 1266px;
position: relative;
padding-bottom: 1px;
background-color: #bfe7f9;
color: #9b9b9b;
-webkit-font-smoothing: antialiased;
border-radius: 1%;

@ -140,11 +140,8 @@
<style scoped>
.el-main {
margin: 10px auto 100px;
width: 1166px;
position: relative;
padding-bottom: 1px;
background-color: #bfe7f9;
color: #9b9b9b;
-webkit-font-smoothing: antialiased;
border-radius: 1%;
@ -153,8 +150,8 @@
.user-info {
position: relative;
text-align: center;
margin-bottom: 60px;
margin-top: 46px;
margin: 46px auto 100px;
width: 1266px;
}
.avatar {

@ -192,7 +192,6 @@
action="#"
accept=".png , .jpg , .jpeg"
:before-upload="upload_three">
<el-tooltip v-if="user_certification.three" placement="top">
<div slot="content">上传<i style="color: #2abb9d!important;">手持身份证</i>照片</div>
<img :src="user_certification.three"
@ -436,8 +435,7 @@
float: left;
width: 200px;
height: 166px;
background-color: #d1eef9;
background-color: #c2dcf1;
}
.avatar-uploader .el-upload {
@ -453,7 +451,6 @@
}
.avatar-uploader-icon {
/*font-size: 28px;*/
color: #8c939d;
width: 158px;
height: 158px;

@ -1,7 +1,7 @@
<template>
<div>
<el-form ref="form" :model="form">
<el-form ref="form" :model="form" label-width="90px">
<el-form-item label="当前密码">
<el-row :gutter="36">
<el-col :span="18">
@ -30,7 +30,7 @@
<el-form-item>
<el-row :gutter="36">
<el-col :span="24">
<el-col :span="20">
<el-button type="primary" @click="updatepasswd">更新密码</el-button>
</el-col>
</el-row>
@ -88,17 +88,11 @@
margin: 0 auto;
}
.el-form-item .el-button {
.el-button {
margin-top: 20px;
max-width: 260px;
width: 100%;
height: 50px;
/*margin-left: 40px;*/
}
/deep/ .el-form-item__label {
width: 90px;
}
</style>

@ -1,10 +1,10 @@
<template>
<div>
<el-form ref="form" :model="userinfo">
<el-form ref="form" :model="userinfo" label-width="90px">
<el-form-item label="用户名">
<el-row :gutter="36">
<el-col :span="13">
<el-col :span="16">
<el-input v-model="userinfo.username" :readonly="edituser_name !== true"
prefix-icon="el-icon-user" placeholder="用户名" ref="user_name"
clearable/>
@ -14,7 +14,7 @@
<el-button icon="el-icon-edit" @click="changeUsernameValue">
</el-button>
</el-col>
<el-col :span="4" v-if="edituser_name === true">
<el-col :span="5" v-if="edituser_name === true">
<el-button type="success" @click="saveUsername" plain
class="save-button">
保存
@ -27,7 +27,7 @@
<el-form-item label="手机号码">
<el-row :gutter="36">
<el-col :span="13">
<el-col :span="16">
<el-input v-model="userinfo.mobile" ref="phone" :readonly="editphone !== true"
prefix-icon="el-icon-mobile" placeholder="手机" maxlength="11" clearable/>
</el-col>
@ -35,7 +35,7 @@
<el-button icon="el-icon-edit" @click="changePhoneValue">
</el-button>
</el-col>
<el-col :span="4" v-if="editphone === true">
<el-col :span="5" v-if="editphone === true">
<el-button type="success" @click="savePhone" plain
class="save-button">
保存
@ -46,7 +46,7 @@
<el-form-item label="图片验证码" style="height: 40px" v-if="editphone === true && cptch.cptch_image">
<el-row style="height: 40px" :gutter="36">
<el-col :span="10">
<el-col :span="14">
<el-input placeholder="请输入图片验证码" v-model="userinfo.authcode" maxlength="6" clearable/>
</el-col>
<el-col :span="8">
@ -61,11 +61,11 @@
<el-form-item label="手机验证码" v-if="editphone === true">
<el-row :gutter="36">
<el-col :span="10">
<el-col :span="16">
<el-input v-model="userinfo.auth_key" prefix-icon="el-icon-mobile" placeholder="验证码"
maxlength="6" clearable/>
</el-col>
<el-col :span="8">
<el-col :span="7">
<el-button type="info" @click="getsmsemailcode('sms',userinfo.mobile)" plain
class="save-button">
获取验证码
@ -78,7 +78,7 @@
<el-form-item label="邮箱地址">
<el-row :gutter="36">
<el-col :span="13">
<el-col :span="16">
<el-input v-model="userinfo.email" ref="email" :readonly="editemail !== true"
prefix-icon="el-icon-bank-card" placeholder="邮箱" maxlength="20" clearable/>
</el-col>
@ -86,7 +86,7 @@
<el-button icon="el-icon-edit" @click="changeemailValue">
</el-button>
</el-col>
<el-col :span="4" v-if="editemail === true">
<el-col :span="5" v-if="editemail === true">
<el-button type="success" @click="saveemail" plain
class="save-button">
保存
@ -98,7 +98,7 @@
<el-form-item label="图片验证码" style="height: 40px" v-if="editemail === true && cptch.cptch_image">
<el-row style="height: 40px" :gutter="36">
<el-col :span="10">
<el-col :span="14">
<el-input placeholder="请输入图片验证码" v-model="userinfo.authcode" maxlength="6" clearable/>
</el-col>
<el-col :span="8">
@ -113,11 +113,11 @@
<el-form-item label="邮箱验证码" v-if="editemail === true">
<el-row :gutter="36">
<el-col :span="10">
<el-col :span="16">
<el-input v-model="userinfo.auth_key" prefix-icon="el-icon-mobile" placeholder="验证码"
maxlength="6" clearable/>
</el-col>
<el-col :span="8">
<el-col :span="7">
<el-button type="info" @click="getsmsemailcode('email',userinfo.email)" plain
class="save-button">
获取验证码
@ -130,7 +130,7 @@
<el-form-item label="下载域名">
<el-row :gutter="36">
<el-col :span="13">
<el-col :span="16">
<el-input v-model="userinfo.domain_name" :readonly="editdomain_name !== true" ref="domain_name"
prefix-icon="el-icon-download"
placeholder="下载页域名" clearable/>
@ -139,7 +139,7 @@
<el-button icon="el-icon-edit" @click="changeDomainValue">
</el-button>
</el-col>
<el-col :span="4" v-if="editdomain_name === true">
<el-col :span="5" v-if="editdomain_name === true">
<el-button type="success" @click="saveDomain" plain
class="save-button">
保存
@ -150,7 +150,7 @@
<el-form-item label="职位">
<el-row :gutter="36">
<el-col :span="13">
<el-col :span="16">
<el-input v-model="userinfo.job" ref="position" :readonly="editposition !== true"
prefix-icon="el-icon-postcard" placeholder="职位" clearable/>
</el-col>
@ -158,7 +158,7 @@
<el-button icon="el-icon-edit" @click="changePositionValue">
</el-button>
</el-col>
<el-col :span="4" v-if="editposition === true">
<el-col :span="5" v-if="editposition === true">
<el-button type="success" @click="savePositionValue" plain
class="save-button">
保存
@ -363,9 +363,6 @@
margin: 0 auto;
}
/deep/ .el-form-item__label {
width: 90px;
}
.el-button {
padding: 0;

@ -1,5 +1,5 @@
<template>
<el-main style="text-align:center">
<el-main>
<h2 v-if="is_admin_storage">管理员存储您配置的存储将决定其他用户配置的默认存储请谨慎修改</h2>
<el-dialog :title="title" :visible.sync="dialogstorageVisible" :destroy-on-close="true"
:close-on-click-modal="false">
@ -9,38 +9,38 @@
<el-form-item label-width="100px" label="存储类型">
<el-select :disabled='disabled' v-model="editstorageinfo.storage_type" placeholder="存储类型"
style="margin-left: -100px">
<el-option v-for="st in storage_list" :key="st.id" :label="st.name" :value="st.id"></el-option>
<el-option v-for="st in storage_list" :key="st.id" :label="st.name" :value="st.id"/>
</el-select>
</el-form-item>
<div v-if="editstorageinfo.storage_type">
<el-form-item label-width="110px" label="存储名称">
<el-input :disabled='disabled' v-model="editstorageinfo.name"></el-input>
<el-input :disabled='disabled' v-model="editstorageinfo.name"/>
</el-form-item>
<el-form-item label-width="110px" label="key">
<el-input :disabled='disabled' v-model="editstorageinfo.access_key"></el-input>
<el-input :disabled='disabled' v-model="editstorageinfo.access_key"/>
</el-form-item>
<el-form-item label-width="110px" label="secret">
<el-input :disabled='disabled' v-model="editstorageinfo.secret_key"></el-input>
<el-input :disabled='disabled' v-model="editstorageinfo.secret_key"/>
</el-form-item>
<el-form-item label-width="110px" label="bucket_name">
<el-input :disabled='disabled' v-model="editstorageinfo.bucket_name"></el-input>
<el-input :disabled='disabled' v-model="editstorageinfo.bucket_name"/>
</el-form-item>
<el-form-item label-width="110px" label="下载域名">
<el-input :disabled='disabled' v-model="editstorageinfo.domain_name"></el-input>
<el-input :disabled='disabled' v-model="editstorageinfo.domain_name"/>
</el-form-item>
<div v-if="editstorageinfo.storage_type === 2">
<el-form-item label-width="110px" label="sts_role_arn">
<el-input :disabled='disabled'
v-model="editstorageinfo.sts_role_arn"></el-input>
v-model="editstorageinfo.sts_role_arn"/>
</el-form-item>
<el-form-item label-width="110px" label="endpoint">
<el-input :disabled='disabled'
v-model="editstorageinfo.endpoint"></el-input>
v-model="editstorageinfo.endpoint"/>
</el-form-item>
<el-form-item label-width="110px" label="下载授权方式">
@ -49,7 +49,7 @@
style="width: 80%" :disabled="disabled">
<el-option v-for="st in editstorageinfo.download_auth_type_choices" :key="st.id"
:label="st.name"
:value="st.id"></el-option>
:value="st.id"/>
</el-select>
<el-form-item label-width="120px" style="margin-top: 10px;margin-left: 70px;width: 60%"
@ -64,7 +64,7 @@
</div>
<el-form-item label-width="110px" label="备注">
<el-input :disabled='disabled' v-model="editstorageinfo.description"></el-input>
<el-input :disabled='disabled' v-model="editstorageinfo.description"/>
</el-form-item>
<el-button v-if="!disabled" @click="updateorcreate">保存</el-button>
@ -76,8 +76,6 @@
<el-tabs v-model="activeName" @tab-click="handleClick" tab-position="top" type="border-card">
<el-tab-pane label="存储选择" name="change">
<el-select v-model="use_storage_id" filterable :placeholder="selectlabel" @change="select_storage">
<el-option-group
v-for="storage_group in fstorage_lists"
@ -103,47 +101,46 @@
强制迁移忽略数据迁移失败错误可能会导致数据丢失
</el-button>
</div>
<el-divider></el-divider>
<el-divider/>
<el-form v-if="storageinfo.id && storageinfo.id !==-1" ref="storageinfoform" :model="storageinfo"
label-width="80px" style="width: 39%;margin:0 auto;">
<el-form-item label-width="110px" label="存储类型">
<el-select :disabled='Sdisabled' v-model="storageinfo.storage_type" placeholder="存储类型"
style="margin-left: -60px">
<el-option v-for="st in storage_list" :key="st.id" :label="st.name"
:value="st.id"></el-option>
:value="st.id"/>
</el-select>
</el-form-item>
<div v-if="storageinfo.storage_type">
<el-form-item label-width="110px" label="存储名称">
<el-input :disabled='Sdisabled' v-model="storageinfo.name"></el-input>
<el-input :disabled='Sdisabled' v-model="storageinfo.name"/>
</el-form-item>
<el-form-item label-width="110px" label="key">
<el-input :disabled='Sdisabled' v-model="storageinfo.access_key"></el-input>
<el-input :disabled='Sdisabled' v-model="storageinfo.access_key"/>
</el-form-item>
<el-form-item label-width="110px" label="secret">
<el-input :disabled='Sdisabled' v-model="storageinfo.secret_key"></el-input>
<el-input :disabled='Sdisabled' v-model="storageinfo.secret_key"/>
</el-form-item>
<el-form-item label-width="110px" label="bucket_name">
<el-input :disabled='Sdisabled' v-model="storageinfo.bucket_name"></el-input>
<el-input :disabled='Sdisabled' v-model="storageinfo.bucket_name"/>
</el-form-item>
<el-form-item label-width="110px" label="下载域名">
<el-input :disabled='Sdisabled' v-model="storageinfo.domain_name"></el-input>
<el-input :disabled='Sdisabled' v-model="storageinfo.domain_name"/>
</el-form-item>
<div v-if="storageinfo.storage_type === 2">
<el-form-item label-width="110px" label="sts_role_arn">
<el-input :disabled='Sdisabled'
v-model="storageinfo.sts_role_arn"></el-input>
v-model="storageinfo.sts_role_arn"/>
</el-form-item>
<el-form-item label-width="110px" label="endpoint">
<el-input :disabled='Sdisabled'
v-model="storageinfo.endpoint"></el-input>
v-model="storageinfo.endpoint"/>
</el-form-item>
<el-form-item label-width="110px" label="下载授权方式">
@ -152,7 +149,7 @@
style="width: 100%" :disabled="disabled">
<el-option v-for="st in storageinfo.download_auth_type_choices" :key="st.id"
:label="st.name"
:value="st.id"></el-option>
:value="st.id"/>
</el-select>
<el-form-item label-width="120px" style="margin-top: 10px;width: 100%" label="CDN鉴权主KEY"
@ -165,7 +162,7 @@
</div>
<el-form-item label-width="110px" label="备注">
<el-input :disabled='Sdisabled' v-model="storageinfo.description"></el-input>
<el-input :disabled='Sdisabled' v-model="storageinfo.description"/>
</el-form-item>
</div>
@ -194,8 +191,7 @@
</el-table-column>
<el-table-column
prop="domain_name"
label="下载域名"
width="180">
label="下载域名">
</el-table-column>
<el-table-column
prop="bucket_name"
@ -211,13 +207,12 @@
</el-table-column>
<el-table-column
prop="description"
label="备注"
width="200">
label="备注">
</el-table-column>
<el-table-column
fixed="right"
label="操作"
>
width="120">
<template slot-scope="scope">
<div v-if="scope.row.id === org_storage_id">
<el-button v-if="scope.row.id === org_storage_id" @click="showstorage(scope.row)"
@ -241,38 +236,38 @@
<el-select v-model="editstorageinfo.storage_type" placeholder="存储类型"
style="margin-left: -100px">
<el-option v-for="st in storage_list" :key="st.id" :label="st.name"
:value="st.id"></el-option>
:value="st.id"/>
</el-select>
</el-form-item>
<div v-if="editstorageinfo.storage_type">
<el-form-item label-width="110px" label="存储名称">
<el-input v-model="editstorageinfo.name"></el-input>
<el-input v-model="editstorageinfo.name"/>
</el-form-item>
<el-form-item label-width="110px" label="key">
<el-input v-model="editstorageinfo.access_key"></el-input>
<el-input v-model="editstorageinfo.access_key"/>
</el-form-item>
<el-form-item label-width="110px" label="secret">
<el-input v-model="editstorageinfo.secret_key"></el-input>
<el-input v-model="editstorageinfo.secret_key"/>
</el-form-item>
<el-form-item label-width="110px" label="bucket_name">
<el-input v-model="editstorageinfo.bucket_name"></el-input>
<el-input v-model="editstorageinfo.bucket_name"/>
</el-form-item>
<el-form-item label-width="110px" label="下载域名">
<el-input v-model="editstorageinfo.domain_name"></el-input>
<el-input v-model="editstorageinfo.domain_name"/>
</el-form-item>
<div v-if="editstorageinfo.storage_type === 2">
<el-form-item label-width="110px" label="sts_role_arn">
<el-input
v-model="editstorageinfo.sts_role_arn"></el-input>
v-model="editstorageinfo.sts_role_arn"/>
</el-form-item>
<el-form-item label-width="110px" label="endpoint">
<el-input
v-model="editstorageinfo.endpoint"></el-input>
v-model="editstorageinfo.endpoint"/>
</el-form-item>
<el-form-item label-width="110px" label="下载授权方式">
@ -281,7 +276,7 @@
style="width: 80%">
<el-option v-for="st in editstorageinfo.download_auth_type_choices" :key="st.id"
:label="st.name"
:value="st.id"></el-option>
:value="st.id"/>
</el-select>
<el-form-item label-width="120px" style="margin-top: 10px;margin-left: 70px;width: 60%"
@ -296,7 +291,7 @@
</div>
<el-form-item label-width="110px" label="备注">
<el-input v-model="editstorageinfo.description"></el-input>
<el-input v-model="editstorageinfo.description"/>
</el-form-item>
<el-button @click="updateorcreate">校验并保存</el-button>
@ -544,11 +539,11 @@
<style scoped>
.el-main {
margin: 10px auto 100px;
width: 1166px;
text-align: center;
margin: 20px auto 100px;
width: 1266px;
position: relative;
padding-bottom: 1px;
background-color: #bfe7f9;
color: #9b9b9b;
-webkit-font-smoothing: antialiased;
border-radius: 1%;

@ -13,6 +13,7 @@ import store from "@/store";
import {
Aside,
Avatar,
Backtop,
Breadcrumb,
BreadcrumbItem,
Button,
@ -46,6 +47,7 @@ import {
Pagination,
Popover,
Progress,
Radio,
RadioButton,
RadioGroup,
Row,
@ -60,8 +62,7 @@ import {
Timeline,
TimelineItem,
Tooltip,
Upload,
Radio,
Upload
} from "element-ui";
import VueLazyload from 'vue-lazyload'
// 引入点击复制组件
@ -144,6 +145,7 @@ Vue.use(Switch);
Vue.use(Footer);
Vue.use(InputNumber);
Vue.use(Radio);
Vue.use(Backtop);
Vue.prototype.$message = Message;
Vue.prototype.$notify = Notification;
Vue.prototype.$loading = Loading.service;

Loading…
Cancel
Save