bef09cb5b5
新增 shop-key-delete.ts(删除确认文案 + 删除后目标页回退) 并在 shop-key-api.ts
增加 deleteShopKey(DELETE /api/admin/shop-keys/{id})。
TDD: task-87.test.ts 8 用例先 RED 后 GREEN。
58 lines
2.4 KiB
TypeScript
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}`)
|
|
}
|