实现我的站点信息的增删改查

This commit is contained in:
ngfchl
2022-12-27 22:25:45 +08:00
parent cffdbe8ea2
commit 99ce67558e
4 changed files with 327 additions and 34 deletions

View File

@@ -26,13 +26,15 @@ urlpatterns = [
path(r'site_data_api', views.site_data_api, name='site_data_api'),
path(r'sign_in_api', views.sign_in_api, name='sign_in_api'),
path(r'update_site_api', views.update_site_api, name='update_site_api'),
path(r'edit_site_api', views.edit_site_api, name='edit_site_api'),
path(r'remove_my_site', views.remove_my_site, name='remove_my_site'),
path(r'show_sign_api', views.show_sign_api, name='show_sign_api'),
path(r'site_sort_api', views.site_sort_api, name='site_sort_api'),
path(r'get_log_list', views.get_log_list, name='get_log_list'),
path(r'show_log_list', views.show_log_list, name='show_log_list'),
path(r'get_log_content', views.get_log_content, name='get_log_content'),
path(r'remove_log_api', views.remove_log_api, name='remove_log_api'),
path(r'get_site_list', views.get_site_list, name='get_site_list'),
path(r'edit_my_site', views.edit_my_site, name='edit_my_site'),
path(r'get_helper_license', views.get_helper_license, name='get_helper_license'),
path(r'downloading_status', views.downloading_status, name='downloading_status'),
path(r'do_sql', views.do_sql, name='do_sql'),

View File

@@ -532,7 +532,7 @@ def site_status_api(request):
logger.info(f'P龄{round(p_years, 4)}')
for my_site in my_site_list:
site_info_list = my_site.sitestatus_set.order_by('-pk').all()
logger.info(f'{my_site.site.name}: {len(site_info_list)}')
# logger.info(f'{my_site.site.name}: {len(site_info_list)}')
sign_in_support = my_site.site.sign_in_support and my_site.sign_in
if len(site_info_list) <= 0:
logger.info(f'{my_site.site.name}: 获取站点信息列表错误!')
@@ -893,12 +893,6 @@ def update_site_api(request):
).to_dict(), safe=False)
def edit_site_api(request):
return JsonResponse(data=CommonResponse.success(
msg='ok'
).to_dict(), safe=False)
def show_sign_api(request):
try:
my_site_id = request.GET.get('id')
@@ -1014,3 +1008,83 @@ def get_helper_license(request):
return JsonResponse(data=CommonResponse.error(
msg='License更新失败'
).to_dict(), safe=False)
def get_site_list(request):
site_id = request.GET.get('id')
logger.info(site_id)
if int(site_id) == 0:
site_list = [site for site in Site.objects.all().order_by('id').values('id', 'name') if
MySite.objects.filter(site=site.get('id')).count() < 1]
return JsonResponse(CommonResponse.success(data={
'site_list': site_list
}).to_dict(), safe=False)
else:
site_list = Site.objects.filter(id=site_id).order_by('id').values('id', 'name')
logger.info(site_list)
return JsonResponse(CommonResponse.success(data={
'site_list': list(site_list)
}).to_dict(), safe=False)
def edit_my_site(request):
if request.method == 'POST':
my_site_params = json.loads(request.body)
my_site_id = my_site_params.get('id')
site_id = my_site_params.get('site')
site = Site.objects.get(id=site_id)
my_site_params['site'] = site
logger.info(my_site_params)
if my_site_id == 0:
del my_site_params['id']
my_site = MySite.objects.create(**my_site_params)
return JsonResponse(CommonResponse.success(msg=f'{my_site.site.name} 信息添加成功!').to_dict(), safe=False)
else:
my_site_list = MySite.objects.filter(site_id=site_id)
if len(my_site_list) <= 0:
my_site_res = MySite.objects.update_or_create(id=my_site_id, defaults=my_site_params)
logger.info(my_site_res)
return JsonResponse(CommonResponse.success(
msg=f'{my_site_res[0].site.name} 信息更新成功!'
).to_dict(), safe=False)
return JsonResponse(data=CommonResponse.error(
msg=f'{my_site_list.first().site.name} 站点信息已存在,请勿重复添加!'
).to_dict(), safe=False)
else:
my_site_id = request.GET.get('id')
my_site_list = MySite.objects.filter(id=my_site_id)
if len(my_site_list) == 1:
my_site = my_site_list.values(
'id', 'site', 'sign_in', 'hr', 'search', 'user_id', 'passkey', 'user_agent', 'cookie', 'time_join'
).first()
return JsonResponse(CommonResponse.success(data={
'my_site': my_site
}).to_dict(), safe=False)
return JsonResponse(data=CommonResponse.error(
msg='参数有误,请确认后重试!!'
).to_dict(), safe=False)
def remove_my_site(request):
my_site_id = request.GET.get('id')
my_site_list = MySite.objects.filter(id=my_site_id)
if len(my_site_list) == 1:
try:
my_site = my_site_list.first().delete()
logger.info(my_site)
if my_site[0] == 1:
return JsonResponse(data=CommonResponse.success(
msg='站点信息删除成功!'
).to_dict(), safe=False)
return JsonResponse(data=CommonResponse.error(
msg='参数有误,请确认后重试!!'
).to_dict(), safe=False)
except:
logger.info(traceback.format_exc(3))
return JsonResponse(data=CommonResponse.error(
msg='参数有误,请确认后重试!!'
).to_dict(), safe=False)
return JsonResponse(data=CommonResponse.error(
msg='参数有误,请确认后重试!!'
).to_dict(), safe=False)

View File

@@ -7,7 +7,7 @@ function renderSize(value) {
var srcsize = parseFloat(value);
index = Math.floor(Math.log(srcsize) / Math.log(1024));
var size = srcsize / Math.pow(1024, index);
size = size.toFixed(3);//保留的小数位数
size = size.toFixed(2);//保留的小数位数
return size + ' ' + unitArr[index];
}
@@ -16,10 +16,17 @@ function shuffle() {
}
function numberFormat(value) {
if (('' + value).toLowerCase() == 'infinity') {
return value
}
// if (!isNaN(parseFloat(value))) {
// return value
// }
let param = {}
let k = 10000
let sizes = ['', 'W', 'E']
let i
if (value < k) {
param.value = value
param.unit = ''

View File

@@ -17,7 +17,11 @@
.site-logo:hover {
cursor: pointer;
transform: scale(1.5);
transition: all 0.6s;
transition: all 0.2s;
text-underline: #000b16;
color: orange;
margin-top: -25px;
}
.info-card {
@@ -82,7 +86,7 @@
<el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"
style="margin-bottom: 10px;float: right;text-align: right;">
<el-button size="mini" type="success" @click="addSite">添加
<el-button size="mini" type="success" @click="showAddMySite = true">添加
</el-button>
<el-input autofocus
prefix-icon="el-icon-search"
@@ -105,7 +109,12 @@
{# style="width: 16px;border-radius: 50%;margin-bottom: -5px;">#}
{# <br>#}
{# <a :href="site.url" target="blank" style="margin-top: -5px;">#}
<h3>数据汇总</h3>
<h3 style="text-align: left;">
数据汇总
<span v-text="'P龄'+ptData.total_data.p_years"
style="font-size: 14px;float: right;color: orange"></span>
</h3>
{# </a>#}
{# </div>#}
@@ -207,17 +216,26 @@
<el-card class="box-card info-card">
<div slot="header" class="clearfix">
<div style="float: left;text-align: center;margin-top: -5px;font-size: 14px;height: 32px;">
<img :src="site.icon" @click="updateSite(site.id)" class="site-logo"
style="width: 16px;border-radius: 50%;margin-bottom: -5px;"
title="点击更新站点信息">
<div style="float: left;text-align: center;margin-top: -5px;font-size: 12px;height: 28px;">
<el-tooltip content="点击打开站点" placement="top" effect="light">
<a :href="site.url" target="blank" style="margin-top: -5px;">
<img :src="site.icon"
{# @click="updateSite(site.id)" #}
class="site-logo"
style="width: 16px;border-radius: 50%;margin-bottom: -5px;"
title="点击打开站点">
</a>
</el-tooltip>
<br>
<a :href="site.url" target="blank" style="margin-top: -5px;">
<span v-text="site.name">{}</span>
</a>
<el-tooltip content="点击修改站点信息" placement="bottom" effect="light">
<el-link class="site-logo" title="点击修改站点信息" v-text="site.name"
type="success"
@click="editSite(site.id)" icon="el-icon-edit">
</el-link>
</el-tooltip>
</div>
<span style="font-size: 12px;float: right;">
<span style="font-size: 10px;float: right;">
<i class="el-icon-user-solid" v-text="' ' + site.class" style="color: indianred"
title="用户等级"></i>
<br v-if="site.hr == 0 && site.mail <= 0">
@@ -282,10 +300,11 @@
<div>
<span style="float: left;font-weight: bold;color: #3b5769;">保种分享:</span>
<i class="el-icon-upload" title="做种量"
v-text="' ' + renderSize(site.seeding_size)"></i>
<el-divider direction="vertical"></el-divider>
v-text="renderSize(site.seeding_size)"></i>
<span style="color: grey">|</span>
{# <el-divider direction="vertical"></el-divider>#}
<i class="el-icon-share" style="color: saddlebrown" title="分享率"
v-text="' ' + (site.uploaded / site.downloaded).toFixed(2)"></i>
v-text="numberFormat((site.uploaded / site.downloaded).toFixed(2))"></i>
</div>
<hr>
<div>
@@ -313,7 +332,7 @@
style="color: darkorange" title="魔力/积分"></i>
<br>
<i class="el-icon-lollipop"
v-text="' ' + site.sp_hour.toFixed(3) + ' / ' + site.sp_hour_full"
v-text="site.sp_hour.toFixed(2) + ' / ' + site.sp_hour_full"
style="color: coral" title="时魔"></i>
</div>
<hr>
@@ -419,6 +438,77 @@
</div>
</el-drawer>
<el-dialog :title="addMySiteForm.id==0 ? '添加站点' : '编辑站点'" :visible.sync="showAddMySite" fullscreen center>
<el-form :model="addMySiteForm" size="small" ref="addMySiteForm"
status-icon
inline-message
:rules="addMySiteFormRules">
<el-input v-model="addMySiteForm.id" v-show="false"
placeholder="请输入数字UIDAZ,CZ,EZ,Reel莫妮卡、普斯特等请填写用户名">
</el-input>
<el-form-item label="选择站点" label-position="left" prop="site">
<el-select :disabled="addMySiteForm.id!=0"
v-model="addMySiteForm.site"
filterable="true"
@visible-change="getSiteList(addMySiteForm.site)"
placeholder="请选择要添加的站点">
<el-option
v-for="site in site_list"
:label="site.name"
:value="site.id"
:key="site.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="注册时间" label-position="right" prop="time_join">
<el-date-picker
text="注册时间"
:disabled="addMySiteForm.id!=0"
v-model="addMySiteForm.time_join"
type="datetime"
placeholder="选择注册日期时间"
default-time="2023-01-01 12:00:00">
</el-date-picker>
</el-form-item>
<el-form-item label="功能开关" label-position="right">
<el-form-item label-position="top" inline="true">
<el-checkbox v-model="addMySiteForm.sign_in" label="签到" border></el-checkbox>
<el-checkbox v-model="addMySiteForm.hr" label="HR下载" border></el-checkbox>
<el-checkbox v-model="addMySiteForm.search" label="搜索" border></el-checkbox>
</el-form-item>
</el-form-item>
<el-form-item label="用户UID" label-position="left" prop="user_id">
<el-input v-model="addMySiteForm.user_id"
placeholder="请输入数字UIDAZ,CZ,EZ,Reel莫妮卡、普斯特等请填写用户名">
</el-input>
</el-form-item>
<el-form-item label="Passkey" label-position="left" prop="passkey">
<el-input v-model="addMySiteForm.passkey" show-password></el-input>
</el-form-item>
<el-form-item label="Cookies" label-position="top" prop="cookie">
<el-input type="textarea"
placeholder="请输入站点Cookies与UA搭配使用效果更佳"
v-model="addMySiteForm.cookie"
autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="UserAgent" label-position="top" prop="user_agent">
<el-input type="textarea" v-model="addMySiteForm.user_agent" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-popconfirm title="确定删除此站点信息吗?"
v-if="addMySiteForm.id!=0"
@confirm="removeMySite(addMySiteForm.id)">
<el-button slot="reference" type="danger">删 除
</el-button>
</el-popconfirm>
<el-button @click="showAddMySite = false">取 消</el-button>
<el-button type="primary" @click="editMySite('addMySiteForm')">
<span v-text="addMySiteForm.id==0 ? '添加站点' : '编辑站点'"></span>
</el-button>
</div>
</el-dialog>
</div>
{% include 'admin/includes/js-part.html' %}
@@ -450,6 +540,35 @@
dataLength: -7,
showSignList: false,
signInList: [],
showAddMySite: false,
site_list: [],
addMySiteForm: {
id: 0,
site: 0,
sign_in: true,
hr: false,
search: true,
user_id: '',
passkey: '',
time_join: '2023-01-01 12:00:00',
user_agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52',
cookie: ''
},
addMySiteFormRules: {
site: [
{required: true, message: '请选择要添加的站点', trigger: 'change'},
],
user_id: [
{required: true, message: '请输入数字UID指定站点请输入用户名', trigger: 'blur'},
],
passkey: [
{required: true, message: '请输入Passkey', trigger: 'blur'},
{min: 16, max: 32, message: '长度为32位', trigger: 'blur'}
],
cookie: [
{required: true, message: '请输入站点Cookies与UA搭配使用效果更佳', trigger: 'change'}
]
}
}
},
beforeMount() {
@@ -595,17 +714,15 @@
},
editSite(id) {
axios.get(
"{% url 'edit_site_api' %}" + '?id=' + id
"{% url 'edit_my_site' %}" + '?id=' + id
).then(res => {
console.log('获取数据列表成功', res.data.data)
{#let data = res.data#}
{#console.log(typeof res.data.data)#}
if (res.data.code === 0) {
this.getData()
this.$message({
type: 'success',
message: res.data.data.msg
});
this.addMySiteForm = res.data.data.my_site
this.getSiteList(this.addMySiteForm.site)
this.showAddMySite = true
} else {
this.$message({
type: 'warning',
@@ -620,6 +737,35 @@
});
})
},
removeMySite(id) {
axios.get(
"{% url 'remove_my_site' %}" + '?id=' + id
).then(res => {
console.log('获取数据列表成功', res.data.data)
{#let data = res.data#}
{#console.log(typeof res.data.data)#}
if (res.data.code === 0) {
this.addMySiteForm = {}
this.getData()
this.showAddMySite = false
this.$message({
type: 'success',
message: res.data.msg
});
} else {
this.$message({
type: 'warning',
message: res.data.msg
});
}
}).catch(res => {
console.log('删除失败', res)
this.$message({
type: 'warning',
message: '删除失败!' + res
});
})
},
showHistoryList(id) {
if (!id) {
id = 0
@@ -651,11 +797,75 @@
});
})
},
addSite() {
this.$message({
type: 'warning',
message: '开发中,敬请期待!'
getSiteList(id) {
axios.get(
"{% url 'get_site_list' %}" + '?id=' + id
).then(res => {
console.log('获取数据列表成功', res.data)
{#console.log(typeof res.data.data)#}
if (res.data.code === 0) {
{#this.ptData = res.data.data#}
this.site_list = res.data.data.site_list
} else {
this.$message({
type: 'warning',
message: res.data.msg
});
}
}).catch(res => {
console.log('获取数据列表失败', res)
this.$message({
type: 'warning',
message: '获取数据列表失败!' + res
});
})
},
editMySite(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
const options = {
method: 'POST',
headers: {'content-type': 'application/json;charset=utf-8'},
data: this.addMySiteForm,
url: "{% url 'edit_my_site' %}"
}
axios(options).then(res => {
console.log('获取数据列表成功', res.data)
{#console.log(typeof res.data.data)#}
if (res.data.code === 0) {
{#this.ptData = res.data.data#}
{#this.site_list = res.data.data.site_list#}
this.addMySiteForm = {}
this.showAddMySite = false
this.getData()
this.$message({
type: 'success',
message: res.data.msg
});
} else {
this.$message({
type: 'warning',
message: res.data.msg
});
}
}).catch(res => {
console.log('获取数据列表失败', res)
this.$message({
type: 'warning',
message: '获取数据列表失败!' + res
});
})
} else {
this.$message({
type: 'warning',
message: '数据验证失败!请认真填写'
});
return false;
}
});
},
showAllIncrementHistory($event) {
console.log($event)