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", "search"], "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'); } $('.addkey').hide(); $('.string').hide(); $('.set').hide(); $('.hash').hide(); $('.zset').hide(); if (level == 2) { $('#c-newdb').val(selectedNode.id); $('.addkey').show(); 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]; var key = selectedNode.text; 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 () { Layer.prompt({ title: "修改TTL", value: KEYDATA.ttl }, function (value, index, ele) { $.get("faredis/index/ttl", { db: KEYDATA.db, key: KEYDATA.key, ttl: value }, function (res) { Layer.close(index); $(".ttl").text(value); }); } ) }); $('.rds_rename').on('click', function () { Layer.prompt({ title: "重命名", value: KEYDATA.key }, function (value, index, ele) { $.get("faredis/index/rename", { db: KEYDATA.db, key: KEYDATA.key, newkey: value }, function (res) { Layer.close(index); $("#tree").jstree('set_text', SELECTED_NODE, value); }); } ) }); //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')); }); $('.rds_add_row').on('click', function () { console.log('add row') Layer.prompt({ title: "增加新项", placeholder: '请输入新项的值' }, function (value, index, ele) { $.get("faredis/index/addValue", { db: KEYDATA.db, key: KEYDATA.key, value: value }, function (res) { Layer.close(index); var treeNode = $('#tree').jstree(true).get_selected(true)[0]; $("#tree").jstree("deselect_all", true); $('#tree').jstree('select_node', treeNode.id); }); } ) }); $('.rds_add_row_hash').on('click', function () { Layer.prompt({ title: "增加新项(key/value)", placeholder: '请输入新项的Key' }, function (value, index, ele) { $.get("faredis/index/addValue", { db: KEYDATA.db, key: KEYDATA.key, hash_key: value, value: $('#hash_value').val() }, function (res) { Layer.close(index); var treeNode = $('#tree').jstree(true).get_selected(true)[0]; $("#tree").jstree("deselect_all", true); $('#tree').jstree('select_node', treeNode.id); }); }); $('.layui-layer-content').append('
') }); $('.rds_add_row_zset').on('click', function () { Layer.prompt({ title: "增加新项", placeholder: '请输入新项的Key' }, function (value, index, ele) { $.get("faredis/index/addValue", { db: KEYDATA.db, key: KEYDATA.key, value: value, zset_score: $('#add_row_zset_score').val() }, function (res) { Layer.close(index); var treeNode = $('#tree').jstree(true).get_selected(true)[0]; $("#tree").jstree("deselect_all", true); $('#tree').jstree('select_node', treeNode.id); }); }); $('.layui-layer-content').append('
') }); $('.rds_delete_row').on('click', function () { var type = $(this).data('type'); console.log("rds_delete_row", $('#' + type).find("option:selected").text()); $.get("faredis/index/delValue", { db: KEYDATA.db, key: KEYDATA.key, value: $('#' + type).find("option:selected").text(), }, function (res) { if (res.code == 1) { var treeNode = $('#tree').jstree(true).get_selected(true)[0]; $("#tree").jstree("deselect_all", true); $('#tree').jstree('select_node', treeNode.id); } else { Layer.alert("操作失败"); } }); }); //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]); }); $('#search_input').keyup(function () { $("#tree").jstree(true).search($('#search_input').val()); }); $('.newsource').hide(); $('.hash-filed').hide(); $('#c-newtype').on('changed.bs.select', function (e) { if (e.target.value == 'zset') { $('.newsource').show(); } else { $('.newsource').hide(); } if (e.target.value == 'hash') { $('.hash-filed').show(); } else { $('.hash-filed').hide(); } }); 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); }); Form.api.bindevent($("form[role=form-add]"), function (data, ret) { Layer.confirm('新增成功,是否重新加载该库下所有keys?', function () { Layer.closeAll(); $.post('faredis/index/reloadDb?db=' + SELECTED_NODE.id, null, function (res) { var inst = $.jstree.reference(SELECTED_NODE); $("#tree").jstree('set_text', SELECTED_NODE, res.text); Controller.loadChild(inst, SELECTED_NODE); }) }) $('#add-reset').trigger('click'); }); } }; return Controller; });