【新增】百度云DNS解析功能和宝塔waf部署功能

【新增】本机部署方式
【修复】已知问题
This commit is contained in:
chudong
2025-05-15 10:42:24 +08:00
parent e6947ec5c4
commit 151cec10a0
129 changed files with 28549 additions and 9082 deletions

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747219302071" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7813" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M0 0h1024v1024H0z" fill="#FFFFFF" p-id="7814"></path><path d="M705.024 658.901333L557.098667 738.133333A82.304 82.304 0 0 0 512 811.818667V934.4l353.578667-188.416a25.514667 25.514667 0 0 0 14.250666-22.826667V345.941333l-115.114666 60.16a82.304 82.304 0 0 0-45.056 73.685334v154.794666c-0.426667 11.221333-6.357333 18.688-14.634667 24.32" fill="#DA4725" p-id="7815"></path><path d="M304.768 637.397333v-155.306666c0-30.378667-16.64-58.496-45.098667-73.898667l-115.498666-62.293333v376.618666c0 9.386667 6.314667 18.773333 14.250666 22.869334L512 934.442667v-123.008c0-30.378667-16.64-58.538667-45.098667-73.898667l-147.925333-77.653333c-8.277333-5.632-14.208-13.141333-14.208-22.485334" fill="#028DCF" p-id="7816"></path><path d="M665.770667 181.333333l-140.458667-88.661333a31.530667 31.530667 0 0 0-27.392 0L162.56 303.914667l109.269333 67.328c27.434667 16.725333 60.458667 16.725333 86.016 0l140.458667-88.661334c1.877333-2.090667 3.754667-2.090667 5.973333-2.090666a25.856 25.856 0 0 1 21.418667 2.090666l140.458667 88.661334c27.434667 16.725333 60.458667 16.725333 86.016 0l109.226666-67.328-195.626666-122.538667z" fill="#72AE2C" p-id="7817"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -10,7 +10,17 @@ interface DnsProviderOption {
type: string
}
type DnsProviderType = 'btpanel' | 'aliyun' | 'ssh' | 'tencentcloud' | '1panel' | 'dns' | ''
type DnsProviderType =
| 'aliyun'
| 'tencentcloud'
| 'baidu'
| 'huaweicloud'
| 'cloudflare'
| 'dns'
| 'btpanel'
| '1panel'
| 'ssh'
| ''
interface DnsProviderSelectProps {
// 表单类型,用于获取不同的下拉列表

View File

@@ -1,4 +1,17 @@
import { NButton, NCard, NStep, NSteps, NText, NTooltip } from 'naive-ui'
import {
NButton,
NCard,
NStep,
NSteps,
NText,
NTooltip,
NTabs,
NTabPane,
NInput,
NDivider,
NFormItem,
NSwitch,
} from 'naive-ui'
import { useForm, useFormHooks, useModalClose, useModalOptions, useMessage } from '@baota/naive-ui/hooks'
import { useThemeCssVar } from '@baota/naive-ui/theme'
import { useError } from '@baota/hooks/error'
@@ -7,6 +20,7 @@ import { DeployNodeConfig, DeployNodeInputsConfig } from '@components/flowChart/
import { $t } from '@locales/index'
import SvgIcon from '@components/svgIcon'
import DnsProviderSelect from '@/components/dnsProviderSelect'
import SearchOutlined from '@vicons/antd/es/SearchOutlined'
import styles from './index.module.css'
import verifyRules from './verify'
@@ -30,6 +44,7 @@ export default defineComponent({
fromNodeId: '',
name: '',
},
skip: 1,
},
}),
},
@@ -51,47 +66,75 @@ export default defineComponent({
// 部署类型选项
const deployTypeOptions = [
{ label: $t('t_5_1744958839222'), value: 'ssh' },
{ label: $t('t_10_1745735765165'), value: 'btpanel' },
{ label: $t('t_11_1745735766456'), value: 'btpanel-site' },
{ label: $t('t_12_1745735765571'), value: '1panel' },
{ label: $t('t_13_1745735766084'), value: '1panel-site' },
{ label: $t('t_14_1745735766121'), value: 'tencentcloud-cdn' },
{ label: $t('t_15_1745735768976'), value: 'tencentcloud-cos' },
{ label: $t('t_16_1745735766712'), value: 'aliyun-cdn' },
{ label: $t('t_2_1746697487164'), value: 'aliyun-oss' },
{ label: $t('t_6_1747271296994'), value: 'localhost', category: 'host', icon: 'ssh' },
{ label: $t('t_5_1744958839222'), value: 'ssh', category: 'host', icon: 'ssh' },
{ label: $t('t_10_1745735765165'), value: 'btpanel', category: 'btpanel', icon: 'btpanel' },
{ label: $t('t_11_1745735766456'), value: 'btpanel-site', category: 'btpanel', icon: 'btpanel' },
{ label: $t('t_0_1747215751189'), value: 'btwaf-site', category: 'btpanel', icon: 'btpanel' },
{ label: $t('t_12_1745735765571'), value: '1panel', category: '1panel', icon: '1panel' },
{ label: $t('t_13_1745735766084'), value: '1panel-site', category: '1panel', icon: '1panel' },
{ label: $t('t_14_1745735766121'), value: 'tencentcloud-cdn', category: 'tencentcloud', icon: 'tencentcloud' },
{ label: $t('t_15_1745735768976'), value: 'tencentcloud-cos', category: 'tencentcloud', icon: 'tencentcloud' },
{ label: $t('t_16_1745735766712'), value: 'aliyun-cdn', category: 'aliyun', icon: 'aliyun' },
{ label: $t('t_2_1746697487164'), value: 'aliyun-oss', category: 'aliyun', icon: 'aliyun' },
]
const certOptions = ref<{ label: string; value: string }[]>([]) // 证书选项
const current = ref(1) // 当前步骤
const next = ref(true) // 是否是下一步
const currentStatus = ref<StepStatus>('process') // 当前步骤状态
const currentTab = ref('all') // 当前选中的tab
const searchKeyword = ref('') // 搜索关键字
const param = ref(deepClone(props.node.config)) // 表单参数
const localProvider = ref([{ label: $t('本机部署'), value: 'localhost' }]) // 本地提供商
const provider = computed(() => {
return param.value.provider
? $t('t_4_1746858917773') + '' + deployTypeOptions.find((item) => item.value === param.value.provider)?.label
: $t('t_19_1745735766810')
})
// 过滤后的部署类型选项
const filteredDeployTypes = computed(() => {
let filtered = deployTypeOptions
// 根据标签过滤
if (currentTab.value !== 'all') {
filtered = filtered.filter((item) => item.category === currentTab.value)
}
// 根据搜索关键词过滤
if (searchKeyword.value) {
const keyword = searchKeyword.value.toLowerCase()
filtered = filtered.filter(
(item) => item.label.toLowerCase().includes(keyword) || item.value.toLowerCase().includes(keyword),
)
}
return filtered
})
// 表单配置
const formConfig = computed(() => {
const config = []
config.push(
...[
{
type: 'custom' as const,
render: () => {
return (
<DnsProviderSelect
type={param.value.provider}
path="provider_id"
value={param.value.provider_id}
onUpdate:value={(val: { value: number; type: string }) => {
param.value.provider_id = val.value
}}
/>
)
},
},
param.value.provider !== 'localhost'
? {
type: 'custom' as const,
render: () => {
return (
<DnsProviderSelect
type={param.value.provider}
path="provider_id"
value={param.value.provider_id}
onUpdate:value={(val: { value: number; type: string }) => {
param.value.provider_id = val.value
}}
/>
)
},
}
: useFormSelect($t('主机提供商'), 'provider', localProvider.value, { disabled: true }),
],
useFormSelect($t('t_1_1745748290291'), 'inputs.fromNodeId', certOptions.value, {
onUpdateValue: (val, option: { label: string; value: string }) => {
@@ -101,36 +144,38 @@ export default defineComponent({
}),
)
switch (param.value.provider) {
case 'localhost':
case 'ssh':
config.push(
...[
useFormInput('证书文件路径仅支持PEM格式', 'certPath', {
useFormInput($t('证书文件路径仅支持PEM格式'), 'certPath', {
placeholder: $t('t_30_1746667591892'),
onInput: (val: string) => (param.value.certPath = val.trim()),
}),
useFormInput('私钥文件路径', 'keyPath', {
useFormInput($t('私钥文件路径'), 'keyPath', {
placeholder: $t('t_31_1746667593074'),
onInput: (val: string) => (param.value.keyPath = val.trim()),
}),
useFormTextarea(
'前置命令',
$t('前置命令(可选)'),
'beforeCmd',
{ placeholder: $t('t_21_1745735769154') },
{ placeholder: $t('t_21_1745735769154'), rows: 2 },
{ showRequireMark: false },
),
useFormTextarea(
'后置命令',
$t('后置命令(可选)'),
'afterCmd',
{ placeholder: $t('t_22_1745735767366') },
{ placeholder: $t('t_22_1745735767366'), rows: 2 },
{ showRequireMark: false },
),
],
)
break
case 'btwaf-site':
case 'btpanel-site':
config.push(
...[
useFormInput('站点名称', 'siteName', {
useFormInput($t('站点名称'), 'siteName', {
placeholder: $t('t_23_1745735766455'),
onInput: (val: string) => (param.value.siteName = val.trim()),
}),
@@ -140,7 +185,7 @@ export default defineComponent({
case '1panel-site':
config.push(
...[
useFormInput('站点ID', 'site_id', {
useFormInput($t('站点ID'), 'site_id', {
placeholder: $t('t_24_1745735766826'),
onInput: (val: string) => (param.value.site_id = val.trim()),
}),
@@ -151,7 +196,7 @@ export default defineComponent({
case 'aliyun-cdn':
config.push(
...[
useFormInput('域名', 'domain', {
useFormInput($t('域名'), 'domain', {
placeholder: $t('t_0_1744958839535'),
onInput: (val: string) => (param.value.domain = val.trim()),
}),
@@ -162,7 +207,7 @@ export default defineComponent({
case 'aliyun-oss':
config.push(
...[
useFormInput('域名', 'domain', {
useFormInput($t('域名'), 'domain', {
placeholder: $t('t_0_1744958839535'),
onInput: (val: string) => (param.value.domain = val.trim()),
}),
@@ -170,7 +215,7 @@ export default defineComponent({
)
config.push(
...[
useFormInput('区域', 'region', {
useFormInput($t('区域'), 'region', {
placeholder: $t('t_25_1745735766651'),
onInput: (val: string) => (param.value.region = val.trim()),
}),
@@ -178,7 +223,7 @@ export default defineComponent({
)
config.push(
...[
useFormInput('存储桶', 'bucket', {
useFormInput($t('存储桶'), 'bucket', {
placeholder: $t('t_26_1745735767144'),
onInput: (val: string) => (param.value.bucket = val.trim()),
}),
@@ -186,6 +231,25 @@ export default defineComponent({
)
break
}
config.push({
type: 'custom' as const,
render: () => {
return (
<NFormItem label={$t('重复部署')} path="skip">
<NText>{$t('当与上次部署的证书相同且上次部署成功时')}</NText>
<NSwitch
v-model:value={param.value.skip}
checkedValue={1}
uncheckedValue={0}
class="mx-[.5rem] "
v-slots={{ checked: () => $t('跳过'), unchecked: () => $t('不跳过') }}
/>
<NText>{$t('重新部署')}</NText>
</NFormItem>
)
},
})
return config
})
@@ -195,7 +259,11 @@ export default defineComponent({
*/
const nextStep = async () => {
if (!param.value.provider) return message.error($t('t_0_1746858920894'))
if (param.value.provider === 'localhost') {
delete param.value.provider_id
} else {
param.value.provider_id = props.node.config.provider_id
}
// 加载证书来源选项
certOptions.value = findApplyUploadNodesUp(props.node.id).map((item) => {
return { label: item.name, value: item.id }
@@ -240,11 +308,12 @@ export default defineComponent({
await example.value?.validate()
const tempData = param.value
const inputs = tempData.inputs
updateNode(props.node.id, { inputs: [inputs], config: {} }, false)
delete tempData.inputs
// 将输入值直接传递给updateNodeConfig
updateNodeConfig(props.node.id, {
...tempData,
})
// 单独更新inputs
updateNode(props.node.id, { inputs: [inputs] } as any, false)
isRefreshNode.value = props.node.id
closeModal()
} catch (error) {
@@ -256,6 +325,8 @@ export default defineComponent({
onMounted(() => {
// 隐藏底部按钮
modalOptions.value.footer = false
// 设置弹窗宽度和高度
modalOptions.value.area = [850, 600]
// 如果已经选择了部署类型,则跳转到下一步
if (param.value.provider) {
if (props.node.inputs) param.value.inputs = props.node.inputs[0]
@@ -270,25 +341,61 @@ export default defineComponent({
<NStep title={$t('t_29_1745735768933')} description={$t('t_2_1745738969878')}></NStep>
</NSteps>
{current.value === 1 && (
<div class={styles.cardContainer}>
{deployTypeOptions.map((item) => (
<div
key={item.value}
class={`${styles.optionCard} ${param.value.provider === item.value ? styles.optionCardSelected : ''}`}
onClick={() => {
param.value.provider = item.value
}}
<div class={styles.configContainer}>
<div class={styles.leftPanel}>
<NTabs
type="bar"
placement="left"
value={currentTab.value}
onUpdateValue={(val) => (currentTab.value = val)}
>
<NCard contentClass={styles.cardContent} hoverable bordered={false}>
<SvgIcon
icon={`resources-${item.value.replace(/-[a-z]+$/, '')}`}
size="2rem"
class={`${styles.icon} ${param.value.provider === item.value ? styles.iconSelected : ''}`}
/>
<NText type={param.value.provider === item.value ? 'primary' : 'default'}>{item.label}</NText>
</NCard>
<NTabPane name="all" tab={$t('t_7_1747271292060')} />
<NTabPane name="host" tab={$t('t_1_1745833931535')} />
<NTabPane name="btpanel" tab={$t('t_8_1747271290414')} />
<NTabPane name="1panel" tab={$t('t_9_1747271284765')} />
<NTabPane name="tencentcloud" tab={$t('t_3_1747019616129')} />
<NTabPane name="aliyun" tab={$t('t_2_1747019616224')} />
</NTabs>
</div>
<div class={styles.rightPanel}>
<div class={styles.searchBar}>
<NInput
value={searchKeyword.value}
onUpdateValue={(val) => (searchKeyword.value = val)}
placeholder={$t('搜索部署类型')}
clearable
>
{{
suffix: () => (
<div class="flex items-center">
<SearchOutlined class="text-[var(--text-color-3)] w-[1.6rem] cursor-pointer font-bold" />
</div>
),
}}
</NInput>
</div>
))}
<NDivider class="!my-[1rem]" />
<div class={styles.cardContainer}>
{filteredDeployTypes.value.map((item) => (
<div
key={item.value}
class={`${styles.optionCard} ${param.value.provider === item.value ? styles.optionCardSelected : ''}`}
onClick={() => {
param.value.provider = item.value
}}
>
<div class={styles.cardContent}>
<SvgIcon
icon={`resources-${item.icon.replace(/-[a-z]+$/, '')}`}
size="2rem"
class={`${styles.icon} ${param.value.provider === item.value ? styles.iconSelected : ''}`}
/>
<NText type={param.value.provider === item.value ? 'primary' : 'default'}>{item.label}</NText>
</div>
</div>
))}
</div>
</div>
</div>
)}
{current.value === 2 && (

View File

@@ -1,13 +1,35 @@
/* Deploy Node Drawer Styles */
/* 整体布局容器 */
.configContainer {
@apply flex mt-[2.4rem] gap-4;
}
/* 左侧面板样式 */
.leftPanel {
@apply border-r border-solid;
border-color: var(--n-border-color);
}
/* 右侧面板样式 */
.rightPanel {
@apply flex-1 flex flex-col;
}
/* 搜索栏样式 */
.searchBar {
@apply w-full mb-[1rem] px-[0.5rem];
}
/* Card container styles */
.cardContainer {
@apply grid grid-cols-3 gap-4 mt-[2.4rem];
@apply grid grid-cols-3 gap-4 mt-[0.5rem] overflow-y-auto px-[0.5rem] h-[28rem];
grid-auto-rows: min-content;
}
/* Option card styles */
.optionCard {
@apply flex items-center justify-center rounded-[0.4rem] transition-all border-[1px] border-transparent;
@apply flex items-center justify-center rounded-[0.4rem] transition-all border-[1px] border-transparent h-[6.2rem];
border-color: var(--n-border-color);
}
@@ -38,7 +60,7 @@
/* Card content styles */
.cardContent {
@apply flex flex-col items-center justify-center p-[4px] cursor-pointer;
@apply flex flex-col items-center justify-center p-[4px] cursor-pointer pt-[1rem] text-[1.3rem];
}
/* Icon styles */

View File

@@ -37,7 +37,7 @@ export default defineComponent({
// 提示内容
const verificationPrompt = computed(() => {
console.log(props.node.config.provider, 'validationResult')
console.log(validationResult.value, 'validationResult', props.node.config)
if (validationResult.value.valid) return <TypeIcon icon={props.node.config.provider} type="success" />
return $t('t_9_1745735765287')
})

View File

@@ -147,6 +147,7 @@ nodeOptions[DEPLOY] = () =>
config: {
provider: '',
provider_id: '',
skip: 1,
inputs: {
fromNodeId: '',
name: '',

View File

@@ -29,6 +29,7 @@ export default {
config: {
provider: '',
provider_id: '',
skip: 1,
inputs: {
fromNodeId: '',
name: '',

View File

@@ -231,10 +231,11 @@ export interface DeployConfig<
> {
provider: T
provider_id: string
skip: 1 | 0
[key: string]: Z
}
export interface DeployPanelConfig {}
// export interface DeployPanelConfig {}
// 部署节点配置ssh
export interface DeploySSHConfig {
@@ -244,6 +245,9 @@ export interface DeploySSHConfig {
afterCmd?: string // 后置命令
}
// 部署本地节点配置
export interface DeployLocalConfig extends DeploySSHConfig {}
// 部署节点配置(宝塔面板)
export interface DeployBTPanelConfig {
siteName: string
@@ -268,7 +272,7 @@ export interface DeployStorageConfig {
// 部署节点配置
export type DeployNodeConfig = DeployConfig<
DeploySSHConfig | DeployBTPanelConfig | Deploy1PanelConfig | DeployCDNConfig | DeployStorageConfig
DeploySSHConfig | DeployLocalConfig | DeployBTPanelConfig | Deploy1PanelConfig | DeployCDNConfig | DeployStorageConfig
>
// 部署节点输入配置

View File

@@ -4,12 +4,15 @@ import SvgIcon from '../svgIcon/index' // 注意修改引入路径以匹配实
// 定义支持的访问类型
const types = {
localhost: '本机部署',
ssh: 'SSH',
aliyun: '阿里云',
tencentcloud: '腾讯云',
btpanel: '宝塔面板',
'1panel': '1Panel',
huaweicloud: '华为云',
baidu: '百度云',
btpanel: '宝塔面板',
btwaf: '宝塔WAF',
'1panel': '1Panel',
cloudflare: 'Cloudflare',
mail: '邮件',
dingtalk: '钉钉',
@@ -56,10 +59,12 @@ export const AuthApiTypeIcon = defineComponent({
// 所有支持的类型直接映射到对应的资源名称
const iconMap: Record<string, string> = {
localhost: 'ssh',
ssh: 'ssh',
aliyun: 'aliyun',
tencentcloud: 'tencentcloud',
btpanel: 'btpanel',
btwaf: 'btpanel',
'1panel': '1panel',
huaweicloud: 'huaweicloud',
cloudflare: 'cloudflare',
@@ -74,6 +79,7 @@ export const AuthApiTypeIcon = defineComponent({
'aliyun-oss': 'aliyun',
'1panel-site': '1panel',
'btpanel-site': 'btpanel',
baidu: 'baidu',
}
// 返回匹配的图标路径或默认图标

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "مضيف",
"t_3_1747019616129": "تينسنت كلاود",
"t_2_1747019616224": "علي بابا كلاود",
"t_0_1747271295174": "Pagoda WAF - خطأ في تنسيق URL",
"t_1_1747271295484": "الرجاء إدخال مفتاح Pagoda WAF-API",
"t_2_1747271295877": "الرجاء إدخال AccessKey الصحيح لـ Huawei Cloud",
"t_3_1747271294475": "يرجى إدخال Baidu Cloud AccessKey الصحيح",
"t_4_1747271294621": "الرجاء إدخال SecretKey الصحيح لـ Baidu Cloud",
"t_5_1747271291828": "باوتا WAF-URL",
"t_6_1747271296994": "النشر المحلي",
"t_7_1747271292060": "جميع المصادر",
"t_8_1747271290414": "باغودة",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "تحذير: لقد دخلتم منطقة غير معروفة، الصفحة التي تحاول زيارتها غير موجودة، يرجى الضغط على الزر للعودة إلى الصفحة الرئيسية.",
"t_1_1744098801860": "رجوع إلى الصفحة الرئيسية",
"t_2_1744098804908": "نصيحة أمنية: إذا كنت تعتقد أن هذا خطأ، يرجى الاتصال بالمدير على الفور",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "العقدة الحالية تحتوي على بيانات التكوين، هل أنت متأكد أنك تريد حذفها؟",
"t_4_1745765868807": "الرجاء تحديد نوع النشر قبل المتابعة إلى الخطوة التالية",
"t_0_1745833934390": "يرجى اختيار النوع",
"t_1_1745833931535": "مضيف",
"t_2_1745833931404": "منفذ",
"t_3_1745833936770": "فشل في الحصول على بيانات نظرة عامة على الصفحة الرئيسية",
"t_4_1745833932780": "معلومات النسخة",
@@ -488,8 +500,6 @@
"t_4_1746858917773": "محدد",
"t_0_1747019621052": "الرجاء اختيار مزود استضافة{0}",
"t_1_1747019624067": "انقر لضبط مراقبة الموقع وفهم الحالة في الوقت الحقيقي",
"t_2_1747019616224": "علي بابا كلاود",
"t_3_1747019616129": "تينسنت كلاود",
"t_0_1747040228657": "للمجالات المتعددة، يرجى استخدام فواصل إنجليزية لفصلها، على سبيل المثال: test.com,test.cn",
"t_1_1747040226143": "للمجالات العامة، استخدم علامة النجمة *، على سبيل المثال: *.test.com",
"t_0_1747042966820": "الرجاء إدخال مفتاح Cloudflare API الصحيح",
@@ -508,5 +518,6 @@
"t_0_1747110184700": "اختيار الشهادة",
"t_1_1747110191587": "إذا كنت بحاجة إلى تعديل محتوى الشهادة والمفتاح، فاختر شهادة مخصصة",
"t_2_1747110193465": "عند اختيار شهادة غير مخصصة، لا يمكن تعديل محتوى الشهادة أو المفتاح",
"t_3_1747110185110": "تحميل وتقديم"
"t_3_1747110185110": "تحميل وتقديم",
"t_0_1747215751189": "موقع ويف باغودا"
}

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "Host",
"t_3_1747019616129": "Tencent Cloud",
"t_2_1747019616224": "Alibaba Cloud",
"t_0_1747271295174": "Pagoda WAF - URL format error",
"t_1_1747271295484": "Please enter the Pagoda WAF-API key",
"t_2_1747271295877": "Please enter the correct Huawei Cloud AccessKey",
"t_3_1747271294475": "Please enter the correct Baidu Cloud AccessKey",
"t_4_1747271294621": "Please enter the correct Baidu Cloud SecretKey",
"t_5_1747271291828": "Baota WAF-URL",
"t_6_1747271296994": "Local Deployment",
"t_7_1747271292060": "All sources",
"t_8_1747271290414": "Pagoda",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "Warning: You have entered an unknown area, the page you are visiting does not exist, please click the button to return to the homepage.",
"t_1_1744098801860": "Return Home",
"t_2_1744098804908": "Safety Tip: If you think this is an error, please contact the administrator immediately",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "The current node has configuration data, are you sure you want to delete it?",
"t_4_1745765868807": "Please select the deployment type before proceeding to the next step",
"t_0_1745833934390": "Please select type",
"t_1_1745833931535": "Host",
"t_2_1745833931404": "port",
"t_3_1745833936770": "Failed to get homepage overview data",
"t_4_1745833932780": "Version information",
@@ -488,8 +500,6 @@
"t_4_1746858917773": "Selected",
"t_0_1747019621052": "Please select a host provider{0}",
"t_1_1747019624067": "Click to set up website monitoring and grasp real-time status",
"t_2_1747019616224": "Alibaba Cloud",
"t_3_1747019616129": "Tencent Cloud",
"t_0_1747040228657": "For multiple domains, please use English commas to separate them, for example: test.com,test.cn",
"t_1_1747040226143": "For wildcard domains, use an asterisk *, for example: *.test.com",
"t_0_1747042966820": "Please enter the correct Cloudflare API key",
@@ -508,5 +518,6 @@
"t_0_1747110184700": "Select certificate",
"t_1_1747110191587": "If you need to modify the certificate content and key, please choose a custom certificate",
"t_2_1747110193465": "When a non-custom certificate is selected, neither the certificate content nor the key can be modified",
"t_3_1747110185110": "Upload and submit"
"t_3_1747110185110": "Upload and submit",
"t_0_1747215751189": "Pagoda WAF Website"
}

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "Host",
"t_3_1747019616129": "Tencent Cloud",
"t_2_1747019616224": "Alibaba Cloud",
"t_0_1747271295174": "Pagoda WAF - Error de formato de URL",
"t_1_1747271295484": "Por favor, introduzca la clave Pagoda WAF-API",
"t_2_1747271295877": "Por favor ingrese el AccessKey correcto de Huawei Cloud",
"t_3_1747271294475": "Por favor, ingrese el Baidu Cloud AccessKey correcto",
"t_4_1747271294621": "Por favor, ingrese el SecretKey correcto de Baidu Cloud",
"t_5_1747271291828": "Baota WAF-URL",
"t_6_1747271296994": "Despliegue Local",
"t_7_1747271292060": "Todas las fuentes",
"t_8_1747271290414": "Pagoda",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "Advertencia: Ha ingresado a una zona desconocida, la página que intenta visitar no existe, por favor, haga clic en el botón para regresar a la página de inicio.",
"t_1_1744098801860": "Volver al inicio",
"t_2_1744098804908": "Consejo de seguridad: Si piensa que es un error, póngase en contacto con el administrador inmediatamente",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "El nodo actual tiene datos de configuración, ¿está seguro de que desea eliminarlo?",
"t_4_1745765868807": "Por favor, seleccione el tipo de implementación antes de continuar con el siguiente paso",
"t_0_1745833934390": "Por favor, seleccione el tipo",
"t_1_1745833931535": "Host",
"t_2_1745833931404": "puerto",
"t_3_1745833936770": "Error al obtener los datos de vista general de la página de inicio",
"t_4_1745833932780": "Información de versión",
@@ -488,8 +500,6 @@
"t_4_1746858917773": "Seleccionado",
"t_0_1747019621052": "Seleccione un proveedor de alojamiento{0}",
"t_1_1747019624067": "Haz clic para configurar el monitoreo del sitio web y conocer el estado en tiempo real",
"t_2_1747019616224": "Alibaba Cloud",
"t_3_1747019616129": "Tencent Cloud",
"t_0_1747040228657": "Para múltiples dominios, utilice comas en inglés para separarlos, por ejemplo: test.com,test.cn",
"t_1_1747040226143": "Para dominios comodín, use un asterisco *, por ejemplo: *.test.com",
"t_0_1747042966820": "Por favor, ingrese la clave API correcta de Cloudflare",
@@ -508,5 +518,6 @@
"t_0_1747110184700": "Seleccionar certificado",
"t_1_1747110191587": "Si necesita modificar el contenido del certificado y la clave, elija un certificado personalizado",
"t_2_1747110193465": "Cuando se selecciona un certificado no personalizado, ni el contenido del certificado ni la clave se pueden modificar",
"t_3_1747110185110": "Subir y enviar"
"t_3_1747110185110": "Subir y enviar",
"t_0_1747215751189": "Sitio web de Pagoda WAF"
}

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "Hôte",
"t_3_1747019616129": "Tencent Cloud",
"t_2_1747019616224": "Alibaba Cloud",
"t_0_1747271295174": "Pagoda WAF - Erreur de format d'URL",
"t_1_1747271295484": "Veuillez saisir la clé Pagoda WAF-API",
"t_2_1747271295877": "Veuillez saisir le bon AccessKey Huawei Cloud",
"t_3_1747271294475": "Veuillez saisir le bon Baidu Cloud AccessKey",
"t_4_1747271294621": "Veuillez entrer le bon SecretKey de Baidu Cloud",
"t_5_1747271291828": "Baota WAF-URL",
"t_6_1747271296994": "Déploiement Local",
"t_7_1747271292060": "Toutes les sources",
"t_8_1747271290414": "Pagode",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "Avertissement : Vous avez entré dans une zone inconnue, la page que vous visitez n'existe pas, veuillez cliquer sur le bouton pour revenir à la page d'accueil.",
"t_1_1744098801860": "Retour à l'accueil",
"t_2_1744098804908": "Avis de sécurité : Si vous pensez que c'est une erreur, veuillez contacter l'administrateur immédiatement",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "Le nœud actuel contient des données de configuration, êtes-vous sûr de vouloir le supprimer ?",
"t_4_1745765868807": "Veuillez sélectionner le type de déploiement avant de passer à l'étape suivante",
"t_0_1745833934390": "Veuillez sélectionner le type",
"t_1_1745833931535": "Hôte",
"t_2_1745833931404": "port",
"t_3_1745833936770": "Échec de la récupération des données de vue d'ensemble de la page d'accueil",
"t_4_1745833932780": "Information de version",
@@ -488,8 +500,6 @@
"t_4_1746858917773": "Sélectionné",
"t_0_1747019621052": "Veuillez choisir un fournisseur d'hébergement{0}",
"t_1_1747019624067": "Cliquez pour configurer la surveillance du site et suivre l'état en temps réel",
"t_2_1747019616224": "Alibaba Cloud",
"t_3_1747019616129": "Tencent Cloud",
"t_0_1747040228657": "Pour plusieurs domaines, veuillez utiliser des virgules anglaises pour les séparer, par exemple : test.com,test.cn",
"t_1_1747040226143": "Pour les domaines génériques, utilisez un astérisque *, par exemple : *.test.com",
"t_0_1747042966820": "Veuillez entrer la clé API Cloudflare correcte",
@@ -508,5 +518,6 @@
"t_0_1747110184700": "Sélectionner le certificat",
"t_1_1747110191587": "Si vous devez modifier le contenu du certificat et la clé, choisissez un certificat personnalisé",
"t_2_1747110193465": "Lorsqu'un certificat non personnalisé est sélectionné, ni le contenu du certificat ni la clé ne peuvent être modifiés",
"t_3_1747110185110": "Télécharger et soumettre"
"t_3_1747110185110": "Télécharger et soumettre",
"t_0_1747215751189": "Site Web Pagoda WAF"
}

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "ホスト",
"t_3_1747019616129": "テンセントクラウド",
"t_2_1747019616224": "アリババクラウド",
"t_0_1747271295174": "Pagoda WAF - URL形式エラー",
"t_1_1747271295484": "宝塔WAF-APIキーを入力してください",
"t_2_1747271295877": "正しいHuaweiクラウドAccessKeyを入力してください",
"t_3_1747271294475": "正しい百度クラウドのAccessKeyを入力してください",
"t_4_1747271294621": "正しい百度クラウドのSecretKeyを入力してください",
"t_5_1747271291828": "宝塔WAF-URL",
"t_6_1747271296994": "ローカルデプロイ",
"t_7_1747271292060": "すべてのソース",
"t_8_1747271290414": "パゴダ",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "警告:未知のエリアに進入しました。アクセスしようとしたページは存在しません。ボタンをクリックしてホームページに戻ってください。",
"t_1_1744098801860": "ホームに戻る",
"t_2_1744098804908": "安全注意:これが誤りだと思われる場合は、すぐに管理者に連絡してください",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "現在のノードには設定データがあります。削除してもよろしいですか?",
"t_4_1745765868807": "デプロイメントタイプを選択してから、次に進んでください",
"t_0_1745833934390": "タイプを選択してください",
"t_1_1745833931535": "ホスト",
"t_2_1745833931404": "ポート",
"t_3_1745833936770": "ホームページの概要データの取得に失敗しました",
"t_4_1745833932780": "バージョン情報",
@@ -488,8 +500,6 @@
"t_4_1746858917773": "選択済み",
"t_0_1747019621052": "ホストプロバイダーを選択してください{0}",
"t_1_1747019624067": "クリックしてウェブサイト監視を設定し、リアルタイム状態を把握する",
"t_2_1747019616224": "アリババクラウド",
"t_3_1747019616129": "テンセントクラウド",
"t_0_1747040228657": "複数のドメインは英語のカンマで区切ってください。例test.com,test.cn",
"t_1_1747040226143": "ワイルドカードドメインにはアスタリスク*を使用してください。例:*.test.com",
"t_0_1747042966820": "正しいCloudflare APIキーを入力してください",
@@ -508,5 +518,6 @@
"t_0_1747110184700": "証明書を選択",
"t_1_1747110191587": "証明書の内容とキーを変更する必要がある場合は、カスタム証明書を選択してください",
"t_2_1747110193465": "非カスタム証明書を選択した場合、証明書の内容とキーはどちらも変更できません",
"t_3_1747110185110": "アップロードして提出"
"t_3_1747110185110": "アップロードして提出",
"t_0_1747215751189": "宝塔WAFウェブサイト"
}

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "호스트",
"t_3_1747019616129": "텐센트 클라우드",
"t_2_1747019616224": "알리바바 클라우드",
"t_0_1747271295174": "Pagoda WAF - URL 형식 오류",
"t_1_1747271295484": "파고다 WAF-API 키를 입력하세요",
"t_2_1747271295877": "올바른 Huawei 클라우드 AccessKey를 입력하세요",
"t_3_1747271294475": "올바른 바이두 클라우드 AccessKey를 입력하세요",
"t_4_1747271294621": "올바른 바이두 클라우드 SecretKey를 입력하세요",
"t_5_1747271291828": "보타 WAF-URL",
"t_6_1747271296994": "로컬 배포",
"t_7_1747271292060": "모든 출처",
"t_8_1747271290414": "탑",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "경고: 알 수 없는 영역에 진입했습니다. 방문하려는 페이지가 존재하지 않습니다. 버튼을 클릭하여 홈페이지로 돌아가세요。",
"t_1_1744098801860": "홈으로 돌아가기",
"t_2_1744098804908": "안전 유의사항: 이가 오류라면 즉시 관리자에게 연락하십시오",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "현재 노드에 구성 데이터가 있습니다. 삭제하시겠습니까?",
"t_4_1745765868807": "배포 유형을 선택한 후 다음 단계로 진행하십시오",
"t_0_1745833934390": "유형을 선택하십시오",
"t_1_1745833931535": "호스트",
"t_2_1745833931404": "포트",
"t_3_1745833936770": "홈페이지 개요 데이터 가져오기 실패",
"t_4_1745833932780": "버전 정보",
@@ -488,8 +500,6 @@
"t_4_1746858917773": "선택됨",
"t_0_1747019621052": "호스트 공급자를 선택하세요{0}",
"t_1_1747019624067": "클릭하여 웹사이트 모니터링을 설정하고 실시간 상태를 파악하세요",
"t_2_1747019616224": "알리바바 클라우드",
"t_3_1747019616129": "텐센트 클라우드",
"t_0_1747040228657": "여러 도메인은 영어 쉼표로 구분하십시오. 예: test.com,test.cn",
"t_1_1747040226143": "와일드카드 도메인에는 별표 *를 사용하세요. 예: *.test.com",
"t_0_1747042966820": "올바른 Cloudflare API 키를 입력하세요",
@@ -508,5 +518,6 @@
"t_0_1747110184700": "인증서 선택",
"t_1_1747110191587": "인증서 내용과 키를 수정해야 하는 경우 사용자 정의 인증서를 선택하십시오",
"t_2_1747110193465": "사용자 정의 인증서가 아닌 것을 선택하면 인증서 내용과 키 모두 수정할 수 없습니다",
"t_3_1747110185110": "업로드 및 제출"
"t_3_1747110185110": "업로드 및 제출",
"t_0_1747215751189": "보타 WAF 웹사이트"
}

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "Host",
"t_3_1747019616129": "Tencent Cloud",
"t_2_1747019616224": "Alibaba Cloud",
"t_0_1747271295174": "Pagoda WAF - Erro de formato de URL",
"t_1_1747271295484": "Por favor, insira a chave Pagoda WAF-API",
"t_2_1747271295877": "Por favor, insira o AccessKey correto da Huawei Cloud",
"t_3_1747271294475": "Por favor, insira o Baidu Cloud AccessKey correto",
"t_4_1747271294621": "Por favor, insira o SecretKey correto do Baidu Cloud",
"t_5_1747271291828": "Baota WAF-URL",
"t_6_1747271296994": "Implantação Local",
"t_7_1747271292060": "Todas as fontes",
"t_8_1747271290414": "Pagode",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "Aviso: Você entrou em uma área desconhecida, a página que você está visitando não existe, por favor, clique no botão para voltar para a página inicial.",
"t_1_1744098801860": "Voltar para a homepage",
"t_2_1744098804908": "Dica de Segurança: Se você acha que isso é um erro, entre em contato com o administrador imediatamente",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "O nó atual possui dados de configuração, tem certeza que deseja excluí-lo?",
"t_4_1745765868807": "Por favor, selecione o tipo de implantação antes de prosseguir para a próxima etapa",
"t_0_1745833934390": "Por favor, selecione o tipo",
"t_1_1745833931535": "Host",
"t_2_1745833931404": "porta",
"t_3_1745833936770": "Falha ao obter dados de visão geral da página inicial",
"t_4_1745833932780": "Informações da versão",
@@ -488,8 +500,6 @@
"t_4_1746858917773": "Selecionado",
"t_0_1747019621052": "Selecione um provedor de hospedagem{0}",
"t_1_1747019624067": "Clique para configurar o monitoramento do site e acompanhar o status em tempo real",
"t_2_1747019616224": "Alibaba Cloud",
"t_3_1747019616129": "Tencent Cloud",
"t_0_1747040228657": "Para vários domínios, use vírgulas em inglês para separá-los, por exemplo: test.com,test.cn",
"t_1_1747040226143": "Para domínios curinga, use um asterisco *, por exemplo: *.test.com",
"t_0_1747042966820": "Por favor, insira a chave de API correta do Cloudflare",
@@ -508,5 +518,6 @@
"t_0_1747110184700": "Selecionar certificado",
"t_1_1747110191587": "Se precisar modificar o conteúdo do certificado e a chave, escolha um certificado personalizado",
"t_2_1747110193465": "Quando um certificado não personalizado é selecionado, nem o conteúdo do certificado nem a chave podem ser modificados",
"t_3_1747110185110": "Enviar e submeter"
"t_3_1747110185110": "Enviar e submeter",
"t_0_1747215751189": "Site do Pagoda WAF"
}

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "Хост",
"t_3_1747019616129": "Tencent Cloud",
"t_2_1747019616224": "Alibaba Cloud",
"t_0_1747271295174": "Pagoda WAF - Ошибка формата URL",
"t_1_1747271295484": "Пожалуйста, введите ключ Pagoda WAF-API",
"t_2_1747271295877": "Пожалуйста, введите правильный AccessKey Huawei Cloud",
"t_3_1747271294475": "Пожалуйста, введите правильный Baidu Cloud AccessKey",
"t_4_1747271294621": "Пожалуйста, введите правильный SecretKey Baidu Cloud",
"t_5_1747271291828": "Баота WAF-URL",
"t_6_1747271296994": "Локальное развертывание",
"t_7_1747271292060": "Все источники",
"t_8_1747271290414": "Пагода",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "Предупреждение: Вы вошли в неизвестную зону, посещаемая страница не существует, пожалуйста, нажмите кнопку, чтобы вернуться на главную страницу.",
"t_1_1744098801860": "Вернуться на главную",
"t_2_1744098804908": "Совет по безопасности: Если вы считаете, что это ошибка, немедленно свяжитесь с администратором",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "Текущий узел содержит данные конфигурации, вы уверены, что хотите их удалить?",
"t_4_1745765868807": "Пожалуйста, выберите тип развертывания, прежде чем перейти к следующему шагу",
"t_0_1745833934390": "Пожалуйста, выберите тип",
"t_1_1745833931535": "Хост",
"t_2_1745833931404": "порт",
"t_3_1745833936770": "Не удалось получить обзорные данные главной страницы",
"t_4_1745833932780": "Информация о версии",
@@ -488,8 +500,6 @@
"t_4_1746858917773": "Выбрано",
"t_0_1747019621052": "Выберите поставщика хоста{0}",
"t_1_1747019624067": "Нажмите, чтобы настроить мониторинг веб-сайта и следить за состоянием в реальном времени",
"t_2_1747019616224": "Alibaba Cloud",
"t_3_1747019616129": "Tencent Cloud",
"t_0_1747040228657": "Для нескольких доменов используйте английские запятые для разделения, например: test.com,test.cn",
"t_1_1747040226143": "Для подстановочных доменов используйте звездочку *, например: *.test.com",
"t_0_1747042966820": "Пожалуйста, введите правильный API-ключ Cloudflare",
@@ -508,5 +518,6 @@
"t_0_1747110184700": "Выбор сертификата",
"t_1_1747110191587": "Если вам нужно изменить содержимое сертификата и ключ, выберите пользовательский сертификат",
"t_2_1747110193465": "При выборе нестандартного сертификата ни содержание сертификата, ни ключ нельзя изменить",
"t_3_1747110185110": "Загрузить и отправить"
"t_3_1747110185110": "Загрузить и отправить",
"t_0_1747215751189": "Веб-сайт Pagoda WAF"
}

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "主机",
"t_3_1747019616129": "腾讯云",
"t_2_1747019616224": "阿里云",
"t_0_1747271295174": "宝塔WAF-URL地址格式错误",
"t_1_1747271295484": "请输入宝塔WAF-API密钥",
"t_2_1747271295877": "请输入正确的华为云AccessKey",
"t_3_1747271294475": "请输入正确的百度云AccessKey",
"t_4_1747271294621": "请输入正确的百度云SecretKey",
"t_5_1747271291828": "宝塔WAF-URL",
"t_6_1747271296994": "本机部署",
"t_7_1747271292060": "全部来源",
"t_8_1747271290414": "宝塔",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "警告:您已进入未知区域,所访问的页面不存在,请点击按钮返回首页。",
"t_1_1744098801860": "返回首页",
"t_2_1744098804908": "安全提示:如果您认为这是个错误,请立即联系管理员",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "当前节点存在配置数据,是否确认删除?",
"t_4_1745765868807": "请选择部署类型后,再进行下一步",
"t_0_1745833934390": "请选择类型",
"t_1_1745833931535": "主机",
"t_2_1745833931404": "端口",
"t_3_1745833936770": "获取首页概览数据失败",
"t_4_1745833932780": "版本信息",
@@ -488,8 +500,6 @@
"t_4_1746858917773": "已选择",
"t_0_1747019621052": "请选择主机提供商{0}",
"t_1_1747019624067": "点击设置网站监控,掌握实时状态",
"t_2_1747019616224": "阿里云",
"t_3_1747019616129": "腾讯云",
"t_0_1747040228657": "多域名请使用英文逗号分隔例如test.com,test.cn",
"t_1_1747040226143": "泛域名请使用*号,例如:*.test.com",
"t_0_1747042966820": "请输入正确的Cloudflare API密钥",
@@ -500,7 +510,7 @@
"t_5_1747042965911": "请输入正确的邮箱账号",
"t_0_1747047213730": "添加自动化部署",
"t_1_1747047213009": "添加证书",
"t_2_1747047214975": "SSL证书管理平台",
"t_2_1747047214975": "AllinSSL 证书管理平台",
"t_3_1747047218669": "域名格式错误,请检查域名格式",
"t_0_1747106957037": "DNS 递归服务器(可选)",
"t_1_1747106961747": "请输入 DNS 递归服务器多个值请用,隔开)",
@@ -508,5 +518,6 @@
"t_0_1747110184700": "选择证书",
"t_1_1747110191587": "如果需要修改证书内容与密钥,请选择自定义证书",
"t_2_1747110193465": "当选择非自定义证书时,证书内容与密钥均不可修改",
"t_3_1747110185110": "上传并提交"
"t_3_1747110185110": "上传并提交",
"t_0_1747215751189": "宝塔WAF网站"
}

View File

@@ -1,4 +1,17 @@
{
"t_1_1745833931535": "主機",
"t_3_1747019616129": "騰訊雲",
"t_2_1747019616224": "阿里雲",
"t_0_1747271295174": "寶塔WAF-URL地址格式錯誤",
"t_1_1747271295484": "請輸入寶塔WAF-API金鑰",
"t_2_1747271295877": "請輸入正確的華為雲AccessKey",
"t_3_1747271294475": "請輸入正確的百度雲AccessKey",
"t_4_1747271294621": "請輸入正確的百度雲SecretKey",
"t_5_1747271291828": "寶塔WAF-URL",
"t_6_1747271296994": "本機部署",
"t_7_1747271292060": "全部來源",
"t_8_1747271290414": "寶塔",
"t_9_1747271284765": "1Panel",
"t_0_1744098811152": "警告:您已進入未知區域,所訪問的頁面不存在,請點擊按鈕返回首頁。",
"t_1_1744098801860": "返回首頁",
"t_2_1744098804908": "安全提示:如果您認為這是個錯誤,請立即聯繫管理員",
@@ -332,7 +345,6 @@
"t_3_1745765920953": "目前節點存在配置數據,是否確認刪除?",
"t_4_1745765868807": "請選擇部署類型後,再進行下一步",
"t_0_1745833934390": "請選擇類型",
"t_1_1745833931535": "主機",
"t_2_1745833931404": "埠",
"t_3_1745833936770": "獲取首頁概覽數據失敗",
"t_4_1745833932780": "版本資訊",
@@ -487,8 +499,6 @@
"t_4_1746858917773": "已選擇",
"t_0_1747019621052": "請選擇主機提供商{0}",
"t_1_1747019624067": "點擊設置網站監控,掌握實時狀態",
"t_2_1747019616224": "阿里雲",
"t_3_1747019616129": "騰訊雲",
"t_0_1747040228657": "多域名請使用英文逗號分隔例如test.com,test.cn",
"t_1_1747040226143": "泛網域請使用*號,例如:*.test.com",
"t_0_1747042966820": "請輸入正確的Cloudflare API密鑰",
@@ -507,5 +517,6 @@
"t_0_1747110184700": "選擇證書",
"t_1_1747110191587": "如果需要修改證書內容與密鑰,請選擇自定義證書",
"t_2_1747110193465": "當選擇非自訂憑證時,憑證內容與金鑰均不可修改",
"t_3_1747110185110": "上傳並提交"
"t_3_1747110185110": "上傳並提交",
"t_0_1747215751189": "寶塔WAF網站"
}

View File

@@ -49,7 +49,7 @@ img {
.n-tabs-tab.n-tabs-tab--active {
background-color: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
/* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); */
font-weight: 600;
width: 100%;
}

View File

@@ -42,7 +42,9 @@ export interface AddAccessParams<
| TencentCloudAccessConfig
| PanelAccessConfig
| HuaWeiCloudAccessConfig
| CloudflareAccessConfig,
| CloudflareAccessConfig
| BaiduCloudAccessConfig
| BtWafSiteAccessConfig,
> {
name: string
type: string
@@ -57,7 +59,9 @@ export interface UpdateAccessParams<
| TencentCloudAccessConfig
| PanelAccessConfig
| HuaWeiCloudAccessConfig
| CloudflareAccessConfig,
| CloudflareAccessConfig
| BaiduCloudAccessConfig
| BtWafSiteAccessConfig,
> extends AddAccessParams<T> {
id: string
}
@@ -96,6 +100,10 @@ export interface PanelAccessConfig {
ignore_ssl: '0' | '1'
}
/**
* 宝塔waf网站授权
*/
export interface BtWafSiteAccessConfig extends PanelAccessConfig {}
/**
* 华为云授权配置
*/
@@ -104,6 +112,10 @@ export interface HuaWeiCloudAccessConfig {
access_key: string
}
/**
* 百度云授权配置
*/
export interface BaiduCloudAccessConfig extends HuaWeiCloudAccessConfig {}
/**
* cloudflare 授权配置
*/
@@ -113,8 +125,6 @@ export interface CloudflareAccessConfig {
}
/** 删除授权请求参数 */
export interface DeleteAccessParams {
id: string

View File

@@ -56,7 +56,7 @@ export interface ReportMail {
sender: string
smtpHost: string
smtpPort: string
smtpTLS: 'true' | 'false'
smtpTLS: true | false
// username: string
}

View File

@@ -281,7 +281,11 @@ export const useApiFormController = (props: { data: AccessItem }) => {
trigger: 'input',
validator: (rule: FormItemRule, value: string, callback: (error?: Error) => void) => {
if (!isUrl(value)) {
return callback(new Error($t('t_2_1745317314362')))
const mapTips = {
btpanel: $t('t_2_1745317314362'),
btwaf: $t('t_0_1747271295174'),
}
return callback(new Error(mapTips[param.value.type as keyof typeof mapTips]))
}
callback()
},
@@ -290,11 +294,12 @@ export const useApiFormController = (props: { data: AccessItem }) => {
trigger: 'input',
validator: (rule: FormItemRule, value: string, callback: (error?: Error) => void) => {
if (!value.length) {
if (param.value.type === 'cloudflare') {
return callback(new Error($t('t_0_1747042966820')))
} else if (param.value.type === 'btpanel') {
return callback(new Error($t('t_1_1747042969705')))
const mapTips = {
cloudflare: $t('t_0_1747042966820'),
btpanel: $t('t_1_1747042969705'),
btwaf: $t('t_1_1747271295484'),
}
return callback(new Error(mapTips[param.value.type as keyof typeof mapTips]))
}
callback()
},
@@ -314,23 +319,35 @@ export const useApiFormController = (props: { data: AccessItem }) => {
message: $t('t_6_1745317313383'),
trigger: 'input',
},
secret_key: {
trigger: 'input',
validator: (rule: FormItemRule, value: string, callback: (error?: Error) => void) => {
if (!value.length) {
if (param.value.type === 'tencentcloud') {
return callback(new Error($t('t_2_1747042967277')))
} else if (param.value.type === 'huaweicloud') {
return callback(new Error($t('t_3_1747042967608')))
}
}
callback()
},
},
access_key: {
required: true,
message: $t('t_4_1747042966254'),
trigger: 'input',
validator: (rule: FormItemRule, value: string, callback: (error?: Error) => void) => {
if (!value.length) {
const mapTips = {
huawei: $t('t_2_1747271295877'),
baidu: $t('t_3_1747271294475'),
}
return callback(new Error(mapTips[param.value.type as keyof typeof mapTips]))
}
callback()
},
},
secret_key: {
trigger: 'input',
validator: (rule: FormItemRule, value: string, callback: (error?: Error) => void) => {
if (!value.length) {
const mapTips = {
tencentcloud: $t('t_2_1747042967277'),
huawei: $t('t_3_1747042967608'),
baidu: $t('t_4_1747271294621'),
}
return callback(new Error(mapTips[param.value.type as keyof typeof mapTips]))
}
callback()
},
},
email: {
trigger: 'input',
@@ -407,8 +424,9 @@ export const useApiFormController = (props: { data: AccessItem }) => {
break
case '1panel':
case 'btpanel':
case 'btwaf':
items.push(
useFormInput($t('t_2_1746667592840'), 'config.url'),
useFormInput(param.value.type === 'btwaf' ? $t('t_5_1747271291828') : $t('t_2_1746667592840'), 'config.url'),
useFormInput($t('t_55_1745289355715'), 'config.api_key'),
useFormSwitch(
$t('t_3_1746667592270'),
@@ -417,9 +435,7 @@ export const useApiFormController = (props: { data: AccessItem }) => {
checkedValue: '1',
uncheckedValue: '0',
},
{
showRequireMark: false,
},
{ showRequireMark: false },
),
)
break
@@ -434,6 +450,7 @@ export const useApiFormController = (props: { data: AccessItem }) => {
items.push(useFormInput('SecretId', 'config.secret_id'), useFormInput('SecretKey', 'config.secret_key'))
break
case 'huaweicloud':
case 'baidu':
items.push(useFormInput('AccessKey', 'config.access_key'), useFormInput('SecretKey', 'config.secret_key'))
break
case 'cloudflare':
@@ -461,6 +478,7 @@ export const useApiFormController = (props: { data: AccessItem }) => {
break
case '1panel':
case 'btpanel':
case 'btwaf':
param.value.config = {
url: '',
api_key: '',
@@ -473,6 +491,19 @@ export const useApiFormController = (props: { data: AccessItem }) => {
access_key_secret: '',
}
break
case 'baidu':
case 'huaweicloud':
param.value.config = {
access_key: '',
secret_key: '',
}
break
case 'cloudflare':
param.value.config = {
email: '',
api_key: '',
}
break
case 'tencentcloud':
param.value.config = {
secret_id: '',

View File

@@ -24,7 +24,7 @@ export default defineComponent({
<BaseComponent
v-slots={{
header: () => (
<div class="flex items-center justify-between">
<div class="flex items-center justify-between mb-[1.6rem]">
<NButton type="primary" onClick={() => fetch()}>
{$t('t_9_1746667589516')}
</NButton>

View File

@@ -214,7 +214,7 @@ export const useController = () => {
*/
const handleViewHistory = async (workflow: WorkflowItem) => {
useModal({
title: workflow ? `${workflow.name} - ${$t('t_9_1745215914666')}` : $t('t_9_1745215914666'),
title: workflow ? `${workflow.name} - ${$t('t_9_1745215914666')}` : $t('t_9_1745215914666'),
component: HistoryModal,
area: 800,
componentProps: { id: workflow.id },

View File

@@ -1,5 +1,5 @@
import { NInput, NButton } from 'naive-ui'
import { useThemeCssVar } from '@baota/naive-ui/theme'
import { useTheme, useThemeCssVar } from '@baota/naive-ui/theme'
import { PlusOutlined } from '@vicons/antd'
import { Search } from '@vicons/carbon'
import { $t } from '@locales/index'
@@ -18,7 +18,8 @@ export default defineComponent({
const cssVar = useThemeCssVar(['contentPadding', 'borderColor', 'headerHeight', 'iconColorHover'])
// 挂载时请求数据
onMounted(() => fetch())
const { theme, themeOverrides } = useTheme()
console.log(theme.value, themeOverrides.value)
return () => (
<div class="h-full flex flex-col" style={cssVar.value}>
<div class="mx-auto max-w-[1600px] w-full p-6">

View File

@@ -6,9 +6,9 @@ import { $t } from '@locales/index'
import { useThemeCssVar } from '@baota/naive-ui/theme'
import { MenuFoldOutlined, MenuUnfoldOutlined } from '@vicons/antd'
import { useController } from './useController'
import styles from './index.module.css'
// import ThemeTips from '@baota/naive-ui/components/themeTips'
export default defineComponent({
setup() {
// 获取控制器中的状态和方法
@@ -65,6 +65,7 @@ export default defineComponent({
<NLayout>
<NLayoutHeader class={styles.header}>
<div class={styles.systemInfo}>
{/* <ThemeTips size="small" /> */}
<NBadge value={1} show={false} dot>
<span class="px-[.5rem] cursor-pointer">v1.0.1</span>
</NBadge>

View File

@@ -56,11 +56,13 @@ export const useLayoutStore = defineStore('layout-store', () => {
// 主机提供商
ssh: { name: 'SSH', access: ['host'] },
btpanel: { name: $t('t_10_1745735765165'), access: ['host'] },
btwaf: { name: '宝塔WAF', access: ['host'] },
'1panel': { name: '1Panel', access: ['host'] },
aliyun: { name: $t('t_2_1747019616224'), access: ['dns', 'host'] },
tencentcloud: { name: $t('t_3_1747019616129'), access: ['dns', 'host'] },
huaweicloud: { name: '华为云', access: ['dns'] },
cloudflare: { name: 'Cloudflare', access: ['dns'] },
baidu: { name: '百度云', access: ['dns'] },
})
/**
@@ -163,7 +165,19 @@ export const useLayoutStore = defineStore('layout-store', () => {
* @returns DNS提供商
*/
const fetchDnsProvider = async (
type: 'btpanel' | 'aliyun' | 'ssh' | 'tencentcloud' | '1panel' | 'dns' | '' = '',
type:
| 'btpanel'
| 'aliyun'
| 'ssh'
| 'tencentcloud'
| '1panel'
| 'dns'
| 'baidu'
| 'huaweicloud'
| 'cloudflare'
| 'baidu'
| ''
| 'btwaf' = '',
): Promise<void> => {
try {
dnsProvider.value = []

View File

@@ -5,8 +5,8 @@ import { $t } from '@locales/index'
import { useController } from './useController'
import styles from './index.module.css'
import LocalesTips from '@baota/naive-ui/components/localesTips'
import ThemeTips from '@baota/naive-ui/components/themeTips'
// import LocalesTips from '@baota/naive-ui/components/localesTips'
// import ThemeTips from '@baota/naive-ui/components/themeTips'
export default defineComponent({
setup() {
@@ -27,8 +27,8 @@ export default defineComponent({
style={`background-image:${isDark.value ? 'url(/static/images/login-bg-dark.svg)' : 'url(/static/images/login-bg.svg)'};`}
>
<div class="absolute z-[99] top-0 right-0 p-[2rem] flex w-[120px] justify-between">
<LocalesTips />
<ThemeTips />
{/* <LocalesTips /> */}
{/* <ThemeTips /> */}
</div>
<div class={styles.loginBox}>
<div class={styles.leftSection}>

View File

@@ -1,4 +1,4 @@
import { NGrid, NFormItemGi, NInput, NSwitch } from 'naive-ui'
import { NGrid, NFormItemGi, NInput, NSwitch, NTooltip } from 'naive-ui'
import { useForm, useModalHooks } from '@baota/naive-ui/hooks'
import { useError } from '@baota/hooks/error'
import { $t } from '@locales/index'
@@ -72,14 +72,38 @@ export default defineComponent({
'smtp-template': (formData: Ref<ReportMail>) => {
return (
<NGrid cols="24" xGap="24">
<NFormItemGi span="12" label={$t('t_14_1745833932440')} path="smtpHost">
<NFormItemGi span="14" label={$t('t_14_1745833932440')} path="smtpHost">
<NInput v-model:value={formData.value.smtpHost} placeholder={$t('t_15_1745833940280')} />
</NFormItemGi>
<NFormItemGi span="7" label={$t('t_16_1745833933819')} path="smtpPort">
<NInput v-model:value={formData.value.smtpPort} placeholder={$t('t_17_1745833935070')} />
</NFormItemGi>
<NFormItemGi span="5" label={$t('t_18_1745833933989')} path="smtpTLS">
<NSwitch v-model:value={formData.value.smtpTLS} checkedValue="true" uncheckedValue="false" />
<NSwitch
v-model:value={formData.value.smtpTLS}
checkedValue="true"
uncheckedValue="false"
onUpdateValue={(val) => {
formData.value.smtpPort = val === 'true' ? '465' : '25'
}}
/>
</NFormItemGi>
<NFormItemGi span="5" label={$t('t_16_1745833933819')} path="smtpPort">
<NTooltip
trigger="hover"
placement="top"
v-slots={{
trigger: () => {
return (
<NInput
v-model:value={formData.value.smtpPort}
readonly
class="!cursor-not-allowed"
placeholder={$t('t_17_1745833935070')}
/>
)
},
}}
>
{$t('SMTP端口禁止修改')}
</NTooltip>
</NFormItemGi>
</NGrid>
)

View File

@@ -73,7 +73,7 @@ export const useSettingsStore = defineStore('settings-store', () => {
sender: '', // 发送邮箱
smtpHost: '', // SMTP服务器
smtpPort: '465', //SMTP端口
smtpTLS: 'false', // TLS协议加密
smtpTLS: false, // TLS协议加密
password: '',
})