Initial commit: 网络验证平台
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
<script setup lang="ts">
|
||||
import type { ColumnDef } from '@tanstack/vue-table'
|
||||
|
||||
import { computed } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
import type { DataTableProps } from '@/components/data-table/types'
|
||||
import type { APIKey } from '@/pages/developer/extension/data/schema'
|
||||
|
||||
import BulkActions from '@/components/data-table/bulk-actions.vue'
|
||||
import DataTable from '@/components/data-table/data-table.vue'
|
||||
import { SelectColumn } from '@/components/data-table/table-columns'
|
||||
import { generateVueTable } from '@/components/data-table/use-generate-vue-table'
|
||||
import DataTableViewOptions from '@/components/data-table/view-options.vue'
|
||||
import { getAPIKeyColumns } from '@/pages/developer/extension/components/apikey-columns'
|
||||
import APIKeyDataTableToolbar from '@/pages/developer/extension/components/apikey-data-table-toolbar.vue'
|
||||
|
||||
const props = defineProps<Omit<DataTableProps<APIKey>, 'columns'> & {
|
||||
onToggleStatus: (row: APIKey) => void
|
||||
onRegenerate: (row: APIKey) => void
|
||||
onDelete: (row: APIKey) => void
|
||||
searchFilter?: string
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
'refresh': []
|
||||
'batchEnable': []
|
||||
'batchDisable': []
|
||||
'batchDelete': []
|
||||
'update:searchFilter': [value: string]
|
||||
}>()
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
const columns = computed(() => [
|
||||
SelectColumn as ColumnDef<APIKey>,
|
||||
...getAPIKeyColumns({
|
||||
onToggleStatus: props.onToggleStatus,
|
||||
onRegenerate: props.onRegenerate,
|
||||
onDelete: props.onDelete,
|
||||
}, t),
|
||||
])
|
||||
|
||||
const table = generateVueTable<APIKey>({
|
||||
get data() { return props.data },
|
||||
get loading() { return props.loading },
|
||||
columns: columns.value,
|
||||
}, columns.value)
|
||||
|
||||
const columnLabels: Record<string, string> = {
|
||||
select: 'developer.extension.apiKeys.select',
|
||||
name: 'developer.extension.apiKeys.columns.name',
|
||||
application_name: 'developer.extension.apiKeys.columns.application',
|
||||
access_key: 'developer.extension.apiKeys.columns.accessKey',
|
||||
secret_key: 'developer.extension.apiKeys.columns.secretKey',
|
||||
permissions: 'developer.extension.apiKeys.columns.permissions',
|
||||
status: 'developer.extension.apiKeys.columns.status',
|
||||
created_at: 'developer.extension.apiKeys.columns.createdAt',
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
table,
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<DataTable :columns="columns" :data :loading :table @refresh="emit('refresh')">
|
||||
<template #toolbar>
|
||||
<div class="space-y-3">
|
||||
<BulkActions :table="table" entity-name="apiKeys">
|
||||
<UiButton variant="outline" size="sm" @click="emit('batchEnable')">
|
||||
{{ t('developer.extension.apiKeys.enable') }}
|
||||
</UiButton>
|
||||
<UiButton variant="outline" size="sm" @click="emit('batchDisable')">
|
||||
{{ t('developer.extension.apiKeys.disable') }}
|
||||
</UiButton>
|
||||
<UiButton variant="destructive" size="sm" @click="emit('batchDelete')">
|
||||
{{ t('developer.extension.apiKeys.batchDelete') }}
|
||||
</UiButton>
|
||||
</BulkActions>
|
||||
<div class="flex flex-wrap items-center justify-between gap-2">
|
||||
<div class="flex flex-wrap items-center gap-2">
|
||||
<APIKeyDataTableToolbar
|
||||
:table
|
||||
:search-filter="searchFilter"
|
||||
@update:search-filter="emit('update:searchFilter', $event)"
|
||||
/>
|
||||
<slot name="filters" />
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<DataTableViewOptions :table="table" :column-labels="columnLabels" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</DataTable>
|
||||
</template>
|
||||
Reference in New Issue
Block a user