From dc89aa035f589f449b583200062e6d30855134e3 Mon Sep 17 00:00:00 2001 From: Rewrite0 Date: Wed, 26 Apr 2023 17:53:50 +0800 Subject: [PATCH] =?UTF-8?q?config=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/YLayout.vue | 6 +- .../config/components/DownloaderItem.vue | 2 +- src/pages/config/components/ProgramItem.vue | 8 +- src/pages/config/components/ProxyItem.vue | 12 ++- src/pages/config/index.vue | 48 ++++++++++-- src/pages/config/useConfigCheck.ts | 76 +++++++++++++++++++ src/store/config.ts | 19 ++++- 7 files changed, 149 insertions(+), 22 deletions(-) create mode 100644 src/pages/config/useConfigCheck.ts diff --git a/src/pages/YLayout.vue b/src/pages/YLayout.vue index 40479643..8a556560 100644 --- a/src/pages/YLayout.vue +++ b/src/pages/YLayout.vue @@ -16,7 +16,11 @@ import YMenu from './YMenu.vue'; - + + + + + diff --git a/src/pages/config/components/DownloaderItem.vue b/src/pages/config/components/DownloaderItem.vue index ae926f34..46bfbbe8 100644 --- a/src/pages/config/components/DownloaderItem.vue +++ b/src/pages/config/components/DownloaderItem.vue @@ -16,7 +16,7 @@ const downloader = computed(() => form.downloader); - + diff --git a/src/pages/config/components/ProgramItem.vue b/src/pages/config/components/ProgramItem.vue index fac8cb5d..26761621 100644 --- a/src/pages/config/components/ProgramItem.vue +++ b/src/pages/config/components/ProgramItem.vue @@ -7,15 +7,15 @@ const program = computed(() => form.program); diff --git a/src/pages/config/components/ProxyItem.vue b/src/pages/config/components/ProxyItem.vue index 019add1e..907825a1 100644 --- a/src/pages/config/components/ProxyItem.vue +++ b/src/pages/config/components/ProxyItem.vue @@ -28,12 +28,12 @@ const proxy = computed(() => form.proxy); - + - - + + @@ -41,7 +41,11 @@ const proxy = computed(() => form.proxy); - + diff --git a/src/pages/config/index.vue b/src/pages/config/index.vue index 03ab7f30..f1aa2ca7 100644 --- a/src/pages/config/index.vue +++ b/src/pages/config/index.vue @@ -1,4 +1,6 @@ @@ -32,7 +59,12 @@ onBeforeMount(async () => {
- + @@ -47,8 +79,8 @@ onBeforeMount(async () => {
- 保存 - 还原 + 保存 + 还原
diff --git a/src/pages/config/useConfigCheck.ts b/src/pages/config/useConfigCheck.ts new file mode 100644 index 00000000..cdc18d2f --- /dev/null +++ b/src/pages/config/useConfigCheck.ts @@ -0,0 +1,76 @@ +import { form } from './form-data'; + +export function useConfigCheck() { + const checkIp = (ip: string) => { + const check = + /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/; + + return check.test(ip); + }; + + /** 有效端口检测 */ + const checkPort = (port: number) => { + if (port >= 0 && port <= 65535) return true; + else return false; + }; + + /** host 格式检测 */ + const checkHost = (host: string): [boolean, string] => { + if (host === '') return [false, '请输入host']; + if (!/:/.test(host)) { + return [false, "缺少 ':'"]; + } else { + const [ip, port] = host.split(':'); + + if (!checkIp(ip)) { + return [false, '请输入有效ip!']; + } + + if (!checkPort(Number(port))) { + return [false, '请输入有效端口!']; + } + } + + return [true, '']; + }; + + /** 端口验证 */ + function validtePort(rule: any, value: any, callback: any) { + if (value === '') return callback(new Error('请输入端口号')); + + if (!checkPort(value)) { + callback(new Error('无效端口 (端口范围 0 - 65535)')); + } else { + callback(); + } + } + + /** host 验证 */ + function validteHost(rule: any, value: any, callback: any) { + const [c, m] = checkHost(value); + if (!c) return callback(new Error(m)); + callback(); + } + + /** proxy 启用时检测 ip 和 端口 */ + const validteFormProxy = { + ip(rule: any, value: any, callback: any) { + if (form.proxy.enable) { + if (!checkIp(value)) return callback(new Error('请输入有效ip!')); + } + callback(); + }, + port(rule: any, value: any, callback: any) { + if (form.proxy.enable) { + if (!checkPort(value)) return callback(new Error('请输入有效端口!')); + } + callback(); + }, + }; + + return { + validtePort, + validteHost, + validteFormProxy, + }; +} diff --git a/src/store/config.ts b/src/store/config.ts index f12fc396..f18fefe7 100644 --- a/src/store/config.ts +++ b/src/store/config.ts @@ -1,4 +1,5 @@ import { defineStore } from 'pinia'; +import { ElMessage } from 'element-plus'; import { getConfig, setConfig } from '@/api/config'; import type { Config } from '#/config'; @@ -9,13 +10,23 @@ export const configStore = defineStore('config', () => { config.value = await getConfig(); }; - get(); - - const set = (newConfig: Omit) => { + const set = async (newConfig: Omit) => { let finalConfig: Config; if (config.value !== undefined) { finalConfig = Object.assign(config.value, newConfig); - return setConfig(finalConfig); + const { message } = await setConfig(finalConfig); + + if (message === 'Success') { + ElMessage({ + message: '保存成功!', + type: 'success', + }); + } else { + ElMessage({ + message: '保存失败, 请重试!', + type: 'error', + }); + } } return false;