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