1.新增游戏管理接口和菜单

2.创建对接第三方文档
This commit is contained in:
2026-04-22 18:44:55 +08:00
parent d3ee3faec4
commit 40277e677d
14 changed files with 1373 additions and 1 deletions

View File

@@ -0,0 +1,141 @@
<template>
<div class="art-full-height">
<TableSearch v-model="searchForm" @search="handleSearch" @reset="resetSearchParams" />
<ElCard class="art-table-card" shadow="never">
<ArtTableHeader v-model:columns="columnChecks" :loading="loading" @refresh="refreshData">
<template #left>
<ElSpace wrap>
<ElButton v-permission="'dice:game:index:save'" @click="showDialog('add')" v-ripple>
<template #icon>
<ArtSvgIcon icon="ri:add-fill" />
</template>
新增
</ElButton>
<ElButton
v-permission="'dice:game:index:destroy'"
:disabled="selectedRows.length === 0"
@click="deleteSelectedRows(api.delete, refreshData)"
v-ripple
>
<template #icon>
<ArtSvgIcon icon="ri:delete-bin-5-line" />
</template>
删除
</ElButton>
</ElSpace>
</template>
</ArtTableHeader>
<ArtTable
ref="tableRef"
rowKey="id"
:loading="loading"
:data="data"
:columns="columns"
:pagination="pagination"
@sort-change="handleSortChange"
@selection-change="handleSelectionChange"
@pagination:size-change="handleSizeChange"
@pagination:current-change="handleCurrentChange"
>
<template #status="{ row }">
<ElTag :type="row.status === 1 ? 'success' : 'info'">{{ row.status === 1 ? '启用' : '禁用' }}</ElTag>
</template>
<template #operation="{ row }">
<div class="flex gap-2">
<SaButton
v-permission="'dice:game:index:update'"
type="secondary"
@click="showDialog('edit', row)"
/>
<SaButton
v-permission="'dice:game:index:destroy'"
type="error"
@click="deleteRow(row, api.delete, refreshData)"
/>
</div>
</template>
</ArtTable>
</ElCard>
<EditDialog
v-model="dialogVisible"
:dialog-type="dialogType"
:data="dialogData"
@success="refreshData"
/>
</div>
</template>
<script setup lang="ts">
import { useTable } from '@/hooks/core/useTable'
import { useSaiAdmin } from '@/composables/useSaiAdmin'
import api from '../../api/game/index'
import TableSearch from './modules/table-search.vue'
import EditDialog from './modules/edit-dialog.vue'
const searchForm = ref({
provider_code: undefined,
game_code: undefined,
game_type: undefined,
status: undefined
})
const handleSearch = (params: Record<string, unknown>) => {
Object.assign(searchParams, params)
getData()
}
const {
columns,
columnChecks,
data,
loading,
getData,
searchParams,
pagination,
resetSearchParams,
handleSortChange,
handleSizeChange,
handleCurrentChange,
refreshData
} = useTable({
core: {
apiFn: api.list,
columnsFactory: () => [
{ type: 'selection', align: 'center' },
{ prop: 'id', label: 'ID', width: 80, align: 'center' },
{ prop: 'provider', label: '供应商', minWidth: 120, align: 'center' },
{ prop: 'provider_code', label: '供应商编码', minWidth: 120, align: 'center' },
{ prop: 'game_code', label: '游戏编号', minWidth: 120, align: 'center' },
{ prop: 'game_key', label: '游戏唯一值', minWidth: 120, align: 'center' },
{ prop: 'game_name', label: '中文名', minWidth: 120, align: 'center' },
{ prop: 'game_name_en', label: '英文名', minWidth: 120, align: 'center' },
{ prop: 'game_type', label: '类型', minWidth: 90, align: 'center' },
{ prop: 'sort', label: '排序', width: 80, align: 'center' },
{ prop: 'status', label: '状态', width: 90, align: 'center', useSlot: true },
{ prop: 'update_time', label: '更新时间', minWidth: 160, align: 'center' },
{
prop: 'operation',
label: '操作',
width: 110,
align: 'center',
fixed: 'right',
useSlot: true
}
]
}
})
const {
dialogType,
dialogVisible,
dialogData,
showDialog,
deleteRow,
deleteSelectedRows,
handleSelectionChange,
selectedRows
} = useSaiAdmin()
</script>