Files
----/后端源码/yifan.action-ai.cn/index/js/ConfigInfoDrawer.BaOb71oS.js

749 lines
38 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { a5 as ElTabs, a6 as ElTabPane, w as ElForm, s as ElDivider, x as ElFormItem, y as ElInput, E as ElMessage, h as ElButton, M as ElSwitch, L as ElDrawer, D as ElMessageBox } from "./element-plus.CkEW9frc.js";
import { u as useAppStore, c as useConfigStore, P as ParamsAPI, D as DeviceEnum } from "./index.CMd5bD1r.js";
import { J as defineComponent, e9 as useI18n, t as onMounted, aP as resolveDirective, S as openBlock, T as createBlock, a0 as withCtx, $ as createVNode, a9 as createTextVNode, _ as createElementBlock, H as Fragment, ay as renderList, a1 as createBaseVNode, o as unref, a6 as withDirectives, j as computed, r as ref, ak as reactive } from "./.pnpm.BW3P1y8f.js";
import { S as SingleImageUpload } from "./SingleImageUpload.CngBsWfh.js";
import { _ as _export_sfc } from "./_plugin-vue_export-helper.1tPrXgE0.js";
import "./codemirror.CvJAcn2d.js";
const _hoisted_1 = { class: "flex items-center gap-2 w-full" };
const _hoisted_2 = { class: "flex items-center gap-2 w-full" };
const _hoisted_3 = { class: "flex items-center gap-2 w-full" };
const _hoisted_4 = { class: "flex items-center gap-2 w-full" };
const _hoisted_5 = { class: "space-y-2" };
const _hoisted_6 = { class: "space-y-2" };
const _hoisted_7 = {
key: 1,
class: "space-y-2"
};
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "ConfigInfoDrawer",
props: {
modelValue: { type: Boolean }
},
emits: ["update:modelValue"],
setup(__props, { emit: __emit }) {
const generateId = () => {
return Math.random().toString(36).substr(2, 9);
};
const isValidIp = (ip) => {
const ipRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
return ipRegex.test(ip);
};
const isValidApiPath = (path) => {
const pathRegex = /^\/[\w\-/]+$/;
return pathRegex.test(path);
};
const appStore = useAppStore();
const drawerSize = computed(() => appStore.device === DeviceEnum.DESKTOP ? "60%" : "60%");
const t = useI18n().t;
const configStore = useConfigStore();
const activeTabRef = ref("website");
const props = __props;
const emit = __emit;
const drawerVisible = computed({
get: () => props.modelValue,
set: (val) => emit("update:modelValue", val)
});
const configState = reactive({
id: void 0,
config_name: "",
config_key: "",
config_value: "",
config_type: void 0,
description: ""
});
const modifiedFields = reactive({});
const markModified = (key) => {
modifiedFields[key] = true;
};
const hasChanges = computed(() => Object.keys(modifiedFields).length > 0);
const submitChanges = async () => {
var _a, _b, _c;
const keysToSubmit = Object.keys(modifiedFields);
if (keysToSubmit.length === 0) return;
try {
if ("white_api_list_path" in modifiedFields && ((_a = apiWhitelistConfigs.value.white_api_list_path) == null ? void 0 : _a.id)) {
const apiWhitelistArray = apiWhitelistItems.value.map((item) => item.value.trim()).filter(Boolean);
const apiWhitelistJson = JSON.stringify(apiWhitelistArray);
await ParamsAPI.updateParams(apiWhitelistConfigs.value.white_api_list_path.id, {
...apiWhitelistConfigs.value.white_api_list_path,
config_value: apiWhitelistJson
});
}
if ("ip_black_list" in modifiedFields && ((_b = ipBlacklistConfigs.value.ip_black_list) == null ? void 0 : _b.id)) {
const ipBlacklistArray = ipBlacklistItems.value.map((item) => item.value.trim()).filter(Boolean);
const ipBlacklistJson = JSON.stringify(ipBlacklistArray);
await ParamsAPI.updateParams(ipBlacklistConfigs.value.ip_black_list.id, {
...ipBlacklistConfigs.value.ip_black_list,
config_value: ipBlacklistJson
});
}
if ("ip_white_list" in modifiedFields && ((_c = demoConfigs.value.ip_white_list) == null ? void 0 : _c.id)) {
const demoIpWhitelistArray = demoIpWhitelistItems.value.map((item) => item.value.trim()).filter(Boolean);
const demoIpWhitelistJson = JSON.stringify(demoIpWhitelistArray);
await ParamsAPI.updateParams(demoConfigs.value.ip_white_list.id, {
...demoConfigs.value.ip_white_list,
config_value: demoIpWhitelistJson
});
}
const otherKeys = keysToSubmit.filter(
(key) => !["white_api_list_path", "ip_black_list", "ip_white_list"].includes(key)
);
const otherUpdatePromises = otherKeys.map((key) => {
const item = systemConfigs.value[key] || logoConfigs.value[key] || securityPrivacyConfigs.value[key] || userAgreementConfigs.value[key] || demoConfigs.value[key];
return item && item.id ? ParamsAPI.updateParams(item.id, { ...item }) : Promise.resolve();
});
await Promise.all(otherUpdatePromises);
keysToSubmit.forEach((key) => {
delete modifiedFields[key];
});
await configStore.getConfig();
initializeLists();
} catch (error) {
console.error("保存失败:", error);
}
};
const resetForm = () => {
var _a, _b, _c, _d, _e;
initializeLists();
const keysToReset = Object.keys(modifiedFields);
for (const key of keysToReset) {
if (systemConfigs.value[key]) {
systemConfigs.value[key].config_value = ((_a = configStore.configData[key]) == null ? void 0 : _a.config_value) || "";
} else if (logoConfigs.value[key]) {
logoConfigs.value[key].config_value = ((_b = configStore.configData[key]) == null ? void 0 : _b.config_value) || "";
} else if (securityPrivacyConfigs.value[key]) {
securityPrivacyConfigs.value[key].config_value = ((_c = configStore.configData[key]) == null ? void 0 : _c.config_value) || "";
} else if (userAgreementConfigs.value[key]) {
userAgreementConfigs.value[key].config_value = ((_d = configStore.configData[key]) == null ? void 0 : _d.config_value) || "";
} else if (demoConfigs.value[key]) {
if (key !== "ip_white_list") {
demoConfigs.value[key].config_value = ((_e = configStore.configData[key]) == null ? void 0 : _e.config_value) || "";
}
}
delete modifiedFields[key];
}
ElMessageBox.close();
};
async function handleCloseDialog() {
drawerVisible.value = false;
}
function onDrawerClosed() {
resetForm();
}
const systemConfigs = computed(() => ({
sys_web_title: configStore.configData.sys_web_title,
sys_web_version: configStore.configData.sys_web_version,
sys_web_description: configStore.configData.sys_web_description
}));
const securityPrivacyConfigs = computed(() => ({
sys_help_doc: configStore.configData.sys_help_doc,
sys_git_code: configStore.configData.sys_git_code,
sys_keep_record: configStore.configData.sys_keep_record,
sys_web_copyright: configStore.configData.sys_web_copyright,
sys_web_privacy: configStore.configData.sys_web_privacy
}));
const userAgreementConfigs = computed(() => ({
sys_web_clause: configStore.configData.sys_web_clause
}));
const apiWhitelistItems = ref([]);
const ipBlacklistItems = ref([]);
const demoIpWhitelistItems = ref([]);
const initializeLists = () => {
var _a, _b, _c;
const apiWhitelistStr = ((_a = configStore.configData.white_api_list_path) == null ? void 0 : _a.config_value) || "";
try {
const apiWhitelistArray = JSON.parse(apiWhitelistStr);
if (Array.isArray(apiWhitelistArray)) {
apiWhitelistItems.value = apiWhitelistArray.filter((item) => typeof item === "string" && item.trim()).map((item) => ({ id: generateId(), value: item.trim() }));
} else {
apiWhitelistItems.value = apiWhitelistStr ? apiWhitelistStr.split("\n").filter((item) => item.trim()).map((item) => ({ id: generateId(), value: item.trim() })) : [{ id: generateId(), value: "" }];
}
} catch {
apiWhitelistItems.value = apiWhitelistStr ? apiWhitelistStr.split("\n").filter((item) => item.trim()).map((item) => ({ id: generateId(), value: item.trim() })) : [{ id: generateId(), value: "" }];
}
const ipBlacklistStr = ((_b = configStore.configData.ip_black_list) == null ? void 0 : _b.config_value) || "";
try {
const ipBlacklistArray = JSON.parse(ipBlacklistStr);
if (Array.isArray(ipBlacklistArray)) {
ipBlacklistItems.value = ipBlacklistArray.filter((item) => typeof item === "string" && item.trim()).map((item) => ({ id: generateId(), value: item.trim() }));
} else {
ipBlacklistItems.value = ipBlacklistStr ? ipBlacklistStr.split("\n").filter((item) => item.trim()).map((item) => ({ id: generateId(), value: item.trim() })) : [{ id: generateId(), value: "" }];
}
} catch {
ipBlacklistItems.value = ipBlacklistStr ? ipBlacklistStr.split("\n").filter((item) => item.trim()).map((item) => ({ id: generateId(), value: item.trim() })) : [{ id: generateId(), value: "" }];
}
const demoIpWhitelistStr = ((_c = configStore.configData.ip_white_list) == null ? void 0 : _c.config_value) || "";
try {
const demoIpWhitelistArray = JSON.parse(demoIpWhitelistStr);
if (Array.isArray(demoIpWhitelistArray)) {
demoIpWhitelistItems.value = demoIpWhitelistArray.filter((item) => typeof item === "string" && item.trim()).map((item) => ({ id: generateId(), value: item.trim() }));
} else {
demoIpWhitelistItems.value = demoIpWhitelistStr ? demoIpWhitelistStr.split("\n").filter((item) => item.trim()).map((item) => ({ id: generateId(), value: item.trim() })) : [{ id: generateId(), value: "" }];
}
} catch {
demoIpWhitelistItems.value = demoIpWhitelistStr ? demoIpWhitelistStr.split("\n").filter((item) => item.trim()).map((item) => ({ id: generateId(), value: item.trim() })) : [{ id: generateId(), value: "" }];
}
};
const addApiWhitelistItem = () => {
apiWhitelistItems.value.push({ id: generateId(), value: "" });
markModified("white_api_list_path");
};
const removeApiWhitelistItem = (id) => {
if (apiWhitelistItems.value.length <= 1) {
ElMessage.warning("至少需要保留一个接口白名单配置");
return;
}
apiWhitelistItems.value = apiWhitelistItems.value.filter((item) => item.id !== id);
markModified("white_api_list_path");
};
const addIpBlacklistItem = () => {
ipBlacklistItems.value.push({ id: generateId(), value: "" });
markModified("ip_black_list");
};
const removeIpBlacklistItem = (id) => {
if (ipBlacklistItems.value.length <= 1) {
ElMessage.warning("至少需要保留一个IP黑名单配置");
return;
}
ipBlacklistItems.value = ipBlacklistItems.value.filter((item) => item.id !== id);
markModified("ip_black_list");
};
const addDemoIpWhitelistItem = () => {
demoIpWhitelistItems.value.push({ id: generateId(), value: "" });
markModified("ip_white_list");
};
const removeDemoIpWhitelistItem = (id) => {
if (demoIpWhitelistItems.value.length <= 1) {
ElMessage.warning("至少需要保留一个IP白名单配置");
return;
}
demoIpWhitelistItems.value = demoIpWhitelistItems.value.filter((item) => item.id !== id);
markModified("ip_white_list");
};
const apiWhitelistConfigs = computed(() => ({
white_api_list_path: configStore.configData.white_api_list_path
}));
const ipBlacklistConfigs = computed(() => ({
ip_black_list: configStore.configData.ip_black_list
}));
const demoConfigs = computed(() => ({
demo_enable: configStore.configData.demo_enable,
ip_white_list: configStore.configData.ip_white_list
}));
onMounted(() => {
initializeLists();
});
const logoConfigs = computed(() => ({
sys_web_logo: {
...configStore.configData.sys_web_logo,
maxFileSize: 5
},
sys_web_favicon: {
...configStore.configData.sys_web_favicon,
maxFileSize: 5
},
sys_login_background: {
...configStore.configData.sys_login_background,
maxFileSize: 10
}
}));
const handleUploadSuccess = (fileInfo, type) => {
const fileUrl = fileInfo.file_url;
if (type in configStore.configData) {
configStore.configData[type].config_value = fileUrl;
}
if (type in systemConfigs.value) {
systemConfigs.value[type].config_value = fileUrl;
} else if (type in logoConfigs.value) {
logoConfigs.value[type].config_value = fileUrl;
}
markModified(type);
};
const handleUploadError = (error) => {
console.error("上传失败:", error.message || "未知错误");
ElMessage.error(`上传失败:${error.message || "请稍后重试"}`);
};
onMounted(() => {
configStore.getConfig();
});
return (_ctx, _cache) => {
const _component_el_divider = ElDivider;
const _component_el_input = ElInput;
const _component_el_form_item = ElFormItem;
const _component_el_form = ElForm;
const _component_el_tab_pane = ElTabPane;
const _component_el_button = ElButton;
const _component_el_switch = ElSwitch;
const _component_el_tabs = ElTabs;
const _component_el_drawer = ElDrawer;
const _directive_hasPerm = resolveDirective("hasPerm");
return openBlock(), createBlock(_component_el_drawer, {
modelValue: drawerVisible.value,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => drawerVisible.value = $event),
title: "配置中心",
size: drawerSize.value,
"destroy-on-close": "",
onClosed: onDrawerClosed
}, {
footer: withCtx(() => [
createVNode(_component_el_button, { onClick: handleCloseDialog }, {
default: withCtx(() => [..._cache[16] || (_cache[16] = [
createTextVNode("取消", -1)
])]),
_: 1
}),
withDirectives((openBlock(), createBlock(_component_el_button, {
type: "primary",
disabled: !hasChanges.value,
onClick: submitChanges
}, {
default: withCtx(() => [..._cache[17] || (_cache[17] = [
createTextVNode(" 保存 ", -1)
])]),
_: 1
}, 8, ["disabled"])), [
[_directive_hasPerm, ["module_system:config:update"]]
])
]),
default: withCtx(() => [
createVNode(_component_el_tabs, {
modelValue: activeTabRef.value,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => activeTabRef.value = $event),
type: "border-card"
}, {
default: withCtx(() => [
createVNode(_component_el_tab_pane, {
label: "网站配置",
name: "website"
}, {
default: withCtx(() => [
createVNode(_component_el_form, {
model: configState,
"label-suffix": ":",
"label-width": "auto",
"label-position": "right"
}, {
default: withCtx(() => [
createVNode(_component_el_divider, null, {
default: withCtx(() => [..._cache[2] || (_cache[2] = [
createTextVNode("网站配置", -1)
])]),
_: 1
}),
(openBlock(true), createElementBlock(Fragment, null, renderList(systemConfigs.value, (item, key) => {
return openBlock(), createElementBlock("div", { key }, [
createVNode(_component_el_form_item, {
label: item.config_name
}, {
default: withCtx(() => [
createBaseVNode("span", _hoisted_1, [
createVNode(_component_el_input, {
modelValue: item.config_value,
"onUpdate:modelValue": ($event) => item.config_value = $event,
placeholder: unref(t)("common.inputText"),
clearable: "",
style: { "width": "100%" },
onInput: ($event) => markModified(key)
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder", "onInput"])
])
]),
_: 2
}, 1032, ["label"])
]);
}), 128)),
createVNode(_component_el_divider, null, {
default: withCtx(() => [..._cache[3] || (_cache[3] = [
createTextVNode("网站图标", -1)
])]),
_: 1
}),
(openBlock(true), createElementBlock(Fragment, null, renderList(logoConfigs.value, (item, key) => {
return openBlock(), createElementBlock("div", { key }, [
createVNode(_component_el_form_item, {
label: item.config_name
}, {
default: withCtx(() => [
createBaseVNode("div", _hoisted_2, [
createVNode(SingleImageUpload, {
modelValue: item.config_value,
"onUpdate:modelValue": ($event) => item.config_value = $event,
data: { type: key },
name: "file",
"max-file-size": item.maxFileSize,
"show-tip": true,
"enable-preview": true,
onSuccess: (fileInfo) => handleUploadSuccess(fileInfo, key),
onError: handleUploadError
}, null, 8, ["modelValue", "onUpdate:modelValue", "data", "max-file-size", "onSuccess"])
])
]),
_: 2
}, 1032, ["label"])
]);
}), 128))
]),
_: 1
}, 8, ["model"])
]),
_: 1
}),
createVNode(_component_el_tab_pane, {
label: "安全隐私",
name: "securityPrivacy"
}, {
default: withCtx(() => [
createVNode(_component_el_form, {
model: configState,
"label-suffix": ":",
"label-width": "auto",
"label-position": "right"
}, {
default: withCtx(() => [
createVNode(_component_el_divider, null, {
default: withCtx(() => [..._cache[4] || (_cache[4] = [
createTextVNode("安全隐私", -1)
])]),
_: 1
}),
(openBlock(true), createElementBlock(Fragment, null, renderList(securityPrivacyConfigs.value, (item, key) => {
return openBlock(), createElementBlock("div", { key }, [
createVNode(_component_el_form_item, {
label: item.config_name
}, {
default: withCtx(() => [
createBaseVNode("span", _hoisted_3, [
createVNode(_component_el_input, {
modelValue: item.config_value,
"onUpdate:modelValue": ($event) => item.config_value = $event,
placeholder: unref(t)("common.inputText"),
clearable: "",
style: { "width": "100%" },
onInput: ($event) => markModified(key)
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder", "onInput"])
])
]),
_: 2
}, 1032, ["label"])
]);
}), 128))
]),
_: 1
}, 8, ["model"])
]),
_: 1
}),
createVNode(_component_el_tab_pane, {
label: "用户协议",
name: "userAgreement"
}, {
default: withCtx(() => [
createVNode(_component_el_form, {
model: configState,
"label-suffix": ":",
"label-width": "auto",
"label-position": "right"
}, {
default: withCtx(() => [
createVNode(_component_el_divider, null, {
default: withCtx(() => [..._cache[5] || (_cache[5] = [
createTextVNode("用户协议", -1)
])]),
_: 1
}),
(openBlock(true), createElementBlock(Fragment, null, renderList(userAgreementConfigs.value, (item, key) => {
return openBlock(), createElementBlock("div", { key }, [
createVNode(_component_el_form_item, {
label: item.config_name
}, {
default: withCtx(() => [
createBaseVNode("span", _hoisted_4, [
createVNode(_component_el_input, {
modelValue: item.config_value,
"onUpdate:modelValue": ($event) => item.config_value = $event,
placeholder: unref(t)("common.inputText"),
clearable: "",
style: { "width": "100%" },
onInput: ($event) => markModified(key)
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder", "onInput"])
])
]),
_: 2
}, 1032, ["label"])
]);
}), 128))
]),
_: 1
}, 8, ["model"])
]),
_: 1
}),
createVNode(_component_el_tab_pane, {
label: "接口白名单",
name: "apiWhitelist"
}, {
default: withCtx(() => [
createVNode(_component_el_form, {
model: configState,
"label-suffix": ":",
"label-width": "auto",
"label-position": "right"
}, {
default: withCtx(() => [
createVNode(_component_el_divider, null, {
default: withCtx(() => [..._cache[6] || (_cache[6] = [
createTextVNode("接口白名单", -1)
])]),
_: 1
}),
(openBlock(true), createElementBlock(Fragment, null, renderList(apiWhitelistConfigs.value, (item, key) => {
return openBlock(), createElementBlock("div", { key }, [
createVNode(_component_el_form_item, {
label: item.config_name
}, {
default: withCtx(() => [
createBaseVNode("div", _hoisted_5, [
(openBlock(true), createElementBlock(Fragment, null, renderList(apiWhitelistItems.value, (listItem) => {
return openBlock(), createElementBlock("div", {
key: listItem.id,
class: "flex items-center gap-2"
}, [
createVNode(_component_el_input, {
modelValue: listItem.value,
"onUpdate:modelValue": ($event) => listItem.value = $event,
placeholder: "/api/v1/users/get",
clearable: "",
onInput: ($event) => markModified(key),
onBlur: ($event) => {
{
if (!isValidApiPath(listItem.value) && listItem.value.trim()) {
unref(ElMessage).warning("请输入有效的接口路径格式(以/开头)");
}
}
}
}, null, 8, ["modelValue", "onUpdate:modelValue", "onInput", "onBlur"]),
createVNode(_component_el_button, {
type: "danger",
icon: "minus",
circle: "",
size: "small",
onClick: ($event) => removeApiWhitelistItem(listItem.id)
}, null, 8, ["onClick"])
]);
}), 128)),
createVNode(_component_el_button, {
type: "primary",
icon: "plus",
size: "small",
style: { "margin-top": "10px" },
onClick: addApiWhitelistItem
}, {
default: withCtx(() => [..._cache[7] || (_cache[7] = [
createTextVNode(" 添加接口路径 ", -1)
])]),
_: 1
}),
_cache[8] || (_cache[8] = createBaseVNode("div", { class: "text-xs text-gray-500 mt-2" }, " 配置说明:添加到白名单的接口路径无需登录即可访问,支持完整路径配置。 ", -1))
])
]),
_: 2
}, 1032, ["label"])
]);
}), 128))
]),
_: 1
}, 8, ["model"])
]),
_: 1
}),
createVNode(_component_el_tab_pane, {
label: "IP黑名单",
name: "ipBlacklist"
}, {
default: withCtx(() => [
createVNode(_component_el_form, {
model: configState,
"label-suffix": ":",
"label-width": "auto",
"label-position": "right"
}, {
default: withCtx(() => [
createVNode(_component_el_divider, null, {
default: withCtx(() => [..._cache[9] || (_cache[9] = [
createTextVNode("IP黑名单", -1)
])]),
_: 1
}),
(openBlock(true), createElementBlock(Fragment, null, renderList(ipBlacklistConfigs.value, (item, key) => {
return openBlock(), createElementBlock("div", { key }, [
createVNode(_component_el_form_item, {
label: item.config_name
}, {
default: withCtx(() => [
createBaseVNode("div", _hoisted_6, [
(openBlock(true), createElementBlock(Fragment, null, renderList(ipBlacklistItems.value, (listItem) => {
return openBlock(), createElementBlock("div", {
key: listItem.id,
class: "flex items-center gap-2"
}, [
createVNode(_component_el_input, {
modelValue: listItem.value,
"onUpdate:modelValue": ($event) => listItem.value = $event,
placeholder: "192.168.1.1",
clearable: "",
style: { "flex": "1" },
onInput: ($event) => markModified(key),
onBlur: ($event) => {
{
if (!isValidIp(listItem.value) && listItem.value.trim()) {
unref(ElMessage).warning("请输入有效的IP地址格式");
}
}
}
}, null, 8, ["modelValue", "onUpdate:modelValue", "onInput", "onBlur"]),
createVNode(_component_el_button, {
type: "danger",
icon: "minus",
circle: "",
size: "small",
onClick: ($event) => removeIpBlacklistItem(listItem.id)
}, null, 8, ["onClick"])
]);
}), 128)),
createVNode(_component_el_button, {
type: "primary",
icon: "plus",
size: "small",
style: { "margin-top": "10px" },
onClick: addIpBlacklistItem
}, {
default: withCtx(() => [..._cache[10] || (_cache[10] = [
createTextVNode(" 添加IP地址 ", -1)
])]),
_: 1
}),
_cache[11] || (_cache[11] = createBaseVNode("div", { class: "text-xs text-gray-500 mt-2" }, " 配置说明添加到黑名单的IP地址将无法访问系统支持单个IP配置。 ", -1))
])
]),
_: 2
}, 1032, ["label"])
]);
}), 128))
]),
_: 1
}, 8, ["model"])
]),
_: 1
}),
createVNode(_component_el_tab_pane, {
label: "演示环境配置",
name: "demo"
}, {
default: withCtx(() => [
createVNode(_component_el_form, {
model: configState,
"label-suffix": ":",
"label-width": "auto",
"label-position": "right"
}, {
default: withCtx(() => [
createVNode(_component_el_divider, null, {
default: withCtx(() => [..._cache[12] || (_cache[12] = [
createTextVNode("演示环境配置", -1)
])]),
_: 1
}),
(openBlock(true), createElementBlock(Fragment, null, renderList(demoConfigs.value, (item, key) => {
return openBlock(), createElementBlock("div", { key }, [
createVNode(_component_el_form_item, {
label: item.config_name
}, {
default: withCtx(() => [
key === "demo_enable" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
createVNode(_component_el_switch, {
"inline-prompt": "",
"active-text": "启用",
"inactive-text": "禁用",
"model-value": item.config_value === "true",
"onUpdate:modelValue": (value) => {
item.config_value = value ? "true" : "false";
markModified(key);
}
}, null, 8, ["model-value", "onUpdate:modelValue"]),
_cache[13] || (_cache[13] = createBaseVNode("div", { class: "text-xs text-gray-500 mt-1" }, " 配置说明:启用后系统将进入演示模式,部分功能可能受限。 ", -1))
], 64)) : key === "ip_white_list" ? (openBlock(), createElementBlock("div", _hoisted_7, [
(openBlock(true), createElementBlock(Fragment, null, renderList(demoIpWhitelistItems.value, (listItem) => {
return openBlock(), createElementBlock("div", {
key: listItem.id,
class: "flex items-center gap-2"
}, [
createVNode(_component_el_input, {
modelValue: listItem.value,
"onUpdate:modelValue": ($event) => listItem.value = $event,
placeholder: "192.168.1.1",
clearable: "",
style: { "flex": "1" },
onInput: ($event) => markModified(key),
onBlur: ($event) => {
{
if (!isValidIp(listItem.value) && listItem.value.trim()) {
unref(ElMessage).warning("请输入有效的IP地址格式");
}
}
}
}, null, 8, ["modelValue", "onUpdate:modelValue", "onInput", "onBlur"]),
createVNode(_component_el_button, {
type: "danger",
icon: "minus",
circle: "",
size: "small",
onClick: ($event) => removeDemoIpWhitelistItem(listItem.id)
}, null, 8, ["onClick"])
]);
}), 128)),
createVNode(_component_el_button, {
type: "primary",
icon: "plus",
size: "small",
style: { "margin-top": "10px" },
onClick: addDemoIpWhitelistItem
}, {
default: withCtx(() => [..._cache[14] || (_cache[14] = [
createTextVNode(" 添加IP地址 ", -1)
])]),
_: 1
}),
_cache[15] || (_cache[15] = createBaseVNode("div", { class: "text-xs text-gray-500 mt-2" }, " 配置说明演示模式下只有白名单中的IP地址可以访问系统支持单个IP配置。 ", -1))
])) : (openBlock(), createBlock(_component_el_input, {
key: 2,
modelValue: item.config_value,
"onUpdate:modelValue": ($event) => item.config_value = $event,
placeholder: unref(t)("common.inputText"),
clearable: "",
style: { "width": "100%" },
onInput: ($event) => markModified(key)
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder", "onInput"]))
]),
_: 2
}, 1032, ["label"])
]);
}), 128))
]),
_: 1
}, 8, ["model"])
]),
_: 1
})
]),
_: 1
}, 8, ["modelValue"])
]),
_: 1
}, 8, ["modelValue", "size"]);
};
}
});
const ConfigInfoDrawer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2de5db6a"]]);
export {
ConfigInfoDrawer as default
};