parent
d1a5d69ac8
commit
d8b124c1a7
@ -0,0 +1,470 @@ |
|||||||
|
<template> |
||||||
|
<el-main> |
||||||
|
|
||||||
|
<el-dialog |
||||||
|
:close-on-click-modal="false" |
||||||
|
:close-on-press-escape="false" |
||||||
|
:visible.sync="configVisible" |
||||||
|
center |
||||||
|
title="下载页部署配置" |
||||||
|
width="666px"> |
||||||
|
|
||||||
|
|
||||||
|
<el-card v-for="info in config_lists" :key="info.key" class="box-card" shadow="hover" |
||||||
|
style="margin-bottom: 20px"> |
||||||
|
<div slot="header" class="clearfix"> |
||||||
|
<span><el-tag size="medium" type="info">配置KEY</el-tag> <el-tag size="medium">{{ info.key }}</el-tag></span> |
||||||
|
<div style="float: right"> |
||||||
|
<el-switch |
||||||
|
v-model="info.value" |
||||||
|
active-color="#13ce66" |
||||||
|
active-text="启用" |
||||||
|
active-value="true" |
||||||
|
inactive-color="#ff4949" |
||||||
|
inactive-text="关闭" |
||||||
|
inactive-value="false" |
||||||
|
@change="changeConfig(info)"> |
||||||
|
</el-switch> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<el-tag size="medium" type="info">描述信息</el-tag> |
||||||
|
{{ info.title }} |
||||||
|
</el-card> |
||||||
|
<el-divider></el-divider> |
||||||
|
<el-card style="margin-top: 20px"> |
||||||
|
<div slot="header" class="clearfix"> |
||||||
|
<el-tag size="medium" type="success">下载页源码及操作文档</el-tag> |
||||||
|
</div> |
||||||
|
<div v-if="short_download_list.length>0"> |
||||||
|
<div style="margin: 10px" v-for="short_download_uri in short_download_list" :key="short_download_uri.key"> |
||||||
|
<el-tag size="medium" type="info">{{short_download_uri.title}}</el-tag> |
||||||
|
<el-link style="margin-left: 10px" :href="short_download_uri.value" target="_blank">点击下载</el-link> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
|
||||||
|
<div slot="footer" class="dialog-footer"> |
||||||
|
<el-button @click="updateConfig">恢复默认值</el-button> |
||||||
|
<el-button @click="configVisible=false">取消</el-button> |
||||||
|
</div> |
||||||
|
|
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
<el-dialog |
||||||
|
:close-on-click-modal="false" |
||||||
|
:close-on-press-escape="false" |
||||||
|
:visible.sync="addCnameVisible" |
||||||
|
center |
||||||
|
title="添加下载页服务器域名" |
||||||
|
width="800px"> |
||||||
|
|
||||||
|
<el-steps :active="p_active" finish-status="success" :align-center="true"> |
||||||
|
<el-step title="添加服务器域名"></el-step> |
||||||
|
<el-step title="验证服务器域名所有权"></el-step> |
||||||
|
<el-step title="添加成功"></el-step> |
||||||
|
</el-steps> |
||||||
|
|
||||||
|
<el-container> |
||||||
|
|
||||||
|
<div v-if="p_active===0" style="margin-top: 20px"> |
||||||
|
<el-tag style="margin: 10px 5px">1.如果是cdn等含有CNAME,直接添加cdn的 CNAME 值</el-tag> |
||||||
|
<el-tag style="margin: 10px 5px">2.如果是服务器,需要将域名解析到服务器,然后添加该解析的域名</el-tag> |
||||||
|
<div style="width: 600px;text-align: center;margin: auto"> |
||||||
|
|
||||||
|
<el-form ref="form" :model="addSerInfo" label-width="120px"> |
||||||
|
|
||||||
|
<el-form-item label="下载服务器域名"> |
||||||
|
<el-input v-model="addSerInfo.domain_record" placeholder="cdn的cname或者服务器的域名,必填"></el-input> |
||||||
|
</el-form-item> |
||||||
|
|
||||||
|
<el-form-item label="下载服务器地址"> |
||||||
|
<el-input v-model="addSerInfo.ip_address" placeholder="如果有服务器地址,添加服务器ip,否则填写服务器域名"></el-input> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="备注"> |
||||||
|
<el-input type="textarea" v-model="addSerInfo.description"></el-input> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<div style="margin-top: 20px;"> |
||||||
|
<el-button type="primary" @click="addCnameSer">下一步</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<div v-else-if="p_active===1" style="margin-top: 30px;text-align: center"> |
||||||
|
|
||||||
|
请联系域名管理员,前往 <strong>{{ cnameInfo.domain_record }}</strong> 域名 DNS 管理后台添加如下 {{ cnameInfo.r_type }} 记录。 |
||||||
|
<el-table |
||||||
|
:data="domain_tData" |
||||||
|
border |
||||||
|
stripe |
||||||
|
v-loading="loading" |
||||||
|
style="width: 100%;margin-top: 20px"> |
||||||
|
<el-table-column |
||||||
|
align="center" |
||||||
|
label="记录类型" |
||||||
|
prop="r_type" |
||||||
|
width="100"> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
align="center" |
||||||
|
label="主机记录" |
||||||
|
prop="host_r" |
||||||
|
> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-tooltip content="点击复制到剪贴板"> |
||||||
|
<el-link v-if="scope.row.host_r" v-clipboard:copy="scope.row.host_r" |
||||||
|
v-clipboard:success="copy_success" |
||||||
|
:underline="false">{{ scope.row.host_r }} |
||||||
|
</el-link> |
||||||
|
</el-tooltip> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
align="center" |
||||||
|
label="记录值" |
||||||
|
prop="cname_r" |
||||||
|
width="300"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-tooltip content="点击复制到剪贴板"> |
||||||
|
<el-link v-if="scope.row.cname_r" v-clipboard:copy="scope.row.cname_r" |
||||||
|
v-clipboard:success="copy_success" |
||||||
|
:underline="false">{{ scope.row.cname_r }} |
||||||
|
</el-link> |
||||||
|
</el-tooltip> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
<el-alert :closable="false" |
||||||
|
show-icon |
||||||
|
style="margin-top: 30px" |
||||||
|
title="请在域名DNS配置成功后,点击“下一步”按钮" |
||||||
|
type="warning"/> |
||||||
|
|
||||||
|
<div style="margin-top: 20px;text-align: center;"> |
||||||
|
<el-button type="primary" @click="p_active=0">上一步</el-button> |
||||||
|
<el-button type="primary" @click="checkCnameSer" :disabled="loading">下一步</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-container> |
||||||
|
|
||||||
|
|
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
|
||||||
|
<div> |
||||||
|
<el-input |
||||||
|
v-model="search_key" |
||||||
|
clearable |
||||||
|
placeholder="输入下载服务器域名" |
||||||
|
style="width: 30%;margin-right: 30px;margin-bottom: 5px"/> |
||||||
|
<el-button icon="el-icon-search" type="primary" @click="handleCurrentChange(1)"> |
||||||
|
搜索 |
||||||
|
</el-button> |
||||||
|
<div style="float: right"> |
||||||
|
|
||||||
|
|
||||||
|
<el-tooltip content="下载页配置,可以定制部署私有下载页"> |
||||||
|
<el-button plain type="primary" @click="configFun"> |
||||||
|
下载页配置 |
||||||
|
</el-button> |
||||||
|
</el-tooltip> |
||||||
|
<el-button plain type="primary" @click="addDownloadSer"> |
||||||
|
添加下载页服务器 |
||||||
|
</el-button> |
||||||
|
</div> |
||||||
|
|
||||||
|
<el-table |
||||||
|
v-loading="loading" |
||||||
|
:data="cname_info_list" |
||||||
|
border |
||||||
|
stripe |
||||||
|
style="width: 100%"> |
||||||
|
|
||||||
|
<el-table-column |
||||||
|
align="center" |
||||||
|
fixed |
||||||
|
label="下载服务器域名" |
||||||
|
prop="domain_name"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-tooltip content="点击复制到剪贴板"> |
||||||
|
<el-link v-if="scope.row.domain_record" v-clipboard:copy="scope.row.domain_record" |
||||||
|
v-clipboard:success="copy_success" |
||||||
|
:underline="false">{{ scope.row.domain_record }} |
||||||
|
</el-link> |
||||||
|
</el-tooltip> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
|
||||||
|
<el-table-column |
||||||
|
align="center" |
||||||
|
label="下载服务器地址" |
||||||
|
prop="ip_address"> |
||||||
|
</el-table-column> |
||||||
|
|
||||||
|
<el-table-column |
||||||
|
align="center" |
||||||
|
label="状态" |
||||||
|
prop="is_enable" |
||||||
|
width="110"> |
||||||
|
|
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-tooltip v-if="scope.row.is_enable === true" content="已经绑定成功" placement="left-start"> |
||||||
|
<el-button size="small" type="success">成功 |
||||||
|
</el-button> |
||||||
|
</el-tooltip> |
||||||
|
<el-tooltip v-else content="点击激活服务器域名绑定信息" placement="left-start"> |
||||||
|
<el-button size="small" type="warning" @click="continueBind(scope.row)">继续绑定 |
||||||
|
</el-button> |
||||||
|
</el-tooltip> |
||||||
|
|
||||||
|
</template> |
||||||
|
|
||||||
|
</el-table-column> |
||||||
|
|
||||||
|
<el-table-column |
||||||
|
:formatter="format_create_time" |
||||||
|
align="center" |
||||||
|
label="域名绑定时间" |
||||||
|
prop="created_time" |
||||||
|
width="170" |
||||||
|
> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
align="center" |
||||||
|
label="备注" |
||||||
|
prop="description"> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
align="center" |
||||||
|
label="操作" |
||||||
|
prop="is_enable" |
||||||
|
width="100"> |
||||||
|
|
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-tooltip content="删除该下载页服务器" placement="left-start"> |
||||||
|
<el-button size="small" type="danger" @click="delCnameSer(scope.row)">删除 |
||||||
|
</el-button> |
||||||
|
</el-tooltip> |
||||||
|
|
||||||
|
</template> |
||||||
|
|
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
<div style="margin-top: 20px;margin-bottom: 20px"> |
||||||
|
<el-pagination |
||||||
|
:current-page.sync="pagination.currentPage" |
||||||
|
:page-size="pagination.pagesize" |
||||||
|
:page-sizes="[10, 20, 50, 100]" |
||||||
|
:total="pagination.total" |
||||||
|
layout="total,sizes, prev, pager, next" |
||||||
|
@size-change="handleSizeChange" |
||||||
|
@current-change="handleCurrentChange"> |
||||||
|
</el-pagination> |
||||||
|
</div> |
||||||
|
</el-main> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
|
||||||
|
import {dCnameInfoFun, personalConfigInfo} from "@/restful"; |
||||||
|
import {getUserInfoFun} from '@/utils' |
||||||
|
import {format_time} from "@/utils/base/utils"; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: "FirUserDomain", |
||||||
|
data() { |
||||||
|
return { |
||||||
|
addSerInfo: {}, |
||||||
|
cnameInfo: {}, |
||||||
|
domain_tData: [], |
||||||
|
p_active: 0, |
||||||
|
cname_info_list: [], |
||||||
|
search_key: "", |
||||||
|
pagination: {"currentPage": 1, "total": 0, "pagesize": 10}, |
||||||
|
loading: false, |
||||||
|
configVisible: false, |
||||||
|
addCnameVisible: false, |
||||||
|
config_lists: [], |
||||||
|
short_download_list: [] |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
continueBind(cname_info) { |
||||||
|
this.addSerInfo = cname_info |
||||||
|
this.addCnameVisible = true |
||||||
|
this.addCnameSer() |
||||||
|
}, |
||||||
|
delCnameSer(cname_info) { |
||||||
|
this.$confirm('若下载域名绑定到该解析,同时也会删除绑定的下载域名,是否继续删除?', '警告', { |
||||||
|
confirmButtonText: '确定', |
||||||
|
cancelButtonText: '取消', |
||||||
|
type: 'warning' |
||||||
|
}).then(() => { |
||||||
|
dCnameInfoFun(data => { |
||||||
|
if (data.code === 1000) { |
||||||
|
this.$message.success("删除成功") |
||||||
|
this.get_data_from_tabname(); |
||||||
|
} else { |
||||||
|
this.$message.error("操作失败了 " + data.msg) |
||||||
|
} |
||||||
|
}, { |
||||||
|
methods: 'DELETE', |
||||||
|
data: {'domain_record': cname_info.domain_record} |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
checkCnameSer() { |
||||||
|
this.loading=true |
||||||
|
dCnameInfoFun(data => { |
||||||
|
this.loading=false |
||||||
|
if (data.code === 1000) { |
||||||
|
this.$message.success(this.addSerInfo.domain_record + " 添加成功") |
||||||
|
this.get_data_from_tabname(); |
||||||
|
this.addDownloadSer() |
||||||
|
this.addCnameVisible = false |
||||||
|
} else { |
||||||
|
this.$message.error("操作失败了 " + data.msg) |
||||||
|
} |
||||||
|
}, { |
||||||
|
methods: 'PUT', |
||||||
|
data: {'act': 'check', 'domain_record': this.addSerInfo.domain_record} |
||||||
|
}) |
||||||
|
}, |
||||||
|
addCnameSer() { |
||||||
|
let domain_record = this.addSerInfo.domain_record |
||||||
|
let ip_address = this.addSerInfo.ip_address |
||||||
|
if (domain_record && domain_record.length > 6 && ip_address && ip_address.length > 6) { |
||||||
|
dCnameInfoFun(data => { |
||||||
|
if (data.code === 1000) { |
||||||
|
this.p_active = 1 |
||||||
|
this.cnameInfo = data.data |
||||||
|
this.domain_tData = [this.cnameInfo] |
||||||
|
} else { |
||||||
|
this.$message.error("操作失败了 " + data.msg) |
||||||
|
} |
||||||
|
}, { |
||||||
|
methods: 'POST', |
||||||
|
data: this.addSerInfo |
||||||
|
}) |
||||||
|
} else { |
||||||
|
this.$message.error("参数有误") |
||||||
|
} |
||||||
|
|
||||||
|
}, |
||||||
|
addDownloadSer() { |
||||||
|
this.addSerInfo = {} |
||||||
|
this.cnameInfo = {} |
||||||
|
this.p_active = 0 |
||||||
|
this.addCnameVisible = true |
||||||
|
}, |
||||||
|
configFun() { |
||||||
|
personalConfigInfo(data => { |
||||||
|
if (data.code === 1000) { |
||||||
|
this.short_download_list = data.data |
||||||
|
} else { |
||||||
|
this.$message.error("获取数据失败了 " + data.msg) |
||||||
|
} |
||||||
|
}, { |
||||||
|
methods: 'GET' |
||||||
|
}, 'short_download_uri') |
||||||
|
|
||||||
|
|
||||||
|
personalConfigInfo(data => { |
||||||
|
if (data.code === 1000) { |
||||||
|
this.config_lists = data.data |
||||||
|
this.configVisible = true |
||||||
|
} else { |
||||||
|
this.$message.error("获取数据失败了 " + data.msg) |
||||||
|
} |
||||||
|
}, { |
||||||
|
methods: 'GET' |
||||||
|
}, 'preview_route') |
||||||
|
}, |
||||||
|
changeConfig(info) { |
||||||
|
personalConfigInfo(data => { |
||||||
|
if (data.code === 1000) { |
||||||
|
this.$message.success("操作成功") |
||||||
|
this.configFun() |
||||||
|
} else { |
||||||
|
this.$message.error("操作失败了 " + data.msg) |
||||||
|
} |
||||||
|
}, { |
||||||
|
methods: 'PUT', data: {config_key: info.key, config_value: info.value} |
||||||
|
}, 'preview_route') |
||||||
|
}, |
||||||
|
updateConfig() { |
||||||
|
personalConfigInfo(data => { |
||||||
|
if (data.code === 1000) { |
||||||
|
this.$message.success("操作成功") |
||||||
|
this.configFun() |
||||||
|
} else { |
||||||
|
this.$message.error("操作失败了 " + data.msg) |
||||||
|
} |
||||||
|
}, { |
||||||
|
methods: 'DELETE' |
||||||
|
}, 'preview_route') |
||||||
|
}, |
||||||
|
|
||||||
|
copy_success() { |
||||||
|
this.$message.success('复制剪切板成功'); |
||||||
|
}, |
||||||
|
handleSizeChange(val) { |
||||||
|
this.pagination.pagesize = val; |
||||||
|
this.get_data_from_tabname({ |
||||||
|
"size": this.pagination.pagesize, |
||||||
|
"page": 1 |
||||||
|
}) |
||||||
|
}, |
||||||
|
handleCurrentChange(val) { |
||||||
|
this.pagination.currentPage = val; |
||||||
|
this.get_data_from_tabname({ |
||||||
|
"size": this.pagination.pagesize, |
||||||
|
"page": this.pagination.currentPage |
||||||
|
}) |
||||||
|
}, |
||||||
|
|
||||||
|
get_data_from_tabname(data = {}) { |
||||||
|
data.search_key = this.search_key.replace(/^\s+|\s+$/g, ""); |
||||||
|
this.UserCnameInfoFun(data) |
||||||
|
}, |
||||||
|
UserCnameInfoFun(params) { |
||||||
|
this.loading = true; |
||||||
|
dCnameInfoFun(data => { |
||||||
|
if (data.code === 1000) { |
||||||
|
this.cname_info_list = data.data; |
||||||
|
this.pagination.total = data.count; |
||||||
|
|
||||||
|
} else { |
||||||
|
this.$message.error("域名绑定信息获取失败") |
||||||
|
} |
||||||
|
this.loading = false; |
||||||
|
}, {methods: 'GET', data: params}) |
||||||
|
}, |
||||||
|
|
||||||
|
format_create_time(row) { |
||||||
|
return format_time(row.created_time) |
||||||
|
}, |
||||||
|
|
||||||
|
}, mounted() { |
||||||
|
getUserInfoFun(this); |
||||||
|
this.get_data_from_tabname(); |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
.el-main { |
||||||
|
margin: 20px auto 100px; |
||||||
|
width: 1166px; |
||||||
|
position: relative; |
||||||
|
padding-bottom: 1px; |
||||||
|
color: #9b9b9b; |
||||||
|
-webkit-font-smoothing: antialiased; |
||||||
|
border-radius: 1%; |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
@ -0,0 +1,32 @@ |
|||||||
|
# Generated by Django 3.2.3 on 2022-07-25 16:12 |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('api', '0006_auto_20220513_0843'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AlterField( |
||||||
|
model_name='domaincnameinfo', |
||||||
|
name='is_enable', |
||||||
|
field=models.BooleanField(default=False, verbose_name='是否启用该解析'), |
||||||
|
), |
||||||
|
migrations.AlterField( |
||||||
|
model_name='domaincnameinfo', |
||||||
|
name='domain_record', |
||||||
|
field=models.CharField(max_length=128, verbose_name='记录值'), |
||||||
|
), |
||||||
|
migrations.AddField( |
||||||
|
model_name='domaincnameinfo', |
||||||
|
name='user_ipk', |
||||||
|
field=models.IntegerField(default=0, verbose_name='用户ipk'), |
||||||
|
), |
||||||
|
migrations.AlterUniqueTogether( |
||||||
|
name='domaincnameinfo', |
||||||
|
unique_together={('user_ipk', 'domain_record')}, |
||||||
|
), |
||||||
|
] |
Loading…
Reference in new issue