mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-10 04:19:26 +08:00
update_dev
This commit is contained in:
@@ -99,27 +99,96 @@ class nosqlMongodbCtr():
|
||||
return instance
|
||||
|
||||
def getDbList(self, args):
|
||||
|
||||
sid = args['sid']
|
||||
mgdb_instance = self.getInstanceBySid(sid).mgdb_conn()
|
||||
if mgdb_instance is False:
|
||||
return mw.returnData(False,'无法链接')
|
||||
|
||||
result = {}
|
||||
result["dbs"] = mgdb_instance.list_database_names()
|
||||
doc_list = mgdb_instance.list_database_names()
|
||||
rlist = []
|
||||
for x in doc_list:
|
||||
if not x in ['admin', 'config', 'local']:
|
||||
rlist.append(x)
|
||||
result['list'] = rlist
|
||||
return mw.returnData(True,'ok', result)
|
||||
|
||||
def getCollectionsList(self, args):
|
||||
sid = args['sid']
|
||||
name = args['name']
|
||||
|
||||
mgdb_instance = self.getInstanceBySid(sid).mgdb_conn()
|
||||
if mgdb_instance is False:
|
||||
return mw.returnData(False,'无法链接')
|
||||
|
||||
result = {}
|
||||
collections = mgdb_instance[name].list_collection_names()
|
||||
result['collections'] = collections
|
||||
return mw.returnData(True,'ok', result)
|
||||
|
||||
def getDataList(self, args):
|
||||
from bson.json_util import dumps
|
||||
import json
|
||||
sid = args['sid']
|
||||
db = args['db']
|
||||
collection = args['collection']
|
||||
p = 1
|
||||
size = 10
|
||||
if 'p' in args:
|
||||
p = args['p']
|
||||
|
||||
if 'size' in args:
|
||||
size = args['size']
|
||||
|
||||
mgdb_instance = self.getInstanceBySid(sid).mgdb_conn()
|
||||
if mgdb_instance is False:
|
||||
return mw.returnData(False,'无法链接')
|
||||
|
||||
db_instance = mgdb_instance[db]
|
||||
collection_instance = db_instance[collection]
|
||||
|
||||
start_index = (p - 1) * size
|
||||
end_index = p * size
|
||||
where = {}
|
||||
|
||||
|
||||
result = collection_instance.find(where).skip(start_index).limit(size).sort({'_id':-1})
|
||||
count = collection_instance.count_documents(where)
|
||||
d = []
|
||||
for document in result:
|
||||
d.append(document)
|
||||
|
||||
doc_str_json = dumps(d)
|
||||
result = json.loads(doc_str_json)
|
||||
|
||||
|
||||
page_args = {}
|
||||
page_args['count'] = count
|
||||
page_args['tojs'] = 'mongodbDataList'
|
||||
page_args['p'] = p
|
||||
page_args['row'] = size
|
||||
|
||||
rdata = {}
|
||||
rdata['page'] = mw.getPage(page_args)
|
||||
rdata['list'] = result
|
||||
rdata['count'] = count
|
||||
|
||||
return mw.returnData(True,'ok', rdata)
|
||||
|
||||
# ---------------------------------- run ----------------------------------
|
||||
# 获取 mongodb databases 列表
|
||||
def get_db_list(args):
|
||||
t = nosqlMongodbCtr()
|
||||
return t.getDbList(args)
|
||||
|
||||
# 获取 redis key 列表
|
||||
def get_dbkey_list(args):
|
||||
# 获取 mongodb collections 列表
|
||||
def get_collections_list(args):
|
||||
t = nosqlMongodbCtr()
|
||||
return t.getDbKeyList(args)
|
||||
return t.getCollectionsList(args)
|
||||
|
||||
def get_data_list(args):
|
||||
t = nosqlMongodbCtr()
|
||||
return t.getDataList(args)
|
||||
|
||||
def set_kv(args):
|
||||
t = nosqlMongodbCtr()
|
||||
|
||||
@@ -27,4 +27,14 @@
|
||||
border: 1px solid #eee;
|
||||
border-radius: 2px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
#mongodb_search xm-select {
|
||||
min-height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
#mongodb_search xm-select .xm-label .xm-label-block{
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
@@ -16,56 +16,60 @@
|
||||
</div>
|
||||
|
||||
<!-- mongodb start -->
|
||||
<div class="tab-con hide" id="mongodb" style="padding: 0px;">
|
||||
<div id="operationLog" style="position: relative;">
|
||||
<div class="tootls_group tootls_top">
|
||||
<div class="pull-left">
|
||||
<button type="button" title="刷新" class="refresh btn btn-success btn-sm mr5">
|
||||
<span>刷新</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right" style="padding-top: 5px;">
|
||||
<div class="server_list" style="float:left;">
|
||||
<select name="sid" class="bt-input-text c5 mr5">
|
||||
<option value="0">本地服务器</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="db_list" style="float:left;">
|
||||
<select name="db" class="bt-input-text c5 mr5">
|
||||
<option value="0">空</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="search">
|
||||
<input id="mongodb_ksearch" type="text" class="search_input" placeholder="选择表名">
|
||||
<span id="mongodb_ksearch_span" class="glyphicon glyphicon-search" aria-hidden="true"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-con show w-full" id="mongodb" style="padding: 0px;">
|
||||
<div class="tootls_group tootls_top">
|
||||
<div class="pull-left">
|
||||
<button type="button" title="刷新" class="refresh btn btn-success btn-sm mr5">
|
||||
<span>刷新</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="divtable mtb10">
|
||||
|
||||
<div class="pull-right" style="padding-top: 5px;">
|
||||
<div class="server_list" style="float:left;">
|
||||
<select name="sid" class="bt-input-text c5 mr5">
|
||||
<option value="0">本地服务器</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="db_list" style="float:left;">
|
||||
<select name="db" class="bt-input-text c5 mr5">
|
||||
<option value="0">空</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="search" id="mongodb_search"></div>
|
||||
<button type="button" title="刷新" class="refresh btn btn-success btn-sm mr5 ml5" style="float:right;">
|
||||
<span>查找</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="position: relative;">
|
||||
|
||||
<div id="mongodb_table" class="mongodb_table divtable mtb10">
|
||||
<table class="table table-hover">
|
||||
<thead style="position: relative;z-index: 1;">
|
||||
<tr>
|
||||
<th><span>编号</span></th>
|
||||
<th><span>操作类型</span></th>
|
||||
<th><span>详情</span></th>
|
||||
<th><span>操作时间</span></th>
|
||||
<th style="text-align:right;"><span>操作</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dataTables_paginate paging_bootstrap page">
|
||||
<div><span class="Pcurrent">1</span><span class="Pcount">共1条</span></div>
|
||||
|
||||
<div class="mongodb_list_page page">
|
||||
<div><span class="Pcurrent">0</span><span class="Pcount">共0条</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- mongodb end -->
|
||||
|
||||
<!-- reids start -->
|
||||
<div class="tab-con show w-full" id="redis" style="padding: 0px;">
|
||||
<div class="tab-con hide" id="redis" style="padding: 0px;">
|
||||
<div id="redis_ctr" style="position: relative;">
|
||||
<div class="tootls_group tootls_top">
|
||||
<div class="pull-left">
|
||||
|
||||
@@ -146,33 +146,155 @@ function mongodbGetSid(){
|
||||
return 0;
|
||||
}
|
||||
|
||||
function mongodbGetDbName(){
|
||||
return $('.db_list select[name="db"]').val();
|
||||
}
|
||||
|
||||
var mogodb_db_list;
|
||||
function mongodbCollectionName(){
|
||||
return mogodb_db_list.getValue('value')[0];
|
||||
}
|
||||
|
||||
function mongodbGetList(){
|
||||
var sid = mongodbGetSid();
|
||||
mgdbPostCB('get_db_list',{'sid':sid} ,function(rdata){
|
||||
if (rdata.data.status){
|
||||
var list = rdata.data.data;
|
||||
var list = rdata.data.data['list'];
|
||||
var content = '';
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
var name = list[i];
|
||||
if (i == 0){
|
||||
content += '<span data-id="'+i+'" class="on">'+list[i]['name'] + '('+ list[i]['keynum'] +')</span>';
|
||||
content += '<option value="'+name+'" selected>'+name+'</option>';
|
||||
} else {
|
||||
content += '<span data-id="'+i+'">'+list[i]['name'] + '('+ list[i]['keynum'] +')</span>';
|
||||
content += '<option value="'+name+'">'+name+'</option>';
|
||||
}
|
||||
}
|
||||
$('#redis_list_tab .tab-nav').html(content);
|
||||
$('.db_list select').html(content);
|
||||
|
||||
$('#redis_list_tab .tab-nav span').click(function(){
|
||||
$('#redis_list_tab .tab-nav span').removeClass('on');
|
||||
$(this).addClass('on');
|
||||
redisGetKeyList(1);
|
||||
});
|
||||
// redisGetKeyList(1);
|
||||
if (list.length > 0) {
|
||||
mongodbGetCollections(list[0]);
|
||||
}
|
||||
} else {
|
||||
showInstallLayer();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function mongodbGetCollections(name){
|
||||
var sid = mongodbGetSid();
|
||||
|
||||
mgdbPostCB('get_collections_list',{'sid':sid,'name':name} ,function(rdata){
|
||||
if (rdata.data.status){
|
||||
var list = rdata.data.data['collections'];
|
||||
|
||||
var select_list = [];
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
var t = {};
|
||||
t['name'] = list[i];
|
||||
t['value'] = list[i];
|
||||
|
||||
if (i == 0){
|
||||
t['selected'] = true;
|
||||
}
|
||||
|
||||
select_list.push(t);
|
||||
}
|
||||
|
||||
mogodb_db_list = xmSelect.render({
|
||||
el: '#mongodb_search',
|
||||
radio: true,
|
||||
toolbar: {show: true},
|
||||
data: select_list,
|
||||
on: function(data){
|
||||
//arr: 当前多选已选中的数据
|
||||
var arr = data.arr;
|
||||
//change, 此次选择变化的数据,数组
|
||||
var change = data.change;
|
||||
//isAdd, 此次操作是新增还是删除
|
||||
var isAdd = data.isAdd;
|
||||
if (isAdd){
|
||||
mongodbDataList(1);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
if (select_list.length > 0){
|
||||
mongodbDataList(1);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function mongodbGetDataFields(data){
|
||||
var fields = [];
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var d = data[i];
|
||||
for (var j in d) {
|
||||
if (fields.indexOf(j) == -1 ){
|
||||
fields.push(j);
|
||||
}
|
||||
}
|
||||
}
|
||||
return fields;
|
||||
}
|
||||
|
||||
function mongodbDataList(p){
|
||||
var sid = mongodbGetSid();
|
||||
var db = mongodbGetDbName();
|
||||
var collection = mongodbCollectionName();
|
||||
console.log({'sid':sid,'db':db,'collection':collection,"p":p});
|
||||
mgdbPostCB('get_data_list',{'sid':sid,'db':db,'collection':collection,"p":p} ,function(rdata){
|
||||
if (rdata.data.status){
|
||||
var data = rdata.data.data;
|
||||
var dlist = data['list'];
|
||||
// console.log(dlist);
|
||||
|
||||
var fields = mongodbGetDataFields(dlist);
|
||||
// console.log(fields);
|
||||
|
||||
var header_field = '';
|
||||
for (var i =0 ; i<fields.length ; i++) {
|
||||
header_field += '<th>'+fields[i]+'</th>';
|
||||
}
|
||||
header_field += '<th width="200" class="text-right">操作</th>';
|
||||
|
||||
$('.mongodb_table thead tr').html(header_field);
|
||||
|
||||
var tbody = '';
|
||||
for (var i = 0; i < dlist.length; i++) {
|
||||
tbody += '<tr>';
|
||||
for (var j = 0; j < fields.length; j++) {
|
||||
var f = fields[j];
|
||||
|
||||
if (f in dlist[i]) {
|
||||
if (f == '_id' ){
|
||||
tbody += '<td>'+dlist[i]['_id']['$oid']+'</td>';
|
||||
} else {
|
||||
tbody += '<td>'+dlist[i][f]+'</td>';
|
||||
}
|
||||
} else {
|
||||
tbody += '<td>undefined</td>';
|
||||
}
|
||||
}
|
||||
|
||||
tbody += '<td style="width:200px;text-align:right;">\
|
||||
<a href="javascript:;" data-index="'+i+'" class="btlink edit" title="编辑">编辑</a> | \
|
||||
<a href="javascript:;" data-index="'+i+'" class="btlink" title="删除">删除</a>\
|
||||
</td>';
|
||||
|
||||
tbody += '</tr>';
|
||||
}
|
||||
|
||||
// console.log($(window).width()-230);
|
||||
$('#mongodb_table').css('width', $(window).width()+80).parent().css('width', $(window).width()-240).css('overflow','scroll');
|
||||
$('#mongodb').css('width',$(window).width()-240).css('overflow','hidden');
|
||||
$('.mongodb_table tbody').html(tbody);
|
||||
$('.mongodb_list_page').html(data.page);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ------------------------- mongodb end ---------------------------------
|
||||
|
||||
// ------------------------- redis start ---------------------------------
|
||||
|
||||
Reference in New Issue
Block a user