fix: incorrect update index in list when filter on
This commit is contained in:
parent
b601ba255b
commit
3367f13d80
|
@ -876,6 +876,7 @@ func (b *browserService) GetKeyDetail(param types.KeyDetailParam) (resp types.JS
|
|||
continue
|
||||
}
|
||||
items = append(items, types.ListEntryItem{
|
||||
Index: len(items),
|
||||
Value: val,
|
||||
})
|
||||
if doConvert {
|
||||
|
@ -1614,10 +1615,11 @@ func (b *browserService) SetListItem(param types.SetListParam) (resp types.JSRes
|
|||
client, ctx := item.client, item.ctx
|
||||
key := strutil.DecodeRedisKey(param.Key)
|
||||
str := strutil.DecodeRedisKey(param.Value)
|
||||
index := int64(param.Index)
|
||||
var replaced, removed []types.ListReplaceItem
|
||||
if len(str) <= 0 {
|
||||
// remove from list
|
||||
err = client.LSet(ctx, key, param.Index, "---VALUE_REMOVED_BY_TINY_RDM---").Err()
|
||||
err = client.LSet(ctx, key, index, "---VALUE_REMOVED_BY_TINY_RDM---").Err()
|
||||
if err != nil {
|
||||
resp.Msg = err.Error()
|
||||
return
|
||||
|
@ -1639,7 +1641,7 @@ func (b *browserService) SetListItem(param types.SetListParam) (resp types.JSRes
|
|||
resp.Msg = fmt.Sprintf(`save to type "%s" fail: %s`, param.Format, err.Error())
|
||||
return
|
||||
}
|
||||
err = client.LSet(ctx, key, param.Index, saveStr).Err()
|
||||
err = client.LSet(ctx, key, index, saveStr).Err()
|
||||
if err != nil {
|
||||
resp.Msg = err.Error()
|
||||
return
|
||||
|
|
|
@ -56,7 +56,7 @@ type SetListParam struct {
|
|||
Server string `json:"server"`
|
||||
DB int `json:"db"`
|
||||
Key any `json:"key"`
|
||||
Index int64 `json:"index"`
|
||||
Index int `json:"index"`
|
||||
Value any `json:"value"`
|
||||
Format string `json:"format,omitempty"`
|
||||
Decode string `json:"decode,omitempty"`
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
package types
|
||||
|
||||
type ListEntryItem struct {
|
||||
Index int `json:"index"`
|
||||
Value any `json:"v"`
|
||||
DisplayValue string `json:"dv,omitempty"`
|
||||
}
|
||||
|
||||
type ListReplaceItem struct {
|
||||
Index int64 `json:"index"`
|
||||
Index int `json:"index"`
|
||||
Value any `json:"v,omitempty"`
|
||||
DisplayValue string `json:"dv,omitempty"`
|
||||
}
|
||||
|
|
|
@ -107,27 +107,6 @@ func Merge[M ~map[K]V, K Hashable, V any](mapArr ...M) M {
|
|||
return result
|
||||
}
|
||||
|
||||
// DeepMerge 深度递归覆盖src值到dst中
|
||||
// 将返回新的值
|
||||
func DeepMerge[M ~map[K]any, K Hashable](src1, src2 M) M {
|
||||
out := make(map[K]any, len(src1))
|
||||
for k, v := range src1 {
|
||||
out[k] = v
|
||||
}
|
||||
for k, v := range src2 {
|
||||
if v1, ok := v.(map[K]any); ok {
|
||||
if bv, ok := out[k]; ok {
|
||||
if bv1, ok := bv.(map[K]any); ok {
|
||||
out[k] = DeepMerge(bv1, v1)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
out[k] = v
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// Omit 根据条件省略指定元素
|
||||
func Omit[M ~map[K]V, K Hashable, V any](m M, omitFunc func(k K, v V) bool) (M, []K) {
|
||||
result := M{}
|
||||
|
|
|
@ -150,7 +150,7 @@ const saveEdit = async (pos, value, decode, format) => {
|
|||
server: props.name,
|
||||
db: props.db,
|
||||
key: keyName.value,
|
||||
index,
|
||||
index: row.index,
|
||||
value,
|
||||
decode,
|
||||
format,
|
||||
|
@ -180,16 +180,16 @@ const actionColumn = {
|
|||
align: 'center',
|
||||
titleAlign: 'center',
|
||||
fixed: 'right',
|
||||
render: (row, index) => {
|
||||
render: ({ index, v }, _) => {
|
||||
return h(EditableTableColumn, {
|
||||
editing: false,
|
||||
bindKey: `#${index + 1}`,
|
||||
onCopy: async () => {
|
||||
copy(row.v)
|
||||
copy(v)
|
||||
$message.success(i18n.t('interface.copy_succ'))
|
||||
},
|
||||
onEdit: () => {
|
||||
startEdit(index + 1, row.v)
|
||||
startEdit(index + 1, v)
|
||||
},
|
||||
onDelete: async () => {
|
||||
try {
|
||||
|
@ -221,7 +221,7 @@ const columns = computed(() => {
|
|||
width: 80,
|
||||
align: 'center',
|
||||
titleAlign: 'center',
|
||||
render: (row, index) => {
|
||||
render: ({ index }, _) => {
|
||||
return index + 1
|
||||
},
|
||||
},
|
||||
|
@ -236,7 +236,7 @@ const columns = computed(() => {
|
|||
width: 80,
|
||||
align: 'center',
|
||||
titleAlign: 'center',
|
||||
render: (row, index) => {
|
||||
render: ({ index }, _) => {
|
||||
if (index + 1 === currentEditRow.no) {
|
||||
// editing row, show edit state
|
||||
return h(NIcon, { size: 16, color: 'red' }, () => h(Edit, { strokeWidth: 5 }))
|
||||
|
@ -250,12 +250,12 @@ const columns = computed(() => {
|
|||
}
|
||||
})
|
||||
|
||||
const rowProps = (row, index) => {
|
||||
const rowProps = ({ index, v }, _) => {
|
||||
return {
|
||||
onClick: () => {
|
||||
// in edit mode, switch edit row by click
|
||||
if (inEdit.value) {
|
||||
startEdit(index + 1, row.v)
|
||||
startEdit(index + 1, v)
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
|
@ -291,9 +291,25 @@ const useTabStore = defineStore('tab', {
|
|||
case 'list': // {v:string, dv:[string]}[]
|
||||
tab.value = tab.value || []
|
||||
if (prepend === true) {
|
||||
tab.value = [...entries, ...tab.value]
|
||||
const originList = tab.value
|
||||
const list = []
|
||||
let starIndex = 0
|
||||
for (const entry of entries) {
|
||||
entry.index = starIndex++
|
||||
list.push(entry)
|
||||
}
|
||||
for (const entry of originList) {
|
||||
entry.index = starIndex++
|
||||
list.push(entry)
|
||||
}
|
||||
tab.value = list
|
||||
} else {
|
||||
tab.value.push(...entries)
|
||||
const list = tab.value
|
||||
let starIndex = list.length
|
||||
for (const entry of entries) {
|
||||
entry.index = starIndex++
|
||||
list.push(entry)
|
||||
}
|
||||
}
|
||||
tab.length += size(entries)
|
||||
break
|
||||
|
@ -392,6 +408,7 @@ const useTabStore = defineStore('tab', {
|
|||
for (const entry of entries) {
|
||||
if (size(tab.value) > entry.index) {
|
||||
tab.value[entry.index] = {
|
||||
index: entry.index,
|
||||
v: entry.v,
|
||||
dv: entry.dv,
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue