| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- <script setup>
- import { computed } from 'vue';
- import { useI18n } from 'vue-i18n';
- import SettingListItem from '@/components/SettingListItem.vue';
- const { t } = useI18n();
- const props = defineProps({
- allSetting: { type: Object, required: true },
- });
- // Sub path is constrained: no `:` or `*`, must start and end with `/`,
- // and no double slashes. Strip on input, normalize on blur — same
- // behavior as the legacy template.
- const subPath = computed({
- get: () => props.allSetting.subPath,
- set: (v) => {
- props.allSetting.subPath = String(v ?? '').replace(/[:*]/g, '');
- },
- });
- function normalizeSubPath() {
- let p = props.allSetting.subPath || '/';
- if (!p.startsWith('/')) p = '/' + p;
- if (!p.endsWith('/')) p += '/';
- p = p.replace(/\/+/g, '/');
- props.allSetting.subPath = p;
- }
- </script>
- <template>
- <a-collapse default-active-key="1">
- <a-collapse-panel key="1" :header="t('pages.settings.panelSettings')">
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subEnable') }}</template>
- <template #description>{{ t('pages.settings.subEnableDesc') }}</template>
- <template #control>
- <a-switch v-model:checked="allSetting.subEnable" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>JSON subscription</template>
- <template #description>{{ t('pages.settings.subJsonEnable') }}</template>
- <template #control>
- <a-switch v-model:checked="allSetting.subJsonEnable" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>Clash / Mihomo subscription</template>
- <template #control>
- <a-switch v-model:checked="allSetting.subClashEnable" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subListen') }}</template>
- <template #description>{{ t('pages.settings.subListenDesc') }}</template>
- <template #control>
- <a-input v-model:value="allSetting.subListen" type="text" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subDomain') }}</template>
- <template #description>{{ t('pages.settings.subDomainDesc') }}</template>
- <template #control>
- <a-input v-model:value="allSetting.subDomain" type="text" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subPort') }}</template>
- <template #description>{{ t('pages.settings.subPortDesc') }}</template>
- <template #control>
- <a-input-number v-model:value="allSetting.subPort" :min="1" :max="65535" :style="{ width: '100%' }" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subPath') }}</template>
- <template #description>{{ t('pages.settings.subPathDesc') }}</template>
- <template #control>
- <a-input v-model:value="subPath" type="text" placeholder="/sub/" @blur="normalizeSubPath" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subURI') }}</template>
- <template #description>{{ t('pages.settings.subURIDesc') }}</template>
- <template #control>
- <a-input v-model:value="allSetting.subURI" type="text" placeholder="(http|https)://domain[:port]/path/" />
- </template>
- </SettingListItem>
- </a-collapse-panel>
- <a-collapse-panel key="2" :header="t('pages.settings.information')">
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subEncrypt') }}</template>
- <template #description>{{ t('pages.settings.subEncryptDesc') }}</template>
- <template #control>
- <a-switch v-model:checked="allSetting.subEncrypt" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subShowInfo') }}</template>
- <template #description>{{ t('pages.settings.subShowInfoDesc') }}</template>
- <template #control>
- <a-switch v-model:checked="allSetting.subShowInfo" />
- </template>
- </SettingListItem>
- <a-divider>{{ t('pages.settings.subTitle') }}</a-divider>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subTitle') }}</template>
- <template #description>{{ t('pages.settings.subTitleDesc') }}</template>
- <template #control>
- <a-input v-model:value="allSetting.subTitle" type="text" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subSupportUrl') }}</template>
- <template #description>{{ t('pages.settings.subSupportUrlDesc') }}</template>
- <template #control>
- <a-input v-model:value="allSetting.subSupportUrl" type="text" placeholder="https://example.com" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subProfileUrl') }}</template>
- <template #description>{{ t('pages.settings.subProfileUrlDesc') }}</template>
- <template #control>
- <a-input v-model:value="allSetting.subProfileUrl" type="text" placeholder="https://example.com" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subAnnounce') }}</template>
- <template #description>{{ t('pages.settings.subAnnounceDesc') }}</template>
- <template #control>
- <a-textarea v-model:value="allSetting.subAnnounce" />
- </template>
- </SettingListItem>
- <a-divider>Happ</a-divider>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subEnableRouting') }}</template>
- <template #description>{{ t('pages.settings.subEnableRoutingDesc') }}</template>
- <template #control>
- <a-switch v-model:checked="allSetting.subEnableRouting" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subRoutingRules') }}</template>
- <template #description>{{ t('pages.settings.subRoutingRulesDesc') }}</template>
- <template #control>
- <a-textarea v-model:value="allSetting.subRoutingRules" placeholder="happ://routing/add/..." />
- </template>
- </SettingListItem>
- </a-collapse-panel>
- <a-collapse-panel key="3" :header="t('pages.settings.certs')">
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subCertPath') }}</template>
- <template #description>{{ t('pages.settings.subCertPathDesc') }}</template>
- <template #control>
- <a-input v-model:value="allSetting.subCertFile" type="text" />
- </template>
- </SettingListItem>
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subKeyPath') }}</template>
- <template #description>{{ t('pages.settings.subKeyPathDesc') }}</template>
- <template #control>
- <a-input v-model:value="allSetting.subKeyFile" type="text" />
- </template>
- </SettingListItem>
- </a-collapse-panel>
- <a-collapse-panel key="4" :header="t('pages.settings.intervals')">
- <SettingListItem paddings="small">
- <template #title>{{ t('pages.settings.subUpdates') }}</template>
- <template #description>{{ t('pages.settings.subUpdatesDesc') }}</template>
- <template #control>
- <a-input-number v-model:value="allSetting.subUpdates" :min="1" :style="{ width: '100%' }" />
- </template>
- </SettingListItem>
- </a-collapse-panel>
- </a-collapse>
- </template>
|