feat(admin): complete decoration module database integration including DIY pages, RLS and RPCs
This commit is contained in:
91
services/admin/decorationService.uts
Normal file
91
services/admin/decorationService.uts
Normal file
@@ -0,0 +1,91 @@
|
||||
import { rpcOrNull, rpcOrValue } from '@/services/analytics/rpc.uts'
|
||||
|
||||
/**
|
||||
* DIY 页面模型
|
||||
*/
|
||||
export type DiyPage = {
|
||||
id: string
|
||||
name: string
|
||||
type: string
|
||||
config: UTSJSONObject
|
||||
is_home: boolean
|
||||
is_active: boolean
|
||||
created_at: string
|
||||
updated_at: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 DIY 页面分页列表
|
||||
*/
|
||||
export async function fetchDiyPageList(
|
||||
search: string | null = null,
|
||||
type: string | null = null,
|
||||
page: number = 1,
|
||||
pageSize: number = 20
|
||||
): Promise<{ total: number, items: Array<DiyPage> }> {
|
||||
const res = await rpcOrNull('rpc_admin_get_diy_page_list', {
|
||||
p_search: search,
|
||||
p_type: type,
|
||||
p_page: page,
|
||||
p_page_size: pageSize
|
||||
} as UTSJSONObject)
|
||||
|
||||
if (res == null) return { total: 0, items: [] as Array<DiyPage> }
|
||||
|
||||
return {
|
||||
total: (res as any).total as number,
|
||||
items: (res as any).items as Array<DiyPage>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存 DIY 页面配置
|
||||
*/
|
||||
export async function saveDiyPage(
|
||||
id: string | null,
|
||||
name: string,
|
||||
type: string,
|
||||
config: UTSJSONObject,
|
||||
isActive: boolean = true
|
||||
): Promise<string | null> {
|
||||
const res = await rpcOrValue('rpc_admin_save_diy_page', {
|
||||
p_id: id,
|
||||
p_name: name,
|
||||
p_type: type,
|
||||
p_config: config,
|
||||
p_is_active: isActive
|
||||
} as any)
|
||||
|
||||
return res != null ? String(res) : null
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除 DIY 页面
|
||||
*/
|
||||
export async function deleteDiyPage(id: string): Promise<boolean> {
|
||||
const ok = await rpcOrValue('rpc_admin_delete_diy_page', { p_id: id } as any)
|
||||
return ok === true
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置为生效首页
|
||||
*/
|
||||
export async function setAsHomePage(id: string): Promise<boolean> {
|
||||
const ok = await rpcOrValue('rpc_admin_set_home_page', { p_id: id } as any)
|
||||
return ok === true
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取特定类型的生效配置 (供预览或样式页使用)
|
||||
* 逻辑:从列表接口过滤 type 且 is_home = true 的第一项
|
||||
*/
|
||||
export async function getActiveDiyConfig(type: string): Promise<DiyPage | null> {
|
||||
// 由于目前没有单独的 get_active_config RPC,复用 list 接口并按 type 筛选
|
||||
const res = await fetchDiyPageList(null, type, 1, 1)
|
||||
if (res.items.length > 0 && res.items[0].is_home) {
|
||||
// 注意:list 接口可能不返回完整的 config JSON 以节省流量
|
||||
// 如果后续需要完整配置,建议补齐 rpc_admin_get_diy_page_detail
|
||||
return res.items[0]
|
||||
}
|
||||
return null
|
||||
}
|
||||
Reference in New Issue
Block a user