mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-04-22 15:35:52 +00:00
* docs(agents): add AI agent guidance documentation * feat(sub): add Clash/Mihomo YAML subscription service Add SubClashService to convert subscription links to Clash/Mihomo YAML format for direct client compatibility. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(sub): integrate Clash YAML endpoint into subscription system - Add Clash route handler in SUBController - Update BuildURLs to include Clash URL - Pass Clash settings through subscription pipeline Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(web): add Clash settings to entity and service - Add SubClashEnable, SubClashPath, SubClashURI fields - Add getter methods for Clash configuration - Set default Clash path to /clash/ and enable by default Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(ui): add Clash settings to subscription panels - Add Clash enable switch in general subscription settings - Add Clash path/URI configuration in formats panel - Display Clash QR code on subscription page - Rename JSON tab to "Formats" for clarity Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(js): add Clash support to frontend models - Add subClashEnable, subClashPath, subClashURI to AllSetting - Generate and display Clash QR code on subscription page - Handle Clash URL in subscription data binding Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
179 lines
No EOL
8.7 KiB
HTML
179 lines
No EOL
8.7 KiB
HTML
{{define "settings/panel/subscription/general"}}
|
|
<a-collapse default-active-key="1">
|
|
<a-collapse-panel key="1" header='{{ i18n "pages.xray.generalConfigs"}}'>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subEnable"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subEnableDesc"}}</template>
|
|
<template #control>
|
|
<a-switch v-model="allSetting.subEnable"></a-switch>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>JSON Subscription</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subJsonEnable"}}</template>
|
|
<template #control>
|
|
<a-switch v-model="allSetting.subJsonEnable"></a-switch>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>Clash / Mihomo Subscription</template>
|
|
<template #description>Enable direct Clash and Mihomo YAML
|
|
subscriptions.</template>
|
|
<template #control>
|
|
<a-switch v-model="allSetting.subClashEnable"></a-switch>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subListen"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subListenDesc"}}</template>
|
|
<template #control>
|
|
<a-input type="text" v-model="allSetting.subListen"></a-input>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subDomain"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subDomainDesc"}}</template>
|
|
<template #control>
|
|
<a-input type="text" v-model="allSetting.subDomain"></a-input>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subPort"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subPortDesc"}}</template>
|
|
<template #control>
|
|
<a-input-number v-model="allSetting.subPort" :min="1"
|
|
:min="65535"
|
|
:style="{ width: '100%' }"></a-input-number>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subPath"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subPathDesc"}}</template>
|
|
<template #control>
|
|
<a-input type="text" v-model="allSetting.subPath"
|
|
@input="allSetting.subPath = ((typeof $event === 'string' ? $event : ($event && $event.target ? $event.target.value : '')) || '').replace(/[:*]/g, '')"
|
|
@blur="allSetting.subPath = (p => { p = p || '/'; if (!p.startsWith('/')) p='/' + p; if (!p.endsWith('/')) p += '/'; return p.replace(/\/+/g,'/'); })(allSetting.subPath)"
|
|
placeholder="/sub/"></a-input>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subURI"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subURIDesc"}}</template>
|
|
<template #control>
|
|
<a-input type="text"
|
|
placeholder="(http|https)://domain[:port]/path/"
|
|
v-model="allSetting.subURI"></a-input>
|
|
</template>
|
|
</a-setting-list-item>
|
|
</a-collapse-panel>
|
|
<a-collapse-panel key="2" header='{{ i18n "pages.settings.information" }}'>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subEncrypt"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subEncryptDesc"}}</template>
|
|
<template #control>
|
|
<a-switch v-model="allSetting.subEncrypt"></a-switch>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subShowInfo"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subShowInfoDesc"}}</template>
|
|
<template #control>
|
|
<a-switch v-model="allSetting.subShowInfo"></a-switch>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-divider>{{ i18n "pages.xray.basicTemplate"}}</a-divider>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subTitle"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subTitleDesc"}}</template>
|
|
<template #control>
|
|
<a-input type="text" v-model="allSetting.subTitle"></a-input>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subSupportUrl"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subSupportUrlDesc"}}</template>
|
|
<template #control>
|
|
<a-input type="text" v-model="allSetting.subSupportUrl"
|
|
placeholder="https://example.com"></a-input>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subProfileUrl"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subProfileUrlDesc"}}</template>
|
|
<template #control>
|
|
<a-input type="text" v-model="allSetting.subProfileUrl"
|
|
placeholder="https://example.com"></a-input>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subAnnounce"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subAnnounceDesc"}}</template>
|
|
<template #control>
|
|
<a-textarea v-model="allSetting.subAnnounce"></a-textarea>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-divider>{{ i18n "pages.xray.advancedTemplate"}} (Happ)</a-divider>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n
|
|
"pages.settings.subEnableRouting"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subEnableRoutingDesc"}}</template>
|
|
<template #control>
|
|
<a-switch v-model="allSetting.subEnableRouting"></a-switch>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n
|
|
"pages.settings.subRoutingRules"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subRoutingRulesDesc"}}</template>
|
|
<template #control>
|
|
<a-textarea v-model="allSetting.subRoutingRules"
|
|
placeholder="happ://routing/add/..."></a-textarea>
|
|
</template>
|
|
</a-setting-list-item>
|
|
</a-collapse-panel>
|
|
<a-collapse-panel key="3" header='{{ i18n "pages.settings.certs" }}'>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subCertPath"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subCertPathDesc"}}</template>
|
|
<template #control>
|
|
<a-input type="text" v-model="allSetting.subCertFile"></a-input>
|
|
</template>
|
|
</a-setting-list-item>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subKeyPath"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subKeyPathDesc"}}</template>
|
|
<template #control>
|
|
<a-input type="text" v-model="allSetting.subKeyFile"></a-input>
|
|
</template>
|
|
</a-setting-list-item>
|
|
</a-collapse-panel>
|
|
<a-collapse-panel key="4" header='{{ i18n "pages.settings.intervals"}}'>
|
|
<a-setting-list-item paddings="small">
|
|
<template #title>{{ i18n "pages.settings.subUpdates"}}</template>
|
|
<template #description>{{ i18n
|
|
"pages.settings.subUpdatesDesc"}}</template>
|
|
<template #control>
|
|
<a-input-number :min="1" v-model="allSetting.subUpdates"
|
|
:style="{ width: '100%' }"></a-input-number>
|
|
</template>
|
|
</a-setting-list-item>
|
|
</a-collapse-panel>
|
|
</a-collapse>
|
|
{{end}} |