From f17bb744f49c6f9deba5d5b398a45f56e7ae193e Mon Sep 17 00:00:00 2001 From: Lykin <137850705+tiny-craft@users.noreply.github.com> Date: Wed, 22 May 2024 17:10:58 +0800 Subject: [PATCH] perf: support refresh field in hash (#260) --- backend/services/browser_service.go | 39 +++++++++++++++++++ backend/types/js_resp.go | 9 +++++ .../components/common/EditableTableColumn.vue | 5 ++- .../content_value/ContentValueHash.vue | 27 ++++++++++++- frontend/src/stores/browser.js | 26 +++++++++++++ frontend/src/styles/style.scss | 4 ++ 6 files changed, 108 insertions(+), 2 deletions(-) diff --git a/backend/services/browser_service.go b/backend/services/browser_service.go index f99b49a..a85fac9 100644 --- a/backend/services/browser_service.go +++ b/backend/services/browser_service.go @@ -1331,6 +1331,45 @@ func (b *browserService) SetKeyValue(param types.SetKeyParam) (resp types.JSResp return } +// GetHashValue get hash field +func (b *browserService) GetHashValue(param types.GetHashParam) (resp types.JSResp) { + item, err := b.getRedisClient(param.Server, param.DB) + if err != nil { + resp.Msg = err.Error() + return + } + + client, ctx := item.client, item.ctx + key := strutil.DecodeRedisKey(param.Key) + val, err := client.HGet(ctx, key, param.Field).Result() + if errors.Is(err, redis.Nil) { + resp.Msg = "field in key not found" + return + } + if err != nil { + resp.Msg = err.Error() + return + } + + var displayVal string + if (len(param.Decode) > 0 && param.Decode != types.DECODE_NONE) || + (len(param.Format) > 0 && param.Format != types.FORMAT_RAW) { + decoder := Preferences().GetDecoder() + displayVal, _, _ = convutil.ConvertTo(val, param.Decode, param.Format, decoder) + if displayVal == val { + displayVal = "" + } + } + + resp.Data = types.HashEntryItem{ + Key: param.Field, + Value: val, + DisplayValue: displayVal, + } + resp.Success = true + return +} + // SetHashValue update hash field func (b *browserService) SetHashValue(param types.SetHashParam) (resp types.JSResp) { item, err := b.getRedisClient(param.Server, param.DB) diff --git a/backend/types/js_resp.go b/backend/types/js_resp.go index 77c5fa2..04e1f96 100644 --- a/backend/types/js_resp.go +++ b/backend/types/js_resp.go @@ -101,3 +101,12 @@ type SetZSetParam struct { RetFormat string `json:"retFormat,omitempty"` RetDecode string `json:"retDecode,omitempty"` } + +type GetHashParam struct { + Server string `json:"server"` + DB int `json:"db"` + Key any `json:"key"` + Field string `json:"field,omitempty"` + Format string `json:"format,omitempty"` + Decode string `json:"decode,omitempty"` +} diff --git a/frontend/src/components/common/EditableTableColumn.vue b/frontend/src/components/common/EditableTableColumn.vue index 7c177ca..932f7da 100644 --- a/frontend/src/components/common/EditableTableColumn.vue +++ b/frontend/src/components/common/EditableTableColumn.vue @@ -5,14 +5,16 @@ import Edit from '@/components/icons/Edit.vue' import Close from '@/components/icons/Close.vue' import Save from '@/components/icons/Save.vue' import Copy from '@/components/icons/Copy.vue' +import Refresh from '@/components/icons/Refresh.vue' const props = defineProps({ bindKey: String, editing: Boolean, readonly: Boolean, + canRefresh: Boolean, }) -const emit = defineEmits(['edit', 'delete', 'copy', 'save', 'cancel']) +const emit = defineEmits(['edit', 'delete', 'copy', 'refresh', 'save', 'cancel'])