upload project source code

This commit is contained in:
2026-04-30 18:49:43 +08:00
commit 9b394ba682
2277 changed files with 660945 additions and 0 deletions

View File

@@ -0,0 +1,748 @@
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
};