mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-08 07:41:10 +08:00
【新增】百度云DNS解析功能和宝塔waf部署功能
【新增】本机部署方式 【修复】已知问题
This commit is contained in:
BIN
frontend/.DS_Store
vendored
BIN
frontend/.DS_Store
vendored
Binary file not shown.
1
frontend/.gitattributes
vendored
1
frontend/.gitattributes
vendored
@@ -1 +0,0 @@
|
||||
* text=auto eol=lf
|
||||
49
frontend/.gitignore
vendored
49
frontend/.gitignore
vendored
@@ -1,49 +0,0 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# Dependencies
|
||||
node_modules
|
||||
.pnp
|
||||
.pnp.js
|
||||
|
||||
# Local env files
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# Testing
|
||||
coverage
|
||||
|
||||
# Turbo
|
||||
.turbo
|
||||
|
||||
# Vercel
|
||||
.vercel
|
||||
|
||||
# Build Outputs
|
||||
.next/
|
||||
out/
|
||||
build
|
||||
dist
|
||||
|
||||
|
||||
# Debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
|
||||
.turbo
|
||||
pnpm-lock.yaml
|
||||
.specstory/**、
|
||||
|
||||
.sync-log
|
||||
.sync-log/**
|
||||
|
||||
.sync-git
|
||||
.sync-git/**
|
||||
BIN
frontend/apps/.DS_Store
vendored
BIN
frontend/apps/.DS_Store
vendored
Binary file not shown.
17525
frontend/apps/allin-ssl/cache/translation_cache.json
vendored
17525
frontend/apps/allin-ssl/cache/translation_cache.json
vendored
File diff suppressed because it is too large
Load Diff
@@ -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 |
@@ -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 {
|
||||
// 表单类型,用于获取不同的下拉列表
|
||||
|
||||
@@ -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 && (
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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')
|
||||
})
|
||||
|
||||
@@ -147,6 +147,7 @@ nodeOptions[DEPLOY] = () =>
|
||||
config: {
|
||||
provider: '',
|
||||
provider_id: '',
|
||||
skip: 1,
|
||||
inputs: {
|
||||
fromNodeId: '',
|
||||
name: '',
|
||||
|
||||
@@ -29,6 +29,7 @@ export default {
|
||||
config: {
|
||||
provider: '',
|
||||
provider_id: '',
|
||||
skip: 1,
|
||||
inputs: {
|
||||
fromNodeId: '',
|
||||
name: '',
|
||||
|
||||
@@ -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
|
||||
>
|
||||
|
||||
// 部署节点输入配置
|
||||
|
||||
@@ -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',
|
||||
}
|
||||
|
||||
// 返回匹配的图标路径或默认图标
|
||||
|
||||
@@ -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": "موقع ويف باغودا"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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ウェブサイト"
|
||||
}
|
||||
@@ -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 웹사이트"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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网站"
|
||||
}
|
||||
@@ -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網站"
|
||||
}
|
||||
@@ -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%;
|
||||
}
|
||||
|
||||
18
frontend/apps/allin-ssl/src/types/access.d.ts
vendored
18
frontend/apps/allin-ssl/src/types/access.d.ts
vendored
@@ -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
|
||||
|
||||
@@ -56,7 +56,7 @@ export interface ReportMail {
|
||||
sender: string
|
||||
smtpHost: string
|
||||
smtpPort: string
|
||||
smtpTLS: 'true' | 'false'
|
||||
smtpTLS: true | false
|
||||
// username: string
|
||||
}
|
||||
|
||||
|
||||
@@ -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: '',
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
@@ -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}>
|
||||
|
||||
@@ -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>
|
||||
)
|
||||
|
||||
@@ -73,7 +73,7 @@ export const useSettingsStore = defineStore('settings-store', () => {
|
||||
sender: '', // 发送邮箱
|
||||
smtpHost: '', // SMTP服务器
|
||||
smtpPort: '465', //SMTP端口
|
||||
smtpTLS: 'false', // TLS协议,加密
|
||||
smtpTLS: false, // TLS协议,加密
|
||||
password: '',
|
||||
})
|
||||
|
||||
|
||||
@@ -133,6 +133,7 @@ export default defineConfig({
|
||||
'.cursor',
|
||||
'.devcontainer',
|
||||
'.github',
|
||||
'.git',
|
||||
'.test',
|
||||
'.vascode',
|
||||
'.turbo',
|
||||
|
||||
BIN
frontend/packages/.DS_Store
vendored
BIN
frontend/packages/.DS_Store
vendored
Binary file not shown.
@@ -19,6 +19,8 @@ export default defineComponent({
|
||||
const { locale } = useI18n() // 国际化
|
||||
const { naiveLocale, naiveDateLocale } = useNaiveI18nSync(locale) // i18n 同步
|
||||
const { theme, themeOverrides } = useTheme() // 主题
|
||||
|
||||
console.log(theme.value, themeOverrides.value)
|
||||
// 国际化配置
|
||||
return () => (
|
||||
<NConfigProvider
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { defineComponent, PropType } from 'vue'
|
||||
import { computed, defineComponent, PropType } from 'vue'
|
||||
import { NDropdown, NIcon, NButton } from 'naive-ui'
|
||||
import { Sunny, Moon } from '@vicons/ionicons5'
|
||||
|
||||
@@ -6,6 +6,8 @@ import { useTheme } from '../theme/index'
|
||||
import type { DropdownOption } from 'naive-ui'
|
||||
interface Props {
|
||||
type?: 'button' | 'link'
|
||||
size?: 'small' | 'medium' | 'large'
|
||||
text?: boolean
|
||||
}
|
||||
|
||||
export default defineComponent({
|
||||
@@ -14,6 +16,14 @@ export default defineComponent({
|
||||
type: String as PropType<'button' | 'link'>,
|
||||
default: 'button',
|
||||
},
|
||||
size: {
|
||||
type: String as PropType<'small' | 'medium' | 'large'>,
|
||||
default: 'medium',
|
||||
},
|
||||
text: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
setup(props: Props) {
|
||||
const { isDark, cutDarkMode, themeActive } = useTheme()
|
||||
@@ -29,16 +39,29 @@ export default defineComponent({
|
||||
},
|
||||
]
|
||||
|
||||
const iconSize = computed(() => {
|
||||
return props.size === 'small' ? 16 : props.size === 'large' ? 24 : 20
|
||||
})
|
||||
|
||||
const buttonSize = computed(() => {
|
||||
return props.size === 'small' ? 'tiny' : props.size === 'large' ? 'large' : 'medium'
|
||||
})
|
||||
|
||||
const text = computed(() => {
|
||||
return !isDark.value ? '亮色模式' : '暗色模式'
|
||||
})
|
||||
|
||||
return () => (
|
||||
<NDropdown options={dropdownOptions} onSelect={() => cutDarkMode(true, this)} value={themeActive.value}>
|
||||
<div style={{ cursor: 'pointer', display: 'flex', alignItems: 'center' }}>
|
||||
{props.type === 'button' ? (
|
||||
<NButton quaternary strong circle type="primary">
|
||||
<NIcon size={20}>{isDark.value ? <Moon /> : <Sunny />}</NIcon>
|
||||
<NButton quaternary strong circle type="primary" size={buttonSize.value}>
|
||||
<NIcon size={iconSize.value}>{isDark.value ? <Moon /> : <Sunny />}</NIcon>
|
||||
</NButton>
|
||||
) : (
|
||||
<NIcon size={20}>{isDark.value ? <Moon /> : <Sunny />}</NIcon>
|
||||
<NIcon size={iconSize.value}>{isDark.value ? <Moon /> : <Sunny />}</NIcon>
|
||||
)}
|
||||
<span class="ml-[0.6rem]">{props.text && text.value}</span>
|
||||
</div>
|
||||
</NDropdown>
|
||||
)
|
||||
|
||||
@@ -73,7 +73,7 @@ const mountApps = (app: App, resources: any) => {
|
||||
// 自定义Modal钩子函数
|
||||
const useModal = (options: CustomModalOptions) => {
|
||||
const { theme, themeOverrides } = useTheme()
|
||||
|
||||
console.log(themeOverrides.value, theme.value)
|
||||
// 创建discreteModal实例 - 这个可以在任何地方使用
|
||||
const { modal, message, unmount, app } = createDiscreteApi(['modal', 'message'], {
|
||||
configProviderProps: { theme: theme.value, themeOverrides: themeOverrides.value },
|
||||
|
||||
@@ -39,7 +39,7 @@ export const useTheme = (name?: ThemeName) => {
|
||||
const themeActiveOverrides = ref<ThemeTemplate | null>(null)
|
||||
|
||||
// 是否暗黑
|
||||
|
||||
|
||||
// const isDark = useDark()
|
||||
|
||||
// 禁用自动切换暗色模式避免错误
|
||||
@@ -52,9 +52,7 @@ export const useTheme = (name?: ThemeName) => {
|
||||
|
||||
// 主题继承修改
|
||||
const themeOverrides = computed(() => {
|
||||
// 如果没有激活的主题,则返回空对象
|
||||
if (!themeActiveOverrides.value) return {}
|
||||
return themeActiveOverrides.value.themeOverrides || {}
|
||||
return themeActiveOverrides.value || {}
|
||||
})
|
||||
|
||||
// 预设配置
|
||||
@@ -62,7 +60,7 @@ export const useTheme = (name?: ThemeName) => {
|
||||
// 如果没有激活的主题,则返回空对象
|
||||
console.log('presetsOverrides', themeActiveOverrides.value)
|
||||
if (!themeActiveOverrides.value) return {}
|
||||
return themeActiveOverrides.value.presetsOverrides || {}
|
||||
return themeActiveOverrides.value || {}
|
||||
})
|
||||
|
||||
/**
|
||||
|
||||
BIN
frontend/plugin/.DS_Store
vendored
BIN
frontend/plugin/.DS_Store
vendored
Binary file not shown.
@@ -1,91 +0,0 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# IDE files
|
||||
.idea
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
# Vite
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
# Vitest
|
||||
/coverage
|
||||
19053
frontend/pnpm-lock.yaml
generated
Normal file
19053
frontend/pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user