Files
dukang/apps/h5-partner/src/lib/activity-posters.ts
T
jacy 3166467518 feat(ops): v4.0.2 活动图模板、合伙人选择持久化与用户管理主图
HQ 上传底图与码栏;合伙人单选写入 partner_account.activity_poster_id,用户管理下次登录仍显示同一张图。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 21:36:43 +08:00

75 lines
2.2 KiB
TypeScript

import type { ActivityPosterItem, ActivityPosterSelection } from '@dukang/shared-types';
import { request } from './api';
export async function listActivityPosters() {
const data = await request<ActivityPosterItem[]>('PARTNER_H5', '/partner/activity-posters', {
silent: true,
});
return Array.isArray(data) ? data : [];
}
export async function fetchAssocQrcodeImage(): Promise<Blob> {
const token = localStorage.getItem('accessToken');
const res = await fetch('/api/v1/partner/assoc/qrcode', {
headers: {
Authorization: token ? `Bearer ${token}` : '',
'X-Client-App': 'PARTNER_H5',
},
});
if (!res.ok) throw new Error('下载二维码失败');
return res.blob();
}
export async function fetchActivityPosterImage(id: string): Promise<Blob> {
const token = localStorage.getItem('accessToken');
const res = await fetch(`/api/v1/partner/activity-posters/${id}/image`, {
headers: {
Authorization: token ? `Bearer ${token}` : '',
'X-Client-App': 'PARTNER_H5',
},
});
if (!res.ok) {
const json = await res.json().catch(() => null) as { message?: string } | null;
throw new Error(json?.message || '生成活动图失败');
}
return res.blob();
}
export function downloadBlob(blob: Blob, fileName: string) {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = fileName;
a.click();
URL.revokeObjectURL(url);
}
export async function getActivityPosterSelection() {
return request<ActivityPosterSelection>('PARTNER_H5', '/partner/activity-posters/selection', {
silent: true,
});
}
export async function saveActivityPosterSelection(posterId: string | null) {
return request<ActivityPosterSelection>('PARTNER_H5', '/partner/activity-posters/selection', {
method: 'PUT',
body: JSON.stringify({ posterId }),
silent: true,
});
}
export async function copyActivityCopy(text: string) {
const value = text.trim();
if (!value) throw new Error('暂无文案');
try {
await navigator.clipboard.writeText(value);
} catch {
const ta = document.createElement('textarea');
ta.value = value;
document.body.appendChild(ta);
ta.select();
document.execCommand('copy');
document.body.removeChild(ta);
}
}