提交 758abea6 编写于 作者: H hjdhnx

合并小雅的解析管理代码

上级 4ddebaec
无法预览此类型文件
......@@ -5,8 +5,9 @@
# Date : 2022/9/6
import os
import ujson
from flask import Blueprint,request,render_template,jsonify,make_response
from controllers.service import storage_service,rules_service
from controllers.service import storage_service,rules_service,parse_service
from base.R import R
from base.database import db
from utils.log import logger
......@@ -169,6 +170,40 @@ def admin_rule_order(order=0): # 管理员修改规则顺序
return R.success(f'修改成功,服务器反馈信息为:{success_list}')
@admin.route('/parse/save_data',methods=['POST'])
def admin_parse_save_data(): # 管理员保存拖拽排序后的解析数据
if not verfy_token():
return R.error('请登录后再试')
data = getParmas('data')
if not data:
return R.success(f'修改失败,没有传递data参数')
parse = parse_service()
success_list = []
data = ujson.loads(data)
for i in range(len(data)):
d = data[i]
if not d.get('url') and d.get('name') != '🌐Ⓤ':
continue
obj = {
'name':d.get('name', ''),
'url':d.get('url', ''),
'state':d.get('state',1),
'type': d.get('state',0),
'order':i+1,
'ext':d.get('ext',''),
'header':d.get('header',''),
}
# print(obj)
try:
parse.saveData(obj)
success_list.append(f'parse:{d["url"]}')
# print(obj)
# print(200,obj)
except Exception as e:
success_list.append(d["url"])
print(f'{d["url"]}失败:{e}')
return R.success(f'修改成功,服务器反馈信息为:{success_list}')
@admin.route('/force_update')
def admin_force_update():
if not verfy_token():
......
......@@ -9,7 +9,7 @@ from flask import Blueprint,request,render_template,jsonify,make_response,redire
from utils.ua import UA
from utils.web import getParmas,get_interval,layuiBack,verfy_token
from utils.cfg import cfg
from controllers.service import storage_service,rules_service
from controllers.service import storage_service,rules_service,parse_service
from utils.system import getHost
from utils.files import getCustonDict,custom_merge
from utils.encode import parseText
......@@ -138,7 +138,23 @@ def layui_jx_list():
alists_str='', live_url='', config=new_conf)
merged_config = custom_merge(parseText(html), customConfig)
parses = merged_config['parses']
# print(parses)
parse = parse_service()
parse_list = parse.query_all()
parse_url_list = list(map(lambda x:x['url'],parse_list))
for i in range(len(parses)):
parses[i]['id'] = i+1
if parses[i]['url'] in parse_url_list:
parse_rule = parse_list[parse_url_list.index(parses[i]['url'])]
parses[i]['state'] = 1 if parse_rule['state'] is None else parse_rule['state']
parses[i]['order'] = 0 if parse_rule['order'] is None else parse_rule['order']
parses[i]['write_date'] = 0 if parse_rule['write_date'] is None else parse_rule['write_date'].timestamp()
else:
parses[i]['state'] = 1
parses[i]['order'] = 0
parses[i]['write_date'] = 0
for i in range(len(parses)):
if not parses[i].get('header'):
parses[i]['header'] = {'User-Agent': 'Mozilla/5.0'}
......@@ -146,5 +162,7 @@ def layui_jx_list():
parses[i]['header'] = ujson.dumps(parses[i]['header'],ensure_ascii=False)
if isinstance(parses[i].get('ext'),dict):
parses[i]['ext'] = ujson.dumps(parses[i]['ext'],ensure_ascii=False)
# parse.setEverything(parses[i]['url'], parses[i]['name'], parses[i]['state'], parses[i]['type'], parses[i]['order'], parses[i]['ext'], parses[i]['header'])
new_parses = parses[(page - 1) * limit:page * limit]
return layuiBack('获取成功', new_parses, count=len(parses))
\ No newline at end of file
......@@ -7,6 +7,7 @@
from base.R import copy_utils
from models.storage import Storage
from models.ruleclass import RuleClass
from models.vipParse import VipParse
from utils.cfg import cfg
from base.database import db
from datetime import datetime,timedelta
......@@ -135,4 +136,120 @@ class rules_service(object):
@staticmethod
def getHideRules():
res = RuleClass.query.filter(RuleClass.state == 0).all()
return copy_utils.obj_to_list(res)
\ No newline at end of file
return copy_utils.obj_to_list(res)
class parse_service(object):
@staticmethod
def query_all():
# 查询所有
res = VipParse.query.order_by(VipParse.order.asc(),VipParse.write_date.desc()).all()
# print(res)
# res = RuleClass.query.order_by(RuleClass.write_date.asc()).all()
return copy_utils.obj_to_list(res)
@classmethod
def hasItem(self, key):
return VipParse.hasItem(key)
def getState(self,key):
res = VipParse.query.filter(VipParse.url == key).first()
if not res:
return 1
# print(res)
state = res.state
if state is None:
state = 1
return state or 0
def setState(self,key,state=0):
res = VipParse.query.filter(VipParse.url == key).first()
if res:
res.state = state
db.session.add(res)
else:
res = VipParse(url=key, state=state)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
def setOrder(self,key,order=0):
res = VipParse.query.filter(VipParse.url == key).first()
if res:
res.order = order
# print(f'{res.name}设置order为:{order}')
if res.order == order:
res.write_date = datetime.now()
# res.write_date = res.write_date + timedelta(hours=2)
db.session.add(res)
else:
res = VipParse(url=key, order=order)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
def setEverything(self,key,name,state,typeno,order,ext,header):
res = VipParse.query.filter(VipParse.url == key).first()
if res:
res.name = name
res.state = state
res.type = typeno
res.order = order
res.ext = ext
res.header = header
res.write_date = datetime.now()
db.session.add(res)
else:
res = VipParse(name=name,url=key,state=state,type=typeno,order=order,ext=ext,header=header)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
def saveData(self,obj):
"""
db.session.add_all([]) 可以一次性保存多条数据,但是这里用不到,因为涉及修改和新增一起的
:param obj:
:return:
"""
# res = VipParse.query.filter(VipParse.url == obj['url']).first()
res = VipParse.query.filter_by(url=obj['url']).first()
if res:
# res.update(obj)
res.name = obj['name']
res.state = obj['state']
res.type = obj['type']
res.order = obj['order']
res.ext = obj['ext']
res.header = obj['header']
db.session.add(res)
else:
res = VipParse(**obj)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
@staticmethod
def getHideRules():
res = VipParse.query.filter(VipParse.state == 0).all()
return copy_utils.obj_to_list(res)
......@@ -8,11 +8,12 @@
<link rel="stylesheet" href="/static/plugin/layui/ext/soulTable/soulTable.css" media="all"/>
</head>
<body>
<table id="myTable" ></table>
<table id="myTable" lay-filter="myTable"></table>
<script type="text/html" id="toolbar">
<div>
<div class="layui-btn-container">
<!-- <button class="layui-btn layui-btn-sm" lay-event="clearFilter">清除所有筛选条件</button>-->
<button class="layui-btn layui-btn-sm" lay-event="getData">获取当前页数据</button>
<!-- <button class="layui-btn layui-btn-sm" lay-event="getData">获取当前页数据</button>-->
<button class="layui-btn layui-btn-sm" lay-event="saveData">保存拖拽排序结果</button>
</div>
</script>
<script type="text/html" id="bar">
......@@ -36,6 +37,7 @@
layui.use(['form', 'table','soulTable'], function () {
var table = layui.table, soulTable = layui.soulTable;
var $ = layui.$;
soulTable.config({
rowDrag: true
});
......@@ -51,9 +53,12 @@
,limits:[20,40,60,80,100,150,200,300,500]
,cols: [[
{type: 'checkbox', fixed: 'left'},
{field: 'id', title: '编号', width: 80, sort: true},
{field: 'name', title: '名称', width: 200, sort: true, filter: true},
{field: 'url', title: '接口', minWidth: 200, sort: true, filter: true},
{field: 'type', title: '类型', width: 100 , filter: true},
{field: 'state', title: '状态', width: 60},
{field: 'order', title: '顺序', width: 80,sort: true},
{field: 'url', title: '接口', minWidth: 200, sort: true},
{field: 'type', title: '类型', width: 80 , filter: true},
// {field: 'header', title: '请求头', width: 112, filter: {split:','}, sort:true},
{field: 'header', title: '请求头', width: 200, sort:true},
{field: 'ext', title: '扩展信息', minWidth: 200, sort:true},
......@@ -64,26 +69,59 @@
}
});
function saveData(data){
if(!Array.isArray(data) || data.length < 1){
return layer.msg('待保存的数据有误');
}
let params = {"data":JSON.stringify(data)};
// console.log(params);
$.post("/admin/parse/save_data",params,function(res,status){
console.log(res);
if(res.code === 200){
table.reload('myTable', {
// page: {
// curr: 3 //重新从第 1 页开始
// }
});
}else{
console.log('修改失败了...');
return false
}
});
}
// 工具栏事件
table.on('toolbar(myTable)', function(obj){
var id = obj.config.id;
console.log(id);
// console.log(id);
if (obj.event === 'clearFilter') {
// 清除所有筛选条件并重载表格
// 参数: tableId
soulTable.clearFilter('myTable')
}else if(obj.event === 'getData'){
var getData = table.getData(id);
console.log(getData);
// console.log(getData);
layer.alert(layui.util.escape(JSON.stringify(getData)));
}else if(obj.event === 'saveData'){
layer.confirm('确定保存当前的排序结果?保存后将刷新数据库和当前页面', function(index){
var getData = table.getData(id);
// console.log(getData);
saveData(getData);
layer.close(index);
});
}
});
//触发单元格工具事件
table.on('tool(bar)', function(obj) { // 双击 toolDouble
table.on('tool(myTable)', function(obj) { // 双击 toolDouble
console.log(obj);
if(obj.event === 'del'){
alert('删除...')
layer.msg('未开发功能:删除...')
}else if(obj.event === 'set_top'){
layer.msg('未开发功能:置顶...')
}else if(obj.event === 'set_bottom'){
layer.msg('未开发功能:置底...')
}
});
// }, null, 'define');
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册