Files
crawler-plugin/admin-frontend-vue/src/pages/shop/shop-key-api.ts
T
huangzd1997 bef09cb5b5 task-87(店铺中心): 实现密钥删除确认和刷新
新增 shop-key-delete.ts(删除确认文案 + 删除后目标页回退) 并在 shop-key-api.ts
增加 deleteShopKey(DELETE /api/admin/shop-keys/{id})。

TDD: task-87.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:41:37 +08:00

58 lines
2.4 KiB
TypeScript

/** 店铺密钥列表加载与新增适配(任务 82/84):GET/POST /api/admin/shop-keys + 归一与解析。 */
import { http } from '@/api/http'
import { unwrap } from '@/api/envelope'
import { parseShopKeyPage, toShopKeyItem } from './shop-key-model.ts'
import {
normalizeKeyListParams,
toKeyPageQuery,
type ShopKeyItem,
type ShopKeyListParams,
type ShopKeyPageResult,
} from './shop-dto.ts'
import {
toShopKeyCreateRequest,
validateShopKeyForm,
type ShopKeyFormValues,
} from './shop-key-form-model.ts'
export const SHOP_KEYS_ENDPOINT = '/api/admin/shop-keys'
export async function fetchShopKeyList(params: Partial<ShopKeyListParams> = {}): Promise<ShopKeyPageResult> {
const normalized = normalizeKeyListParams(params)
const { data } = await http.get<unknown>(SHOP_KEYS_ENDPOINT, { params: toKeyPageQuery(normalized) })
return parseShopKeyPage(data)
}
/** 提交新增店铺密钥:先校验(失败抛首条错误不发请求),再 POST,解析返回的新记录。 */
export async function submitCreateShopKey(form: ShopKeyFormValues): Promise<ShopKeyItem> {
const { valid, errors } = validateShopKeyForm(form)
if (!valid) {
throw new Error(Object.values(errors)[0] || '店铺密钥表单校验未通过')
}
const { data } = await http.post<unknown>(SHOP_KEYS_ENDPOINT, toShopKeyCreateRequest(form))
const item = toShopKeyItem(unwrap<unknown>(data))
if (!item) {
throw new Error('新增店铺密钥响应异常:未返回有效记录')
}
return item
}
/** 提交更新店铺密钥:编辑沿用原令牌/账号,更新体字段与新增一致;PUT /api/admin/shop-keys/{id}。 */
export async function updateShopKey(id: number, form: ShopKeyFormValues): Promise<ShopKeyItem> {
const { valid, errors } = validateShopKeyForm(form)
if (!valid) {
throw new Error(Object.values(errors)[0] || '店铺密钥表单校验未通过')
}
const { data } = await http.put<unknown>(`${SHOP_KEYS_ENDPOINT}/${id}`, toShopKeyCreateRequest(form))
const item = toShopKeyItem(unwrap<unknown>(data))
if (!item) {
throw new Error('更新店铺密钥响应异常:未返回有效记录')
}
return item
}
/** 删除店铺密钥:DELETE /api/admin/shop-keys/{id};成功后由调用方按目标页刷新。 */
export async function deleteShopKey(id: number): Promise<void> {
await http.delete<unknown>(`${SHOP_KEYS_ENDPOINT}/${id}`)
}