增加网站分类功能

pull/109/head
Mr Chen 6 years ago
parent b644868473
commit 1b261e0a2e
  1. 26
      class/core/site_api.py
  2. 1
      data/sql/default.sql
  3. 9
      plugins/mysql/js/mysql.js
  4. 32
      route/static/app/public.js
  5. 76
      route/static/app/site.js
  6. 10
      route/templates/default/site.html

@ -51,9 +51,15 @@ class site_api:
def listApi(self): def listApi(self):
limit = request.form.get('limit', '').encode('utf-8') limit = request.form.get('limit', '').encode('utf-8')
p = request.form.get('p', '').encode('utf-8') p = request.form.get('p', '').encode('utf-8')
type_id = request.form.get('type_id', '').encode('utf-8')
start = (int(p) - 1) * (int(limit)) start = (int(p) - 1) * (int(limit))
_list = public.M('sites').where('', ()).field('id,name,path,status,ps,addtime,edate').limit(
siteM = public.M('sites')
if type_id != '' and type_id == '-1' and type_id == '0':
siteM.where('type_id=?', (type_id))
_list = siteM.field('id,name,path,status,ps,addtime,edate').limit(
(str(start)) + ',' + limit).order('id desc').select() (str(start)) + ',' + limit).order('id desc').select()
for i in range(len(_list)): for i in range(len(_list)):
@ -63,7 +69,7 @@ class site_api:
_ret = {} _ret = {}
_ret['data'] = _list _ret['data'] = _list
count = public.M('sites').where('', ()).count() count = siteM.count()
_page = {} _page = {}
_page['count'] = count _page['count'] = count
_page['tojs'] = 'getWeb' _page['tojs'] = 'getWeb'
@ -1215,7 +1221,7 @@ class site_api:
mid = request.form.get('id', '').encode('utf-8') mid = request.form.get('id', '').encode('utf-8')
site_ids = json.loads(site_ids) site_ids = json.loads(site_ids)
for sid in site_ids: for sid in site_ids:
public.M('sites').where('id=?', (sid,)).setField('type_id', mid) print public.M('sites').where('id=?', (sid,)).setField('type_id', mid)
return public.returnJson(True, "设置成功!") return public.returnJson(True, "设置成功!")
##### ----- end ----- ### ##### ----- end ----- ###
@ -1625,13 +1631,12 @@ location /{
self.sitePort = port.strip().replace(' ', '') self.sitePort = port.strip().replace(' ', '')
self.phpVersion = version self.phpVersion = version
siteM = public.M('sites') if public.M('sites').where("name=?", (self.siteName,)).count():
if siteM.where("name=?", (self.siteName,)).count():
return public.returnJson(False, '您添加的站点已存在!') return public.returnJson(False, '您添加的站点已存在!')
# 写入数据库 # 写入数据库
pid = siteM.add('name,path,status,ps,edate,addtime', pid = public.M('sites').add('name,path,status,ps,edate,addtime,type_id',
(self.siteName, self.sitePath, '1', ps, '0000-00-00', public.getDate())) (self.siteName, self.sitePath, '1', ps, '0000-00-00', public.getDate(), 0,))
opid = public.M('domain').where( opid = public.M('domain').where(
"name=?", (self.siteName,)).getField('pid') "name=?", (self.siteName,)).getField('pid')
if opid: if opid:
@ -1643,14 +1648,13 @@ location /{
for domain in siteMenu['domainlist']: for domain in siteMenu['domainlist']:
sdomain = domain sdomain = domain
swebname = self.siteName swebname = self.siteName
spid = str(get.pid) spid = str(pid)
# self.addDomain(domain, webname, pid) # self.addDomain(domain, webname, pid)
public.M('domain').add('pid,name,port,addtime', public.M('domain').add('pid,name,port,addtime',
(pid, self.siteName, self.sitePort, public.getDate())) (pid, self.siteName, self.sitePort, public.getDate()))
self.createRootDir(self.sitePath) self.createRootDir(self.sitePath)
self.nginxAddConf() self.nginxAddConf()
data = {} data = {}
@ -1661,8 +1665,8 @@ location /{
def deleteWSLogs(self, webname): def deleteWSLogs(self, webname):
assLogPath = public.getLogsDir() + '/' + webname + '.log' assLogPath = public.getLogsDir() + '/' + webname + '.log'
errLogPath = public.getLogsDir() + '/' + webname + '.error.log' errLogPath = public.getLogsDir() + '/' + webname + '.error.log'
confFile = self.setupPath + '/openresty/nginx/conf/vhost/' + webname + '.conf' confFile = self.setupPath + '/web_conf/nginx/conf/vhost/' + webname + '.conf'
rewriteFile = self.setupPath + '/openresty/nginx/conf/rewrite/' + webname + '.conf' rewriteFile = self.setupPath + '/web_conf/nginx/conf/rewrite/' + webname + '.conf'
logs = [assLogPath, errLogPath, confFile, rewriteFile] logs = [assLogPath, errLogPath, confFile, rewriteFile]
for i in logs: for i in logs:
public.deleteFile(i) public.deleteFile(i)

@ -65,6 +65,7 @@ CREATE TABLE IF NOT EXISTS `sites` (
`path` TEXT, `path` TEXT,
`status` TEXT, `status` TEXT,
`index` TEXT, `index` TEXT,
`type_id` INTEGER,
`ps` TEXT, `ps` TEXT,
`edate` TEXT, `edate` TEXT,
`addtime` TEXT `addtime` TEXT

@ -469,15 +469,6 @@ function copyPass(password){
$("#bt_copys").click(); $("#bt_copys").click();
} }
function readerTableChecked(){
$('table').find('th').find('input').bind('click',function(){
$('table').find('td').find('input').each(function(i,obj){
checked = $(this).prop('checked');
$(this).prop('checked',!checked);
});
});
}
function checkSelect(){ function checkSelect(){
setTimeout(function () { setTimeout(function () {
var num = $('input[type="checkbox"].check:checked').length; var num = $('input[type="checkbox"].check:checked').length;

@ -797,26 +797,20 @@ function fly(a) {
}); });
}; };
function readerTableChecked(){
$('thead').find('input').bind('click',function(){
$('tbody').find('tr').each(function(i,obj){
var fin = $(this).find('td')[0];
checked = $(fin).find('input').prop('checked');
$(fin).find('input').prop('checked',!checked);
});
});
}
//检查选中项 //检查选中项
function checkSelect(){ function checkSelect(){
setTimeout(function(){ setTimeout(function(){
var checkList = $("input[name=id]"); var num = $('tbody').find('input[type="checkbox"]:checked').length;
console.log(checkList);
var count = 0;
for(var i=0;i<checkList.length;i++){
if(checkList[i].checked) {
count++;
}
}
if(count > 0){
$("#allDelete").show();
} else {
$("#allDelete").hide();
}
var num = $('input[type="checkbox"]:checked');
console.log(num);
if (num == 1) { if (num == 1) {
$('button[batch="true"]').hide(); $('button[batch="true"]').hide();
$('button[batch="false"]').show(); $('button[batch="false"]').show();
@ -1025,15 +1019,15 @@ function getSpeed(sele){
function messageBox() { function messageBox() {
layer.open({ layer.open({
type: 1, type: 1,
title: lan.bt.task_title, title: '消息盒子',
area: "640px", area: "640px",
closeBtn: 2, closeBtn: 2,
shadeClose: false, shadeClose: false,
content: '<div class="bt-form">\ content: '<div class="bt-form">\
<div class="bt-w-main">\ <div class="bt-w-main">\
<div class="bt-w-menu">\ <div class="bt-w-menu">\
<p class="bgw" id="taskList" onclick="tasklist()">'+lan.bt.task_list+'(<span class="task_count">0</span>)</p>\ <p class="bgw" id="taskList" onclick="tasklist()">任务列表(<span class="task_count">0</span>)</p>\
<p onclick="remind()">'+lan.bt.task_msg+'(<span class="msg_count">0</span>)</p>\ <p onclick="remind()">消息列表(<span class="msg_count">0</span>)</p>\
<p onclick="execLog()">执行日志</p>\ <p onclick="execLog()">执行日志</p>\
</div>\ </div>\
<div class="bt-w-con pd15">\ <div class="bt-w-con pd15">\

@ -3,7 +3,7 @@
* @param {Number} page 当前页 * @param {Number} page 当前页
* @param {String} search 搜索条件 * @param {String} search 搜索条件
*/ */
function getWeb(page, search) { function getWeb(page, search, type_id) {
search = $("#SearchValue").prop("value"); search = $("#SearchValue").prop("value");
page = page == undefined ? '1':page; page = page == undefined ? '1':page;
var order = getCookie('order'); var order = getCookie('order');
@ -13,8 +13,15 @@ function getWeb(page, search) {
order = ''; order = '';
} }
var type = '';
if ( typeof(type_id) == 'undefined' ){
type = '&type_id=0';
} else {
type = '&type_id='+type_id;
}
var sUrl = '/site/list'; var sUrl = '/site/list';
var pdata = 'limit=10&p=' + page + '&search=' + search + order; var pdata = 'limit=10&p=' + page + '&search=' + search + order + type;
var loadT = layer.load(); var loadT = layer.load();
//取回数据 //取回数据
$.post(sUrl, pdata, function(data) { $.post(sUrl, pdata, function(data) {
@ -124,6 +131,8 @@ function getWeb(page, search) {
$(this).hide().after("<input class='baktext' type='text' data-id='"+dataid+"' name='bak' value='" + databak + "' placeholder='备注信息' onblur='getBakPost(\"sites\")' />"); $(this).hide().after("<input class='baktext' type='text' data-id='"+dataid+"' name='bak' value='" + databak + "' placeholder='备注信息' onblur='getBakPost(\"sites\")' />");
$(".baktext").focus(); $(".baktext").focus();
}); });
readerTableChecked();
},'json'); },'json');
} }
@ -141,7 +150,6 @@ function getBakPost(b) {
} }
function setWebPs(b, e, a) { function setWebPs(b, e, a) {
console.log(b,e,a);
var d = layer.load({shade: true,shadeClose: false}); var d = layer.load({shade: true,shadeClose: false});
var c = 'ps=' + a; var c = 'ps=' + a;
$.post('/site/set_ps', 'id=' + e + "&" + c, function(data) { $.post('/site/set_ps', 'id=' + e + "&" + c, function(data) {
@ -506,7 +514,7 @@ function webStart(wid, wname) {
*/ */
function webDelete(wid, wname){ function webDelete(wid, wname){
var thtml = "<div class='options'>\ var thtml = "<div class='options'>\
<label><input type='checkbox' id='delpath' name='path'><span>"+lan.site.root_dir+"</span></label>\ <label><input type='checkbox' id='delpath' name='path'><span>根目录</span></label>\
</div>"; </div>";
var info = '是否要删除同名根目录'; var info = '是否要删除同名根目录';
safeMessage('删除站点'+"["+wname+"]",info, function(){ safeMessage('删除站点'+"["+wname+"]",info, function(){
@ -514,7 +522,7 @@ function webDelete(wid, wname){
if($("#delpath").is(":checked")){ if($("#delpath").is(":checked")){
path='&path=1'; path='&path=1';
} }
var loadT = layer.msg(lan.public.the,{icon:16,time:10000,shade: [0.3, '#000']}); var loadT = layer.msg('正在处理,请稍候...',{icon:16,time:10000,shade: [0.3, '#000']});
$.post("/site/delete","id=" + wid + "&webname=" + wname + path, function(ret){ $.post("/site/delete","id=" + wid + "&webname=" + wname + path, function(ret){
layer.closeAll(); layer.closeAll();
layer.msg(ret.msg,{icon:ret.status?1:2}) layer.msg(ret.msg,{icon:ret.status?1:2})
@ -2099,6 +2107,12 @@ function getClassType(){
for (var i = 0; i<rdata.length; i++) { for (var i = 0; i<rdata.length; i++) {
$(select).append('<option value="'+rdata[i]['id']+'">'+rdata[i]['name']+'</option>'); $(select).append('<option value="'+rdata[i]['id']+'">'+rdata[i]['name']+'</option>');
} }
$(select).bind('change',function(){
var select_id = $(this).val();
// console.log(select_id);
getWeb(1,'',select_id);
})
},'json'); },'json');
} }
getClassType(); getClassType();
@ -2108,7 +2122,6 @@ getClassType();
function setClassType(){ function setClassType(){
$.post('/site/get_site_types',function(rdata){ $.post('/site/get_site_types',function(rdata){
var list = ''; var list = '';
for (var i = 0; i<rdata.length; i++) { for (var i = 0; i<rdata.length; i++) {
list +='<tr><td>' + rdata[i]['name'] + '</td>\ list +='<tr><td>' + rdata[i]['name'] + '</td>\
@ -2134,8 +2147,6 @@ function setClassType(){
</div>\ </div>\
</div>' </div>'
}); });
},'json'); },'json');
} }
@ -2209,12 +2220,53 @@ function editClassType(id,name){
} }
function moveClassTYpe(){
$.post('/site/get_site_types',function(rdata){
var option = '';
for (var i = 0; i<rdata.length; i++) {
option +='<option value="'+rdata[i]['id']+'">'+rdata[i]['name']+'</option>';
}
layer.open({
type: 1,
area: '350px',
title: '设置站点分类',
closeBtn: 2,
shift: 0,
content: '<div class="bt-form edit_site_type">\
<div class="divtable mtb15" style="overflow:auto;height:80px;">\
<div class="line"><span class="tname">默认站点</span>\
<div class="info-r">\
<select class="bt-input-text mr5" name="type_id" style="width:200px">'+option+'\
</select>\
</div>\
</div>\
</div>\
<div class="bt-form-submit-btn"><button onclick="setSizeClassType();" type="button" class="btn btn-sm btn-success">提交</button></div>\
</div>'
});
},'json');
}
function setSizeClassType(){
var data = {};
data['id'] = $('select[name=type_id]').val();
var ids = [];
$('table').find('td').find('input').each(function(i,obj){
checked = $(this).prop('checked');
if (checked) {
ids.push($(this).val());
}
});
data['site_ids'] = JSON.stringify(ids);
$.post('/site/set_site_type',data, function(rdata){
showMsg(rdata.msg,function(){
if (rdata.status){
layer.closeAll();
}
},{icon:rdata.status?1:2});
},'json');
}

@ -23,16 +23,12 @@
<button onclick="siteDefaultPage();" class="btn btn-default btn-sm btn-title" type="button">修改默认页</button> <button onclick="siteDefaultPage();" class="btn btn-default btn-sm btn-title" type="button">修改默认页</button>
<button onclick="getDefaultSite();" class="btn btn-default btn-sm btn-title" type="button">默认站点</button> <button onclick="getDefaultSite();" class="btn btn-default btn-sm btn-title" type="button">默认站点</button>
<button onclick="setClassType();" class="btn btn-default btn-sm btn-title" type="button">分类管理</button> <button onclick="setClassType();" class="btn btn-default btn-sm btn-title" type="button">分类管理</button>
<span style="float: right;display: none;"> <span>
<button batch="true" style="float: right; margin-left: 10px;" onclick="allDeleteSite();" class="btn btn-default btn-sm">删除选中</button> <button batch="true" style="float: right; margin-left: 10px;display: none;" onclick="allDeleteSite();" class="btn btn-default btn-sm">删除选中</button>
</span> </span>
<div class="move_class"> <div class="move_class">
<button batch="false" style="float: right; margin-left: 10px;display: none;" class="btn btn-default btn-sm" onclick="site.batch_site('site_type')">移动至</button> <button batch="false" style="float: right; margin-left: 10px;display: none;" class="btn btn-default btn-sm" onclick="moveClassTYpe()">移动至</button>
</div> </div>
<!-- <span id="allDelete" style="float: right;display: none;">
<button onclick="allDeleteSite();" class="btn btn-default btn-sm">批量删除</button>
</span> -->
<div class="divtable mtb10"> <div class="divtable mtb10">
<div class="tablescroll"> <div class="tablescroll">

Loading…
Cancel
Save