console/cli add promote tip: fix #283,#492,#439

This commit is contained in:
qishibo 2021-04-28 17:40:14 +08:00
parent fe59ea9c19
commit 1edee5a21a
2 changed files with 244 additions and 5 deletions

205
src/cmds.js Normal file
View File

@ -0,0 +1,205 @@
const readCMD = [
'REFRESH',
'AUTH password',
'BITCOUNT key [start] [end]',
'BITOP operation destkey key [key ...]',
'BITPOS key bit [start] [end]',
'CLIENT LIST [TYPE normal|master|replica|pubsub]',
'CLIENT GETNAME',
'CLUSTER COUNT-FAILURE-REPORTS node-id',
'CLUSTER COUNTKEYSINSLOT slot',
'CLUSTER GETKEYSINSLOT slot count',
'CLUSTER INFO',
'CLUSTER KEYSLOT key',
'CLUSTER NODES',
'CLUSTER SLAVES node-id',
'CLUSTER REPLICAS node-id',
'CLUSTER SLOTS',
'COMMANDS',
'COMMAND COUNT',
'COMMAND GETKEYS',
'COMMAND INFO command-name [command-name ...]',
'CONFIG GET parameter',
'DBSIZE',
'DEBUG OBJECT key',
'DISCARD',
'DUMP key',
'ECHO message',
'EXEC',
'EXISTS key',
'GET key',
'GETBIT key offset',
'GETRANGE key start end',
'HEXISTS key field',
'HGET key field',
'HGETALL key',
'HKEYS key',
'HLEN key',
'HMGET key field [field ...]',
'HSCAN key cursor [MATCH pattern] [COUNT count]',
'HVALS key',
'INFO [section]',
'KEYS pattern',
'LASTSAVE',
'LINDEX key index',
'LLEN key',
'LRANGE key start stop',
'MGET key [key ...]',
'MONITOR',
'MULTI',
'OBJECT subcommand [arguments ...]',
'PING [message]',
'PUBSUB CHANNELS [pattern]',
'PUBSUB NUMSUB [channel-1 ...]',
'PUBSUB NUMPAT',
'PSUBSCRIBE pattern [pattern ...]',
'PTTL key',
'PUNSUBSCRIBE [pattern ...]',
'QUIT',
'RANDOMKEY',
'ROLE',
'SCAN cursor [MATCH pattern] [COUNT count]',
'SCARD key',
'SDIFF key [key ...]',
'SELECT index',
'SINTER key [key ...]',
'SISMEMBER key member',
'SMEMBERS key',
'SRANDMEMBER key [count]',
'SSCAN key cursor [MATCH pattern] [COUNT count]',
'STRLEN key',
'SUBSCRIBE channel [channel ...]',
'SUNION key [key ...]',
'TIME',
'TTL key',
'TYPE key',
'UNSUBSCRIBE [channel ...]',
'UNWATCH',
'WATCH key [key ...]',
'ZCARD key',
'ZCOUNT key min max',
'ZLEXCOUNT key min max',
'ZRANGE key start stop [WITHSCORES]',
'ZRANGEBYLEX key min max [LIMIT offset count]',
'ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]',
'ZRANK key member',
'ZREVRANGE key start stop [WITHSCORES]',
'ZREVRANGEBYLEX key max min [LIMIT offset count]',
'ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]',
'ZREVRANK key member',
'ZSCAN key cursor [MATCH pattern] [COUNT count]',
'ZSCORE key member',
'CLIENT REPLY ON|OFF|SKIP',
'GEOHASH key member [member ...]',
'GEOPOS key member [member ...]',
'GEODIST key member1 member2 [unit]',
'HSTRLEN key field',
'MEMORY DOCTOR',
'MEMORY HELP',
'MEMORY MALLOC-STATS',
'MEMORY STATS',
'MEMORY USAGE key [SAMPLES count]',
'CLIENT ID',
'XINFO [CONSUMERS key groupname] [GROUPS key] [STREAM key] [HELP]',
'XRANGE key start end [COUNT count]',
'XREVRANGE key end start [COUNT count]',
'XLEN key',
'XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]',
'XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]',
'XPENDING key group [start end count] [consumer]',
];
const writeCMD = [
'APPEND key value',
'BGREWRITEAOF',
'BGSAVE',
'BLPOP key [key ...] timeout',
'BRPOP key [key ...] timeout',
'BRPOPLPUSH source destination timeout',
'CONFIG SET parameter value',
'CONFIG RESETSTAT',
'DEBUG SEGFAULT',
'DECR key',
'DECRBY key decrement',
'DEL key [key ...]',
'DISCARD',
'EVAL script numkeys key [key ...] arg [arg ...]',
'EVALSHA sha1 numkeys key [key ...] arg [arg ...]',
'EXPIRE key seconds',
'EXPIREAT key timestamp',
'FLUSHALL',
'FLUSHDB',
'GETSET key value',
'HDEL key field [field ...]',
'HINCRBY key field increment',
'HINCRBYFLOAT key field increment',
'HMSET key field value [field value ...]',
'HSET key field value',
'HSETNX key field value',
'INCR key',
'INCRBY key increment',
'INCRBYFLOAT key increment',
'LINSERT key BEFORE|AFTER pivot value',
'LPOP key',
'LPUSH key value [value ...]',
'LPUSHX key value',
'LREM key count value',
'LSET key index value',
'LTRIM key start stop',
'MIGRATE host port key destination-db timeout',
'MOVE key db',
'MSET key value [key value ...]',
'MSETNX key value [key value ...]',
'OBJECT subcommand [arguments ...]',
'PERSIST key',
'PEXPIRE key milliseconds',
'PEXPIREAT key milliseconds-timestamp',
'PSETEX key milliseconds value',
'PSUBSCRIBE pattern [pattern ...]',
'PUBLISH channel message',
'RENAME key newkey',
'RENAMENX key newkey',
'RESTORE key ttl serialized-value',
'RPOP key',
'RPOPLPUSH source destination',
'RPUSH key value [value ...]',
'RPUSHX key value',
'SADD key member [member ...]',
'SAVE',
'SCRIPT EXISTS script [script ...]',
'SCRIPT FLUSH',
'SCRIPT KILL',
'SCRIPT LOAD script',
'SDIFFSTORE destination key [key ...]',
'SET key value',
'SETBIT key offset value',
'SETEX key seconds value',
'SETNX key value',
'SETRANGE key offset value',
'SHUTDOWN [NOSAVE|SAVE]',
'SINTERSTORE destination key [key ...]',
'SLAVEOF host port',
'SLOWLOG subcommand [argument]',
'SMOVE source destination member',
'SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]',
'SPOP key',
'SREM key member [member ...]',
'SUNIONSTORE destination key [key ...]',
'SYNC',
'ZADD key score member [score] [member]',
'ZINCRBY key increment member',
'ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]',
'ZREM key member [member ...]',
'ZREMRANGEBYLEX key min max',
'ZREMRANGEBYRANK key start stop',
'ZREMRANGEBYSCORE key min max',
'ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]',
];
export default [
...readCMD,
...writeCMD,
];

View File

@ -22,8 +22,9 @@
:select-when-unmatched="true"
:trigger-on-focus="false"
popper-class="cli-console-suggestion"
@keyup.enter.native="consoleExec"
ref="cliParams"
@select='$refs.cliParams.focus()'
@keyup.enter.native="consoleExec"
@keyup.up.native="searchUp"
@keyup.down.native="searchDown">
</el-autocomplete>
@ -34,6 +35,7 @@
<script type="text/javascript">
import rawCommand from '@/rawCommand';
import cmdTips from '@/cmds';
import splitargs from 'redis-splitargs';
export default {
@ -47,6 +49,11 @@ export default {
};
},
props: ['client'],
computed: {
paramsTrim() {
return this.params.replace(/^\s+|\s+$/g, '');
},
},
methods: {
initShow() {
this.$refs.cliParams.focus();
@ -57,23 +64,50 @@ export default {
this.scrollToBottom();
},
inputSuggestion(input, cb) {
if (!this.params) {
if (!this.paramsTrim) {
cb([]);
return;
}
const items = this.inputSuggestionItems.filter(function (item) {
return item.indexOf(input) !== -1;
return item.toLowerCase().indexOf(input.toLowerCase()) !== -1;
});
// add cmd tips
this.addCMDTips(items);
const suggestions = [...new Set(items)].map(function (item) {
return {value: item};
});
cb(suggestions);
},
addCMDTips(items = []) {
const paramsArr = splitargs(this.paramsTrim);
const paramsLen = paramsArr.length;
const cmd = paramsArr[0].toUpperCase();
if (!cmd) {
return;
}
for (var i = cmdTips.length - 1; i >= 0; i--) {
// cmd with param such as 'hget hhh'
if (paramsLen > 1) {
if (cmdTips[i].split(' ')[0] === cmd) {
items.unshift(cmdTips[i]);
}
}
// cmd without param such as 'hget'
else {
if (cmdTips[i].startsWith(cmd)) {
items.unshift(cmdTips[i]);
}
}
}
},
consoleExec() {
const params = this.params.replace(/^\s+|\s+$/g, '');
const params = this.paramsTrim;
const paramsArr = splitargs(params);
this.params = '';
@ -148,7 +182,7 @@ export default {
execFinished(params) {
const operate = params[0];
if (operate === 'select' && !isNaN(params[1])) {
if (operate.toLowerCase() === 'select' && !isNaN(params[1])) {
this.$bus.$emit('changeDb', this.client, params[1]);
}
},