feat: refine tiangong flows and integrate profile avatars

This commit is contained in:
zhouzhibo committed 2026-10-17 22:44:09 +08:00
1 parent 4608dbd5cf
commit 5be2ca6b50
65 files changed
+2099 -532

No files matched your search

+48
View File
@@ -0,0 +1,48 @@
import { request } from './request'
import { createTiangongMock, DeityId } from '../utils/tiangongMock'
import wealth from '../assets/tiangong/proto-wealth.jpg'
import fortune from '../assets/tiangong/proto-fortune.jpg'
import longevity from '../assets/tiangong/proto-longevity.jpg'
import wenchang from '../assets/tiangong/proto-wenchang.jpg'
import matchmaker from '../assets/tiangong/proto-matchmaker.jpg'
import wealthStatue from '../assets/tiangong/proto-wealth-statue.png'
import fortuneStatue from '../assets/tiangong/proto-fortune-statue.png'
export type Deity = { id: DeityId; name: string; ritualName: string; icon: string; statue: string; introduction?: string; missingStatue?: boolean }
export const deityCatalog: Deity[] = [
{ id: 'wealth', name: '财神', ritualName: '武财神', icon: wealth, statue: wealthStatue },
{ id: 'fortune', name: '禄星', ritualName: '禄星', icon: fortune, statue: fortuneStatue, introduction: '上清灵宝天尊灵宝天尊列在第二神阶之中位,仅次于元始天尊。他居三十六天之第二高位上清境,治蕊珠日阙,管七映紫房。其核心神职是演说灵宝真经、开度三界六道众生,掌金箓玉策、敷演道法,主万物生化,调和阴阳,是灵宝法系与斋醮科仪的核心尊神。' },
{ id: 'longevity', name: '寿星', ritualName: '寿星', icon: longevity, statue: longevity, missingStatue: true },
{ id: 'wenchang', name: '文昌星', ritualName: '文昌星', icon: wenchang, statue: wenchang, missingStatue: true },
{ id: 'matchmaker', name: '月老', ritualName: '月老', icon: matchmaker, statue: matchmaker, missingStatue: true }
]
export const getDeity = (id: string | undefined) => deityCatalog.find(item => item.id === id)
export const tiangongMock = createTiangongMock()
export const listMockDeities = () => { const snapshot = tiangongMock.snapshot(); return deityCatalog.map(item => ({ ...item, ...snapshot.deities[item.id] })) }
export type DeityBindingInfo = {
bindingId: string
deityId: DeityId
uniqueId: string
bound: boolean
guardedDays: number
remainingUnbinds: number
}
export type UnbindResult = { binding: DeityBindingInfo; hasAnyBoundDeity: boolean }
// 未接入,不会自动请求。GET沿用现有路径;所有POST及钱包/支架路径为拟定契约,待后端确认。
export const tiangongRemoteContract = {
list: () => request<unknown[]>('/api/tiangong/items'),
detail: (id: DeityId) => request<unknown>(`/api/tiangong/items/${id}`),
invite: (id: DeityId, bindingId: string) => request<unknown>(`/api/tiangong/items/${id}/invite`, { method: 'POST', data: { bindingId } }),
incense: (id: DeityId) => request<unknown>(`/api/tiangong/items/${id}/incense`, { method: 'POST' }),
wish: (id: DeityId, text: string) => request<unknown>(`/api/tiangong/items/${id}/wishes`, { method: 'POST', data: { text } }),
dedicate: (id: DeityId, name: string, text: string) => request<unknown>(`/api/tiangong/items/${id}/dedications`, { method: 'POST', data: { name, text } }),
sendOff: (id: DeityId) => request<unknown>(`/api/tiangong/items/${id}/send-off`, { method: 'POST' }),
offering: (id: DeityId, amount: number) => request<unknown>(`/api/tiangong/items/${id}/offerings`, { method: 'POST', data: { amount } }),
wallet: () => request<unknown>('/api/tiangong/wallet'),
binding: (bindingId: string) => request<DeityBindingInfo>(`/api/tiangong/bindings/${encodeURIComponent(bindingId)}`),
// 拟定接口:服务端需验证NFC凭证、一物一账号及年度额度。Mock不会调用。
resolveBinding: (nfcCredential: string) => request<DeityBindingInfo>('/api/tiangong/bindings/resolve', { method: 'POST', data: { nfcCredential } }),
unbind: (bindingId: string) => request<UnbindResult>(`/api/tiangong/bindings/${encodeURIComponent(bindingId)}/unbind`, { method: 'POST' })
}