3166467518
HQ 上传底图与码栏;合伙人单选写入 partner_account.activity_poster_id,用户管理下次登录仍显示同一张图。 Co-authored-by: Cursor <cursoragent@cursor.com>
75 lines
2.2 KiB
TypeScript
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);
|
|
}
|
|
}
|