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;