master
lion 20 hours ago
parent ba17f28ab1
commit 06d14b631a

@ -33,6 +33,12 @@ function stripHtml(html: unknown, max = 12000): string {
.replace(/<script[\s\S]*?<\/script>/gi, '')
.replace(/<style[\s\S]*?<\/style>/gi, '')
.replace(/<[^>]+>/g, ' ')
.replace(/&nbsp;/gi, ' ')
.replace(/&amp;/gi, '&')
.replace(/&lt;/gi, '<')
.replace(/&gt;/gi, '>')
.replace(/&quot;/gi, '"')
.replace(/&#39;/g, "'")
.replace(/\s+/g, ' ')
.trim()
.slice(0, max)
@ -108,8 +114,16 @@ const BASE_COL_SPEC: { zh: string; format: (row: Record<string, unknown>) => str
{ zh: '审核状态', format: (r) => auditStatusLabel(r.audit_status) },
{ zh: '上架', format: (r) => yn(r.is_active) },
{ zh: '热门', format: (r) => yn(r.is_hot) },
{ zh: '开始日期', format: (r) => ymdFromDateValue(r.start_at as string | null | undefined) },
{ zh: '结束日期', format: (r) => ymdFromDateValue(r.end_at as string | null | undefined) },
{
zh: '活动时间',
format: (r) => {
const s = ymdFromDateValue(r.start_at as string | null | undefined)
const e = ymdFromDateValue(r.end_at as string | null | undefined)
if (!s && !e) return ''
if (s && e) return s === e ? s : `${s}${e}`
return s || e
},
},
{ zh: '联系人', format: (r) => str(r.contact_name) },
{ zh: '联系电话', format: (r) => str(r.contact_phone) },
{ zh: '详情正文', format: (r) => stripHtml(r.detail_html) },

@ -136,6 +136,8 @@ const filters = reactive({
is_active: undefined as '1' | '0' | undefined,
schedule_status: undefined as 'not_started' | 'ongoing' | 'ended' | undefined,
audit_status: undefined as 'approved' | 'pending' | 'rejected' | undefined,
/** 活动开始日期区间 [start, end] YYYY-MM-DD */
dateRange: undefined as string[] | undefined,
})
const exportActivitiesLoading = ref(false)
@ -150,6 +152,8 @@ function buildActivitiesListParams(page: number, pageSize: number) {
is_active: filters.is_active,
schedule_status: filters.schedule_status,
audit_status: filters.audit_status,
start_date: filters.dateRange?.[0] || undefined,
end_date: filters.dateRange?.[1] || undefined,
}
}
@ -163,7 +167,8 @@ async function exportActivitiesXlsx() {
let total = Infinity
while (all.length < total) {
const { data } = await http.get('/activities', {
params: buildActivitiesListParams(page, pageSize),
// for_export detail_html /
params: { ...buildActivitiesListParams(page, pageSize), for_export: 1 },
})
const chunk = (data?.data ?? []) as Record<string, unknown>[]
total = Number(data?.total ?? 0)
@ -2138,6 +2143,13 @@ async function removeActivity(row: Activity) {
<a-option value="pending">待审核</a-option>
<a-option value="rejected">已退回</a-option>
</a-select>
<a-range-picker
v-model="filters.dateRange"
allow-clear
value-format="YYYY-MM-DD"
:placeholder="['活动时间起', '活动时间止']"
style="width: 280px"
/>
<a-button type="primary" @click="onSearch"></a-button>
<a-button type="primary" @click="openCreate"></a-button>
<a-button :loading="exportActivitiesLoading" @click="exportActivitiesXlsx"></a-button>

Loading…
Cancel
Save