define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template', 'jstree'], function ($, undefined, Backend, Table, Form, Template, jstree) { var SELECTED_NODE = null; var KEYDATA = null; var Controller = { jstreeoptions: function () { var options = { "types": { "root": { "icon": "/assets/addons/faredis/img/redis_16.png" }, "db": { "icon": "/assets/addons/faredis/img/db_16.png" }, "loading": { "icon": "/assets/addons/faredis/img/loading.gif" }, "key": { "icon": "/assets/addons/faredis/img/key_16.png" } }, "plugins": ["types", "wholerow", "contextmenu"], "contextmenu": { "items": Controller.menu }, "state": { 'opened': true }, 'core': { "data": { "url": "faredis/index", }, "check_callback": true, } }; return options; }, jstreeevent: function () { $('#tree').bind("select_node.jstree", function (event, data) { var inst = data.instance; var selectedNode = inst.get_node(data.selected); SELECTED_NODE = selectedNode; var level = $("[id^='"+selectedNode.id+"']").attr('aria-level'); if(!level || typeof(level)=="undefined"){ level= $("[id^='"+selectedNode.id+"'] a").attr('aria-level'); } if (level == 2) { if (selectedNode.children.length > 0) { return; } inst.set_type(selectedNode, 'loading'); Controller.loadChild(inst, selectedNode); } else if (level == 3) { var tmp = selectedNode.id.split('_'); var db = tmp[0]; tmp.shift(); var key = tmp.join('_'); Controller.loadValue(db, key); } }); }, isJSON:function(str){ if(typeof str == 'string'){ try{ var obj = JSON.parse(str); if(typeof obj =='object' && obj){ return true; } else return false; } catch(e){ return false; } } }, jsonFormat:function(el){ if(Controller.isJSON($(el).val())){ $(el).val(JSON.stringify(eval('('+$(el).val()+')'),null,4)); } }, loadChild: function (inst, selectedNode) { $.post("faredis/index/keys", { db: selectedNode.id - 1 }, function (res) { selectedNode.children = []; $.each(res, function (i, item) { inst.create_node(selectedNode, item, 'last'); }); inst.open_node(selectedNode); inst.set_type(selectedNode, 'db'); }); }, loadValue: function (db, key) { $.post('faredis/index/getValue', { db: db, key: key }, function (res) { //reset $('#c-value').val(''); $('.size').text(''); $('.set-value').val(''); $('.hash-key').val(''); $('.hash-value').val(''); $('.zset-value').val(''); $('.zset-score').val(''); KEYDATA = res; $('.p-title').text("db" + db + "::" + key); $('.c-key').val(key); $('.c-db').val(db); $(".ttl").text(res.ttl); switch (res.type) { case 1://string $('.string').show(); $('.set').hide(); $('.hash').hide(); $('.zset').hide(); $('#c-value').val(res.value); Controller.jsonFormat( $('#c-value')); break; case 2://set case 3://list $('.type-lb').text(res.type == 2 ? "SET:" : "LIST:"); $('.set').show(); $('.string').hide(); $('.hash').hide(); $('.zset').hide(); // $('#set-value').val(res.value); var html = ''; if (res.type == 2) { res.value.forEach(v => { html += "" }); } else { var lidx = 0; res.value.forEach(v => { html += "" }); } $('#set-list').html(html); $('.size').text(res.value.length); break; case 4: $('.type-lb').text("ZSET:"); $('.hash').hide(); $('.string').hide(); $('.set').hide(); $('.zset').show(); let count4 = 0; Object.keys(res.value).forEach(v => { html += "" count4++; }); $('#zset-list').html(html); $('.size').text(count4); break; case 5://hash $('.type-lb').text("HASH:"); $('.hash').show(); $('.string').hide(); $('.set').hide(); $('.zset').hide(); var html = ''; let count = 0; Object.keys(res.value).forEach(v => { html += "" count++; }); $('#hash-list').html(html); $('.size').text(count); break; default: $('.string').hide(); $('.set').hide(); break; } }); }, menu: function (node) { var items = { "reload": { "label": "重载", "icon": "fa fa-refresh", "action": function (data) { console.log('reload'); var inst = $.jstree.reference(data.reference); obj = inst.get_node(data.reference); $.post('faredis/index/reloadDb?db=' + obj.id, null, function (res) { console.log(res); $("#tree").jstree('set_text', obj, res.text); Controller.loadChild(inst, obj); }) } }, "flush": { "label": "清空", "icon": "fa fa-trash", "action": function (data) { console.log('flush'); var inst = $.jstree.reference(data.reference); obj = inst.get_node(data.reference); console.log(obj); Layer.confirm("确认清空吗?", function () { $.post("faredis/index/flushDb", { db: obj.id }, function (res) { Layer.closeAll('dialog'); $("#tree").jstree('set_text', SELECTED_NODE, "DB" + (obj.id - 1) + "(0)"); var childNodes = inst.get_children_dom(obj); $.each(childNodes, function (index, item) { inst.delete_node(item); }) }); }); } }, }; if (node.type == 'db') { return items; } }, index: function () { $('#tree').jstree(Controller.jstreeoptions()); Controller.jstreeevent(); $('.rds_del').on('click', function () { Layer.confirm("确认删除?", function () { $.post("faredis/index/delKey", { db: KEYDATA.db, key: KEYDATA.key }, function (res) { Layer.closeAll('dialog'); $("#tree").jstree('set_text', SELECTED_NODE, KEYDATA.key + "(Removed)"); }); }); }); $('.rds_ttl').on('click', function () { Fast.api.open("faredis/index/ttl?db=" + KEYDATA.db + "&key=" + KEYDATA.key, "修改TTL", { area: "[200px,50px]" }); }); $('.rds_rename').on('click', function () { Fast.api.open("faredis/index/rename?db=" + KEYDATA.db + "&key=" + KEYDATA.key, "修改名称", { area: "[200px,50px]" }); }); //set list $('#set-list').on('click', function () { if ($('.type-lb').first().text() == 'LIST:') { $('.set-value').val($(this).find("option:selected").text()); } else $('.set-value').val($(this).val()); Controller.jsonFormat( $('.set-value')); }); //hash $('#hash-list').on('click', function () { let key = $(this).val(); $('.hash-key').val(key); $('.hash-value').val(KEYDATA.value[key]); Controller.jsonFormat( $('.hash-value')); }); //zset $('#zset-list').on('click', function () { let key = $(this).val(); $('.zset-value').val(key); $('.zset-score').val(KEYDATA.value[key]); }); Form.api.bindevent($("form[role=form]"), function (data, ret) { var treeNode = $('#tree').jstree(true).get_selected(true)[0]; $("#tree").jstree("deselect_all", true); $('#tree').jstree('select_node', treeNode.id); }); }, ttl: function () { Form.api.bindevent($("form[role=form]")); }, rename: function () { Form.api.bindevent($("form[role=form]")); } }; return Controller; });