* 修复上次更新的UI问题。
* `FTP存储空间` 备份数据库修复。
* 修复计划任务执行Python脚本的编码问题。
* 添加,修改计划任务参数强校验。
pull/228/head
midoks 3 years ago
parent aa97982f6f
commit 063bc092e6
  1. 14
      README.md
  2. 2
      class/core/config_api.py
  3. 59
      class/core/crontab_api.py
  4. 111
      route/static/app/crontab.js
  5. 2
      scripts/update/centos.sh

@ -92,16 +92,12 @@ docker run -itd --name mw-server --privileged=true -p 7200:7200 -p 80:80 -p 443:
``` ```
### 版本更新 0.10.1 ### 版本更新 0.10.2
* MySQL添加外部导入功能。
* OpenResty添加性能调整功能。
* 优化ubuntu22.04安装过程。
* Debian9友好,【SSH终端 1.0】无法使用。
* phpMyAdmin优化,需要卸载重装。
* 文件管理解压直接覆盖FIX。
* 优化文件多选的BUG。
* 修复上次更新的UI问题。
* `FTP存储空间` 备份数据库修复。
* 修复计划任务执行Python脚本的编码问题。
* 添加,修改计划任务参数强校验。
### JSDelivr安装地址 ### JSDelivr安装地址

@ -15,7 +15,7 @@ from flask import request
class config_api: class config_api:
__version = '0.10.1' __version = '0.10.2'
def __init__(self): def __init__(self):
pass pass

@ -115,6 +115,56 @@ class crontab_api:
'id=?', (sid,)).field(self.field).find() 'id=?', (sid,)).field(self.field).find()
return mw.getJson(data) return mw.getJson(data)
# 参数校验
def cronCheck(self, params):
if params['stype'] == 'site' or params['stype'] == 'database' or params['stype'] == 'logs':
if params['save'] == '':
return False, '保留份数不能为空!'
if params['type'] == 'day':
if params['hour'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'day-n':
if params['where1'] == '':
return False, '天不能为空!'
if params['hour'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'hour':
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'hour-n':
if params['hour'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'minute-n':
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'week':
if params['hour'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'month':
if params['where1'] == '':
return False, '日不能为空!'
if params['hour'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
return True, 'OK'
def modifyCrondApi(self): def modifyCrondApi(self):
sid = request.form.get('id', '') sid = request.form.get('id', '')
iname = request.form.get('name', '') iname = request.form.get('name', '')
@ -147,6 +197,11 @@ class crontab_api:
'sbody': sbody, 'sbody': sbody,
'urladdress': urladdress, 'urladdress': urladdress,
} }
is_check_pass, msg = self.cronCheck(params)
if not is_check_pass:
return mw.returnJson(is_check_pass, msg)
cuonConfig, get, name = self.getCrondCycle(params) cuonConfig, get, name = self.getCrondCycle(params)
cronInfo = mw.M('crontab').where( cronInfo = mw.M('crontab').where(
'id=?', (sid,)).field(self.field).find() 'id=?', (sid,)).field(self.field).find()
@ -210,6 +265,10 @@ class crontab_api:
'urladdress': urladdress, 'urladdress': urladdress,
} }
is_check_pass, msg = self.cronCheck(params)
if not is_check_pass:
return mw.returnJson(is_check_pass, msg)
addData = self.add(params) addData = self.add(params)
if addData > 0: if addData > 0:
return mw.returnJson(True, '添加成功') return mw.returnJson(True, '添加成功')

@ -68,26 +68,25 @@ function getCronData(page){
} }
} }
cbody += "<tr>\ cbody += "<tr><td><input type='checkbox' onclick='checkSelect();' title='"+rdata.data[i].name+"' name='id' value='"+rdata.data[i].id+"'></td>\
<td><input type='checkbox' onclick='checkSelect();' title='"+rdata.data[i].name+"' name='id' value='"+rdata.data[i].id+"'></td>\ <td>"+rdata.data[i].name+"</td>\
<td>"+rdata.data[i].name+"</td>\ <td>"+status+"</td>\
<td>"+status+"</td>\ <td>"+rdata.data[i].type+"</td>\
<td>"+rdata.data[i].type+"</td>\ <td>"+rdata.data[i].cycle+"</td>\
<td>"+rdata.data[i].cycle+"</td>\ <td>"+cron_save +"</td>\
<td>"+cron_save +"</td>\ <td>"+cron_backupto+"</td>\
<td>"+cron_backupto+"</td>\ <td>"+rdata.data[i].addtime+"</td>\
<td>"+rdata.data[i].addtime+"</td>\ <td>\
<td>\ <a href=\"javascript:startTask("+rdata.data[i].id+");\" class='btlink'>执行</a> | \
<a href=\"javascript:startTask("+rdata.data[i].id+");\" class='btlink'>执行</a> | \ <a href=\"javascript:editTaskInfo('"+rdata.data[i].id+"');\" class='btlink'>编辑</a> | \
<a href=\"javascript:editTaskInfo('"+rdata.data[i].id+"');\" class='btlink'>编辑</a> | \ <a href=\"javascript:getLogs("+rdata.data[i].id+");\" class='btlink'>日志</a> | \
<a href=\"javascript:getLogs("+rdata.data[i].id+");\" class='btlink'>日志</a> | \ <a href=\"javascript:planDel("+rdata.data[i].id+" ,'"+rdata.data[i].name.replace('\\','\\\\').replace("'","\\'").replace('"','')+"');\" class='btlink'>删除</a>\
<a href=\"javascript:planDel("+rdata.data[i].id+" ,'"+rdata.data[i].name.replace('\\','\\\\').replace("'","\\'").replace('"','')+"');\" class='btlink'>删除</a>\ </td>\
</td>\ </tr>";
</tr>";
} }
} }
$('#cronbody').html(cbody); $('#cronbody').html(cbody);
$('#softPage').html(rdata.list) $('#softPage').html(rdata.list);
},'json'); },'json');
} }
@ -97,12 +96,18 @@ function setTaskStatus(id,status){
if (index > 0) { if (index > 0) {
var loadT = layer.msg('正在设置状态,请稍后...',{icon:16,time:0,shade: [0.3, '#000']}); var loadT = layer.msg('正在设置状态,请稍后...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/crontab/set_cron_status',{id:id},function(rdata){ $.post('/crontab/set_cron_status',{id:id},function(rdata){
layer.closeAll();
layer.close(confirm); if (!rdata.status){
layer.msg(rdata.data,{icon:rdata.status?1:2}); layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status) { return;
getCronData(1);
} }
showMsg(rdata.msg,function(){
layer.close(loadT);
layer.close(confirm);
getCronData(1);
},{icon:rdata.status?1:2},2000);
},'json'); },'json');
} }
}); });
@ -110,22 +115,24 @@ function setTaskStatus(id,status){
//执行任务脚本 //执行任务脚本
function startTask(id){ function startTask(id){
layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']}); var loadT = layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']});
var data='id='+id; var data='id='+id;
$.post('/crontab/start_task',data,function(rdata){ $.post('/crontab/start_task',data,function(rdata){
layer.closeAll(); showMsg(rdata.msg, function(){
layer.msg(rdata.msg,{icon:rdata.status?1:2}); layer.close(loadT);
},{icon:rdata.status?1:2,time:2000});
},'json'); },'json');
} }
//清空日志 //清空日志
function closeLogs(id){ function closeLogs(id){
layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']}); var loadT = layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']});
var data='id='+id; var data='id='+id;
$.post('/crontab/del_logs',data,function(rdata){ $.post('/crontab/del_logs',data,function(rdata){
layer.closeAll(); showMsg(rdata.msg, function(){
layer.msg(rdata.msg,{icon:rdata.status?1:2}); layer.close(loadT);
},{icon:rdata.status?1:2,time:2000});
},'json'); },'json');
} }
@ -136,8 +143,8 @@ function planDel(id,name){
var load = layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']}); var load = layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']});
var data='id='+id; var data='id='+id;
$.post('/crontab/del',data,function(rdata){ $.post('/crontab/del',data,function(rdata){
layer.close(load);
showMsg(rdata.msg, function(){ showMsg(rdata.msg, function(){
layer.close(load);
getCronData(1); getCronData(1);
},{icon:rdata.status?1:2,time:2000}); },{icon:rdata.status?1:2,time:2000});
},'json'); },'json');
@ -234,15 +241,15 @@ function planAdd(){
break; break;
} }
var where1 = $('#excode_week b').attr('val');
$("#set-Config input[name='where1']").val(where1);
if(where1 > is1 || where1 < is2){ if(where1 > is1 || where1 < is2){
$("#ptime input[name='where1']").focus(); $("#ptime input[name='where1']").focus();
layer.msg('表单不合法,请重新输入!',{icon:2}); layer.msg('表单不合法,请重新输入!',{icon:2});
return; return;
} }
where1 = $('#excode_week b').attr('val');
$("#set-Config input[name='where1']").val(where1);
var hour = $("#ptime input[name='hour']").val(); var hour = $("#ptime input[name='hour']").val();
if(hour > 23 || hour < 0){ if(hour > 23 || hour < 0){
$("#ptime input[name='hour']").focus(); $("#ptime input[name='hour']").focus();
@ -322,20 +329,32 @@ function planAdd(){
var where1 = $("#ptime input[name='where1']").val(); var where1 = $("#ptime input[name='where1']").val();
$("#set-Config input[name='where1']").val(where1); $("#set-Config input[name='where1']").val(where1);
} }
if (type == 'day-n'){
var where1 = $("#ptime input[name='where1']").val();
$("#set-Config input[name='where1']").val(where1);
}
if (type == 'hour-n'){
var where1 = $("#ptime input[name='where1']").val();
$("#set-Config input[name='hour']").val(where1);
}
$("#set-Config input[name='sName']").val(sName); $("#set-Config input[name='sName']").val(sName);
layer.msg('正在添加,请稍候...!',{icon:16,time:0,shade: [0.3, '#000']}); layer.msg('正在添加,请稍候...!',{icon:16,time:0,shade: [0.3, '#000']});
var data = $("#set-Config").serialize() + '&sBody='+sBody + '&urladdress=' + urladdress; var data = $("#set-Config").serialize() + '&sBody='+sBody + '&urladdress=' + urladdress;
// console.log(data);
console.log(data);
$.post('/crontab/add',data,function(rdata){ $.post('/crontab/add',data,function(rdata){
if(!rdata.status) { if(!rdata.status) {
layer.msg(rdata.msg,{icon:2, time:2000}); layer.msg(rdata.msg,{icon:2, time:2000});
return; return;
} }
layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2}); showMsg(rdata.msg, function(){
getCronData(1); layer.closeAll();
getCronData(1);
},{icon:rdata.status?1:2}, 2000);
},'json'); },'json');
} }
@ -829,12 +848,20 @@ function editTaskInfo(id){
obj.from.where1 = obj.from.minute; obj.from.where1 = obj.from.minute;
obj.from.minute = ''; obj.from.minute = '';
} }
layer.msg('正在保存编辑内容,请稍后...',{icon:16,time:0,shade: [0.3, '#000']}); var loadT = layer.msg('正在保存编辑内容,请稍后...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/crontab/modify_crond',obj.from,function(rdata){ $.post('/crontab/modify_crond',obj.from,function(rdata){
layer.closeAll();
getCronData(1); if (!rdata.status){
layer.msg(rdata.msg,{icon:rdata.status?1:2}); layer.msg(rdata.msg,{icon:rdata.status?1:2});
initDropdownMenu(); return;
}
showMsg(rdata.msg, function(){
layer.close(loadT);
getCronData(1);
initDropdownMenu();
},{icon:rdata.status?1:2}, 2000);
},'json'); },'json');
}); });
},100); },100);

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH export PATH
LANG=en_US.UTF-8 export LANG=en_US.UTF-8
if [ -f /etc/motd ];then if [ -f /etc/motd ];then

Loading…
Cancel
Save