asemxin2000's picture
Deploy wechat-article-exporter to Space
6e41657 verified
Raw
History Blame Contribute Delete
5.37 kB
<template>
<UCard class="mx-4 mt-10 flex-1">
<template #header>
<h3 class="text-2xl font-semibold">其他</h3>
</template>
<div class="flex">
<div class="flex-1 flex flex-col space-y-3">
<div class="flex gap-1">
<UCheckbox v-model="preferences.hideDeleted" name="hideDeleted" label="隐藏已删除文章" />
<UPopover mode="hover" :popper="{ placement: 'top' }">
<template #panel>
<p class="max-w-[300px] p-3 text-sm text-gray-500">
是否在文章下载表格中显示已删除的文章。<br />
若勾选该选项,则文章下载表格将过滤掉已经被删除的文章(无论文章内容是否已被下载)。
</p>
</template>
<UIcon color="gray" name="i-heroicons:question-mark-circle-16-solid" class="size-5" />
</UPopover>
</div>
<div class="flex gap-1">
<UCheckbox
v-model="preferences.downloadConfig.forceDownloadContent"
name="forceDownloadContent"
label="强制下载文章内容"
/>
<UPopover mode="hover" :popper="{ placement: 'top' }">
<template #panel>
<p class="max-w-[300px] p-3 text-sm text-gray-500">
在抓取文章内容时,若该文章内容已被下载,则会跳过抓取过程。<br />
若勾选该选项,则会忽略已缓存内容,强制重新下载最新文章内容。<br />
</p>
</template>
<UIcon color="gray" name="i-heroicons:question-mark-circle-16-solid" class="size-5" />
</UPopover>
</div>
<div class="flex gap-1">
<UCheckbox
v-model="preferences.downloadConfig.metadataOverrideContent"
name="metadataOverrideContent"
label="抓取阅读量时是否覆盖文章内容"
/>
<UPopover mode="hover" :popper="{ placement: 'top' }">
<template #panel>
<p class="max-w-[300px] p-3 text-sm text-gray-500">
在抓取阅读量时,会同时下载文章内容。<br />
若勾选该选项,则文章内容会同时保存到缓存中(会占用一定的存储空间)。
</p>
</template>
<UIcon color="gray" name="i-heroicons:question-mark-circle-16-solid" class="size-5" />
</UPopover>
</div>
</div>
<div class="flex-1">
<div>
<p class="flex">
<span class="text-sm">公众号同步频率:</span>
<UPopover mode="hover" :popper="{ placement: 'top' }">
<template #panel>
<p class="max-w-[300px] p-3 text-sm text-gray-500">
在同步公众号文章数据时,程序会自动抓取该公众号的所有文章,直到所有数据同步完成。<br />
该选项用于控制抓取频率,比如设置为 5
就表示每五秒抓取一次。该数据越小,同步的越快,但是容易被封号。推荐不小于3
</p>
</template>
<UIcon color="gray" name="i-heroicons:question-mark-circle-16-solid" class="size-5" />
</UPopover>
</p>
<UInput
type="number"
v-model="preferences.accountSyncSeconds"
placeholder="配置公众号同步频率"
class="w-52 font-mono"
>
<template #trailing>
<span class="text-gray-500 dark:text-gray-400 text-xs"></span>
</template>
</UInput>
</div>
</div>
</div>
<div class="border border-slate-200 p-3 rounded-md mt-5">
<p class="flex justify-between items-center mb-3">
<span class="text-xl font-medium">
同步时间范围:
<span class="text-xs text-slate-500">(说明: 只能从当前时间开始往前同步)</span>
</span>
<span class="text-sm text-blue-500 font-medium">实际同步范围: {{ getActualDateRange() }}</span>
</p>
<div class="flex gap-3">
<USelectMenu
class="w-1/2"
v-model="preferences.syncDateRange"
:options="DURATION_OPTIONS"
value-attribute="value"
option-attribute="label"
/>
<UPopover v-if="preferences.syncDateRange === 'point'" :popper="{ placement: 'bottom-start' }">
<UButton color="gray" icon="i-heroicons-calendar-days-20-solid" :label="formatDate()" />
<template #panel="{ close }">
<BaseDatePicker v-model="preferences.syncDatePoint" is-required @close="close" />
</template>
</UPopover>
</div>
</div>
</UCard>
</template>
<script setup lang="ts">
import dayjs from 'dayjs';
import type { Preferences } from '~/types/preferences';
const { getActualDateRange, getSelectOptions } = useSyncDeadline();
const preferences: Ref<Preferences> = usePreferences() as unknown as Ref<Preferences>;
const DURATION_OPTIONS = getSelectOptions();
function formatDate() {
return dayjs.unix(preferences.value.syncDatePoint).format('YYYY-MM-DD');
}
</script>