fix: bug fix

This commit is contained in:
0xJacky 2022-09-23 23:06:41 +08:00
parent 5e89860068
commit 20daf836e9
No known key found for this signature in database
GPG key ID: B6E4A6E4A561BAF0
4 changed files with 55 additions and 15 deletions

View file

@ -152,7 +152,7 @@ function edit(id: any) {
<a-modal <a-modal
class="std-curd-edit-modal" class="std-curd-edit-modal"
:mask="false" :mask="false"
:title="data.id ? $gettext('Modify') : $gettext('Add')" :title="edit_text?edit_text:(data.id ? $gettext('Modify') : $gettext('Add'))"
:visible="visible" :visible="visible"
:cancel-text="$gettext('Cancel')" :cancel-text="$gettext('Cancel')"
:ok-text="$gettext('OK')" :ok-text="$gettext('OK')"
@ -161,17 +161,24 @@ function edit(id: any) {
:width="modalWidth" :width="modalWidth"
destroyOnClose destroyOnClose
> >
<div class="before-edit" v-if="$slots.beforeEdit">
<slot name="beforeEdit" :data="data"/>
</div>
<std-data-entry <std-data-entry
ref="std_data_entry" ref="std_data_entry"
:data-list="editableColumns()" :data-list="editableColumns()"
v-model:data-source="data" v-model:data-source="data"
:error="error" :error="error"
/> />
<slot name="edit" :data="data"/> <slot name="edit" :data="data"/>
</a-modal> </a-modal>
</div> </div>
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>
.before-edit {
margin-bottom: 20px;
}
</style> </style>

View file

@ -70,8 +70,7 @@ const props = defineProps({
}, },
size: String, size: String,
selectedRowKeys: { selectedRowKeys: {
type: Array, type: Array
default: []
} }
}) })
@ -89,11 +88,14 @@ const params = reactive({
...props.get_params ...props.get_params
}) })
const selectedKeysLocalBuffer: any = ref([])
const selectedRowKeysBuffer = computed({ const selectedRowKeysBuffer = computed({
get() { get() {
return props?.selectedRowKeys ?? [] return props.selectedRowKeys || selectedKeysLocalBuffer.value
}, },
set(v) { set(v) {
selectedKeysLocalBuffer.value = v
emit('update:selectedRowKeys', v) emit('update:selectedRowKeys', v)
} }
}) })
@ -182,13 +184,23 @@ function checked(c: any) {
params[c.target.value] = c.target.checked params[c.target.value] = c.target.checked
} }
function onSelectChange(_selectedRowKeys: any) { const crossPageSelect: any = {}
const n: any = [..._selectedRowKeys]
const t = [...selectedRowKeysBuffer.value].concat(n)
async function onSelectChange(_selectedRowKeys: any) {
const page = params.page || 1
crossPageSelect[page] = await _selectedRowKeys
let t: any = []
Object.keys(crossPageSelect).forEach(v => {
t.push(...crossPageSelect[v])
})
const n: any = [..._selectedRowKeys]
t = await t.concat(n)
// console.log(crossPageSelect)
const set = new Set(t) const set = new Set(t)
selectedRowKeysBuffer.value = Array.from(set) selectedRowKeysBuffer.value = Array.from(set)
emit('onSelected', selectedRowKeysBuffer.value) emit('onSelected', selectedRowKeysBuffer.value)
} }
@ -212,14 +224,16 @@ const reset_search = async () => {
} }
watch(params, () => { watch(params, () => {
router.push({query: params}) if (!props.disable_query_params) {
router.push({query: params})
}
get_list() get_list()
}) })
const rowSelection = computed(() => { const rowSelection = computed(() => {
if (props.selectionType) { if (props.selectionType) {
return { return {
selectedRowKeys: selectedRowKeysBuffer, onChange: onSelectChange, selectedRowKeys: selectedRowKeysBuffer.value, onChange: onSelectChange,
onSelect: onSelect, type: props.selectionType onSelect: onSelect, type: props.selectionType
} }
} else { } else {
@ -307,7 +321,7 @@ async function export_csv() {
<template> <template>
<div class="std-table"> <div class="std-table">
<std-data-entry <std-data-entry
v-if="!disable_search" v-if="!disable_search && searchColumns.length"
:data-list="searchColumns" :data-list="searchColumns"
v-model:data-source="params" v-model:data-source="params"
layout="inline" layout="inline"

View file

@ -73,7 +73,7 @@ watch(props, () => {
:mask="false" :mask="false"
:visible="visible" :visible="visible"
:cancel-text="$gettext('Cancel')" :cancel-text="$gettext('Cancel')"
:ok-text="$gettext('Ok')" :ok-text="$gettext('OK')"
:title="$gettext('Selector')" :title="$gettext('Selector')"
@cancel="visible=false" @cancel="visible=false"
@ok="ok()" @ok="ok()"
@ -102,7 +102,7 @@ watch(props, () => {
.std-selector-container { .std-selector-container {
height: 39.9px; height: 39.9px;
display: flex; display: flex;
align-items: center; align-items: flex-start;
.std-selector { .std-selector {
box-sizing: border-box; box-sizing: border-box;

View file

@ -22,8 +22,27 @@ interface IEdit {
generate: boolean generate: boolean
} }
function fn(obj: Object, desc: any) {
let arr: string[]
if (typeof desc === 'string') {
arr = desc.split('.')
} else {
arr = [...desc]
}
while (arr.length) {
// @ts-ignore
const top = obj[arr.shift()]
if (top === undefined) {
return null
}
obj = top
}
return obj
}
function readonly(edit: IEdit, dataSource: any, dataIndex: any) { function readonly(edit: IEdit, dataSource: any, dataIndex: any) {
return h('p', dataSource[dataIndex]) return h('p', fn(dataSource, dataIndex))
} }
function input(edit: IEdit, dataSource: any, dataIndex: any) { function input(edit: IEdit, dataSource: any, dataIndex: any) {