update(ImdbSource): 添加遗漏文件

This commit is contained in:
wumode
2025-06-17 15:48:10 +08:00
parent b8a167e597
commit e3d8412817
5 changed files with 7085 additions and 0 deletions

View File

@@ -0,0 +1,850 @@
import { importShared } from './__federation_fn_import-JrT3xvdd.js';
import { _ as _export_sfc } from './_plugin-vue_export-helper-pcqpp-6-.js';
const {createTextVNode:_createTextVNode,resolveComponent:_resolveComponent,withCtx:_withCtx,createVNode:_createVNode,toDisplayString:_toDisplayString,openBlock:_openBlock,createBlock:_createBlock,createCommentVNode:_createCommentVNode,createElementVNode:_createElementVNode,mergeProps:_mergeProps,withModifiers:_withModifiers,createElementBlock:_createElementBlock} = await importShared('vue');
const _hoisted_1 = { class: "plugin-config" };
const _hoisted_2 = { class: "d-flex align-center" };
const _hoisted_3 = { class: "font-weight-medium" };
const _hoisted_4 = { class: "text-body-2" };
const {ref,reactive,onMounted,computed} = await importShared('vue');
// Props
const _sfc_main = {
__name: 'Config',
props: {
initialConfig: {
type: Object,
default: () => ({}),
},
api: {
type: Object,
default: () => {
},
},
},
emits: ['save', 'close'],
setup(__props, { emit: __emit }) {
const props = __props;
// 状态变量
const form = ref(null);
const isFormValid = ref(true);
const error = ref(null);
const saving = ref(false);
const testing = ref(false);
const showClashSecret = ref(false);
const selectedCronOption = ref('6hours');
// Test result state
const testResult = reactive({
show: false,
success: false,
title: '',
message: ''
});
// Cron 选项
const cronOptions = [
{text: '每5分钟', value: '5min', cron: '*/5 * * * *'},
{text: '每15分钟', value: '15min', cron: '*/15 * * * *'},
{text: '每30分钟', value: '30min', cron: '*/30 * * * *'},
{text: '每小时', value: '1hour', cron: '0 * * * *'},
{text: '每2小时', value: '2hours', cron: '0 */2 * * *'},
{text: '每6小时', value: '6hours', cron: '0 */6 * * *'},
{text: '每12小时', value: '12hours', cron: '0 */12 * * *'},
{text: '每天', value: '1day', cron: '0 0 * * *'},
{text: '自定义', value: 'custom', cron: ''},
];
// 默认配置
const defaultConfig = {
enabled: false,
sub_links: [],
filter_keywords: ["公益性", "高延迟", "域名", "官网", "重启", "过期时间", "系统代理"],
clash_dashboard_url: '',
clash_dashboard_secret: '',
movie_pilot_url: '',
cron_string: '0 */6 * * *',
timeout: 10,
retry_times: 3,
proxy: false,
notify: false,
auto_update_subscriptions: true,
ruleset_prefix: '📂<-',
group_by_region: false,
};
// 响应式配置对象
const config = reactive({...defaultConfig});
// 自定义事件
const emit = __emit;
// 初始化
onMounted(() => {
if (props.initialConfig) {
Object.keys(props.initialConfig).forEach(key => {
if (key in config) {
config[key] = props.initialConfig[key];
}
});
// 设置对应的cron选项
const cronOption = cronOptions.find(option => option.cron === config.cron_string);
if (cronOption) {
selectedCronOption.value = cronOption.value;
} else {
selectedCronOption.value = 'custom';
}
}
});
// 验证函数
function isValidUrl(url) {
try {
new URL(url);
return true
} catch {
return false
}
}
function validateSubLinks(links) {
if (!links || links.length === 0) {
return '至少需要一个订阅链接'
}
for (const link of links) {
if (!isValidUrl(link)) {
return `无效的订阅链接: ${link}`
}
}
return true
}
function validateCronExpression(cronStr) {
if (!cronStr) return '请输入Cron表达式'
// 简单的cron表达式验证
const parts = cronStr.trim().split(/\s+/);
if (parts.length !== 5) {
return 'Cron表达式应包含5个部分 (分 时 日 月 周)'
}
return true
}
// 更新cron字符串
function updateCronString(optionValue) {
const option = cronOptions.find(opt => opt.value === optionValue);
if (option && option.cron) {
config.cron_string = option.cron;
}
}
// 测试连接
async function testConnection() {
testing.value = true;
error.value = null;
testResult.show = false;
try {
// 验证必需的参数
if (!config.clash_dashboard_url) {
throw new Error('请先配置 Clash 面板 URL')
}
if (!config.clash_dashboard_secret) {
throw new Error('请先配置 Clash 面板密钥')
}
if (!config.sub_links || config.sub_links.length === 0) {
throw new Error('请先配置至少一个订阅链接')
}
if (!config.movie_pilot_url || config.movie_pilot_url.length === 0) {
throw new Error('请先MoviePilot链接')
}
// 准备API请求参数
const testParams = {
clash_dashboard_url: config.clash_dashboard_url,
clash_dashboard_secret: config.clash_dashboard_secret,
sub_link: config.sub_links[0] // 使用第一个订阅链接进行测试
};
// 调用API进行连接测试
const result = await props.api.post('/plugin/ClashRuleProvider/connectivity', testParams);
// 根据返回结果显示相应消息
if (result.success) {
testResult.success = true;
testResult.title = '连接测试成功!';
testResult.message = 'Clash面板和订阅链接连接正常配置验证通过';
testResult.show = true;
// Auto hide after 5 seconds
setTimeout(() => {
testResult.show = false;
}, 5000);
} else {
throw new Error(result.message || '连接测试失败,请检查配置')
}
} catch (err) {
console.error('连接测试失败:', err);
testResult.success = false;
testResult.title = '连接测试失败';
testResult.message = err.message;
testResult.show = true;
} finally {
testing.value = false;
}
}
// 保存配置
async function saveConfig() {
if (!isFormValid.value) {
error.value = '请修正表单中的错误';
return
}
saving.value = true;
error.value = null;
try {
await new Promise(resolve => setTimeout(resolve, 1000));
emit('save', {...config});
} catch (err) {
console.error('保存配置失败:', err);
error.value = err.message || '保存配置失败';
} finally {
saving.value = false;
}
}
function extractDomain(url) {
try {
const domain = new URL(url).hostname;
return domain.startsWith('www.') ? domain.substring(4) : domain
} catch {
return url // 如果解析失败返回原始URL
}
}
// 重置表单
function resetForm() {
Object.keys(defaultConfig).forEach(key => {
config[key] = defaultConfig[key];
});
selectedCronOption.value = '6hours';
if (form.value) {
form.value.resetValidation();
}
}
// 关闭组件
function notifyClose() {
emit('close');
}
// 通知主应用切换到Page页面
function notifySwitch() {
emit('switch');
}
return (_ctx, _cache) => {
const _component_v_card_title = _resolveComponent("v-card-title");
const _component_v_icon = _resolveComponent("v-icon");
const _component_v_btn = _resolveComponent("v-btn");
const _component_v_card_item = _resolveComponent("v-card-item");
const _component_v_alert = _resolveComponent("v-alert");
const _component_v_switch = _resolveComponent("v-switch");
const _component_v_col = _resolveComponent("v-col");
const _component_v_row = _resolveComponent("v-row");
const _component_v_chip = _resolveComponent("v-chip");
const _component_v_combobox = _resolveComponent("v-combobox");
const _component_v_text_field = _resolveComponent("v-text-field");
const _component_v_select = _resolveComponent("v-select");
const _component_v_expansion_panel_title = _resolveComponent("v-expansion-panel-title");
const _component_v_expansion_panel_text = _resolveComponent("v-expansion-panel-text");
const _component_v_expansion_panel = _resolveComponent("v-expansion-panel");
const _component_v_expansion_panels = _resolveComponent("v-expansion-panels");
const _component_v_form = _resolveComponent("v-form");
const _component_v_card_text = _resolveComponent("v-card-text");
const _component_v_spacer = _resolveComponent("v-spacer");
const _component_v_card_actions = _resolveComponent("v-card-actions");
const _component_v_card = _resolveComponent("v-card");
return (_openBlock(), _createElementBlock("div", _hoisted_1, [
_createVNode(_component_v_card, null, {
default: _withCtx(() => [
_createVNode(_component_v_card_item, null, {
append: _withCtx(() => [
_createVNode(_component_v_btn, {
icon: "",
color: "primary",
variant: "text",
onClick: notifyClose
}, {
default: _withCtx(() => [
_createVNode(_component_v_icon, { left: "" }, {
default: _withCtx(() => _cache[19] || (_cache[19] = [
_createTextVNode("mdi-close")
])),
_: 1
})
]),
_: 1
})
]),
default: _withCtx(() => [
_createVNode(_component_v_card_title, null, {
default: _withCtx(() => _cache[18] || (_cache[18] = [
_createTextVNode("Clash Rule Provider 插件配置")
])),
_: 1
})
]),
_: 1
}),
_createVNode(_component_v_card_text, { class: "overflow-y-auto" }, {
default: _withCtx(() => [
(error.value)
? (_openBlock(), _createBlock(_component_v_alert, {
key: 0,
type: "error",
class: "mb-4"
}, {
default: _withCtx(() => [
_createTextVNode(_toDisplayString(error.value), 1)
]),
_: 1
}))
: _createCommentVNode("", true),
_createVNode(_component_v_form, {
ref_key: "form",
ref: form,
modelValue: isFormValid.value,
"onUpdate:modelValue": _cache[16] || (_cache[16] = $event => ((isFormValid).value = $event)),
onSubmit: _withModifiers(saveConfig, ["prevent"])
}, {
default: _withCtx(() => [
_cache[29] || (_cache[29] = _createElementVNode("div", { class: "text-subtitle-1 font-weight-bold mt-4 mb-2" }, "基本设置", -1)),
_createVNode(_component_v_row, null, {
default: _withCtx(() => [
_createVNode(_component_v_col, {
cols: "12",
md: "4"
}, {
default: _withCtx(() => [
_createVNode(_component_v_switch, {
modelValue: config.enabled,
"onUpdate:modelValue": _cache[0] || (_cache[0] = $event => ((config.enabled) = $event)),
label: "启用插件",
color: "primary",
inset: "",
hint: "启用后插件将开始监控和同步",
"persistent-hint": ""
}, null, 8, ["modelValue"])
]),
_: 1
}),
_createVNode(_component_v_col, {
cols: "12",
md: "4"
}, {
default: _withCtx(() => [
_createVNode(_component_v_switch, {
modelValue: config.proxy,
"onUpdate:modelValue": _cache[1] || (_cache[1] = $event => ((config.proxy) = $event)),
label: "启用代理",
color: "primary",
inset: "",
hint: "是否使用系统代理进行网络请求",
"persistent-hint": ""
}, null, 8, ["modelValue"])
]),
_: 1
}),
_createVNode(_component_v_col, {
cols: "12",
md: "4"
}, {
default: _withCtx(() => [
_createVNode(_component_v_switch, {
modelValue: config.notify,
"onUpdate:modelValue": _cache[2] || (_cache[2] = $event => ((config.notify) = $event)),
label: "启用通知",
color: "primary",
inset: "",
hint: "执行完成后发送通知消息",
"persistent-hint": ""
}, null, 8, ["modelValue"])
]),
_: 1
})
]),
_: 1
}),
_cache[30] || (_cache[30] = _createElementVNode("div", { class: "text-subtitle-1 font-weight-bold mt-4 mb-2" }, "订阅配置", -1)),
_createVNode(_component_v_row, null, {
default: _withCtx(() => [
_createVNode(_component_v_col, { cols: "12" }, {
default: _withCtx(() => [
_createVNode(_component_v_combobox, {
modelValue: config.sub_links,
"onUpdate:modelValue": _cache[3] || (_cache[3] = $event => ((config.sub_links) = $event)),
label: "订阅链接",
variant: "outlined",
multiple: "",
chips: "",
"closable-chips": "",
hint: "添加一个Clash订阅链接",
"persistent-hint": "",
rules: [validateSubLinks]
}, {
chip: _withCtx(({ props, item }) => [
_createVNode(_component_v_chip, _mergeProps(props, {
closable: "",
size: "small"
}), {
default: _withCtx(() => [
_createTextVNode(_toDisplayString(extractDomain(item.value)), 1)
]),
_: 2
}, 1040)
]),
_: 1
}, 8, ["modelValue", "rules"])
]),
_: 1
}),
_createVNode(_component_v_col, { cols: "12" }, {
default: _withCtx(() => [
_createVNode(_component_v_combobox, {
modelValue: config.filter_keywords,
"onUpdate:modelValue": _cache[4] || (_cache[4] = $event => ((config.filter_keywords) = $event)),
label: "节点过滤关键词",
variant: "outlined",
multiple: "",
chips: "",
"closable-chips": "",
hint: "添加用于过滤节点的关键词",
"persistent-hint": ""
}, {
chip: _withCtx(({ props, item }) => [
_createVNode(_component_v_chip, _mergeProps(props, {
closable: "",
size: "small",
color: "info"
}), {
default: _withCtx(() => [
_createTextVNode(_toDisplayString(item.value), 1)
]),
_: 2
}, 1040)
]),
_: 1
}, 8, ["modelValue"])
]),
_: 1
})
]),
_: 1
}),
_cache[31] || (_cache[31] = _createElementVNode("div", { class: "text-subtitle-1 font-weight-bold mt-4 mb-2" }, "Clash 面板设置", -1)),
_createVNode(_component_v_row, null, {
default: _withCtx(() => [
_createVNode(_component_v_col, { cols: "12" }, {
default: _withCtx(() => [
_createVNode(_component_v_text_field, {
modelValue: config.clash_dashboard_url,
"onUpdate:modelValue": _cache[5] || (_cache[5] = $event => ((config.clash_dashboard_url) = $event)),
label: "Clash 面板 URL",
variant: "outlined",
placeholder: "http://localhost:9090",
hint: "Clash 控制面板的访问地址",
"persistent-hint": "",
rules: [v => !v || isValidUrl(v) || '请输入有效的URL地址']
}, {
"prepend-inner": _withCtx(() => [
_createVNode(_component_v_icon, { color: "primary" }, {
default: _withCtx(() => _cache[20] || (_cache[20] = [
_createTextVNode("mdi-web")
])),
_: 1
})
]),
_: 1
}, 8, ["modelValue", "rules"])
]),
_: 1
}),
_createVNode(_component_v_col, { cols: "12" }, {
default: _withCtx(() => [
_createVNode(_component_v_text_field, {
modelValue: config.clash_dashboard_secret,
"onUpdate:modelValue": _cache[6] || (_cache[6] = $event => ((config.clash_dashboard_secret) = $event)),
label: "Clash 面板密钥",
variant: "outlined",
placeholder: "your-clash-secret",
hint: "用于访问Clash API的密钥",
"persistent-hint": "",
"append-inner-icon": showClashSecret.value ? 'mdi-eye-off' : 'mdi-eye',
type: showClashSecret.value ? 'text' : 'password',
"onClick:appendInner": _cache[7] || (_cache[7] = $event => (showClashSecret.value = !showClashSecret.value))
}, {
"prepend-inner": _withCtx(() => [
_createVNode(_component_v_icon, { color: "warning" }, {
default: _withCtx(() => _cache[21] || (_cache[21] = [
_createTextVNode("mdi-key")
])),
_: 1
})
]),
_: 1
}, 8, ["modelValue", "append-inner-icon", "type"])
]),
_: 1
})
]),
_: 1
}),
_cache[32] || (_cache[32] = _createElementVNode("div", { class: "text-subtitle-1 font-weight-bold mt-4 mb-2" }, "MoviePilot 设置", -1)),
_createVNode(_component_v_row, null, {
default: _withCtx(() => [
_createVNode(_component_v_col, { cols: "12" }, {
default: _withCtx(() => [
_createVNode(_component_v_text_field, {
modelValue: config.movie_pilot_url,
"onUpdate:modelValue": _cache[8] || (_cache[8] = $event => ((config.movie_pilot_url) = $event)),
label: "MoviePilot URL",
variant: "outlined",
placeholder: "http://localhost:3001",
hint: "MoviePilot 服务的访问地址",
"persistent-hint": "",
rules: [v => !!v || 'MoviePilot URL不能为空', v => isValidUrl(v) || '请输入有效的URL地址']
}, {
"prepend-inner": _withCtx(() => [
_createVNode(_component_v_icon, { color: "success" }, {
default: _withCtx(() => _cache[22] || (_cache[22] = [
_createTextVNode("mdi-movie")
])),
_: 1
})
]),
_: 1
}, 8, ["modelValue", "rules"])
]),
_: 1
})
]),
_: 1
}),
_cache[33] || (_cache[33] = _createElementVNode("div", { class: "text-subtitle-1 font-weight-bold mt-4 mb-2" }, "执行设置", -1)),
_createVNode(_component_v_row, null, {
default: _withCtx(() => [
_createVNode(_component_v_col, { cols: "12" }, {
default: _withCtx(() => [
_createVNode(_component_v_select, {
modelValue: selectedCronOption.value,
"onUpdate:modelValue": [
_cache[9] || (_cache[9] = $event => ((selectedCronOption).value = $event)),
updateCronString
],
label: "执行周期",
items: cronOptions,
variant: "outlined",
"item-title": "text",
"item-value": "value",
hint: "选择插件执行的时间间隔",
"persistent-hint": ""
}, null, 8, ["modelValue"])
]),
_: 1
}),
(selectedCronOption.value === 'custom')
? (_openBlock(), _createBlock(_component_v_col, {
key: 0,
cols: "12"
}, {
default: _withCtx(() => [
_createVNode(_component_v_text_field, {
modelValue: config.cron_string,
"onUpdate:modelValue": _cache[10] || (_cache[10] = $event => ((config.cron_string) = $event)),
label: "自定义 Cron 表达式",
variant: "outlined",
placeholder: "0 */6 * * *",
hint: "使用标准Cron表达式格式 (分 时 日 月 周)",
"persistent-hint": "",
rules: [validateCronExpression]
}, {
"prepend-inner": _withCtx(() => [
_createVNode(_component_v_icon, { color: "info" }, {
default: _withCtx(() => _cache[23] || (_cache[23] = [
_createTextVNode("mdi-clock-outline")
])),
_: 1
})
]),
_: 1
}, 8, ["modelValue", "rules"])
]),
_: 1
}))
: _createCommentVNode("", true),
_createVNode(_component_v_col, {
cols: "12",
md: "6"
}, {
default: _withCtx(() => [
_createVNode(_component_v_text_field, {
modelValue: config.timeout,
"onUpdate:modelValue": _cache[11] || (_cache[11] = $event => ((config.timeout) = $event)),
modelModifiers: { number: true },
label: "超时时间 (秒)",
variant: "outlined",
type: "number",
min: "1",
max: "300",
hint: "请求的超时时间",
"persistent-hint": "",
rules: [v => v > 0 || '超时时间必须大于0']
}, {
"prepend-inner": _withCtx(() => [
_createVNode(_component_v_icon, { color: "warning" }, {
default: _withCtx(() => _cache[24] || (_cache[24] = [
_createTextVNode("mdi-timer")
])),
_: 1
})
]),
_: 1
}, 8, ["modelValue", "rules"])
]),
_: 1
}),
_createVNode(_component_v_col, {
cols: "12",
md: "6"
}, {
default: _withCtx(() => [
_createVNode(_component_v_text_field, {
modelValue: config.retry_times,
"onUpdate:modelValue": _cache[12] || (_cache[12] = $event => ((config.retry_times) = $event)),
modelModifiers: { number: true },
label: "重试次数",
variant: "outlined",
type: "number",
min: "0",
max: "10",
hint: "失败时的重试次数",
"persistent-hint": "",
rules: [v => v >= 0 || '重试次数不能为负数']
}, {
"prepend-inner": _withCtx(() => [
_createVNode(_component_v_icon, { color: "info" }, {
default: _withCtx(() => _cache[25] || (_cache[25] = [
_createTextVNode("mdi-refresh")
])),
_: 1
})
]),
_: 1
}, 8, ["modelValue", "rules"])
]),
_: 1
})
]),
_: 1
}),
_createVNode(_component_v_expansion_panels, {
variant: "accordion",
class: "mt-4"
}, {
default: _withCtx(() => [
_createVNode(_component_v_expansion_panel, null, {
default: _withCtx(() => [
_createVNode(_component_v_expansion_panel_title, null, {
default: _withCtx(() => [
_createVNode(_component_v_icon, { class: "mr-2" }, {
default: _withCtx(() => _cache[26] || (_cache[26] = [
_createTextVNode("mdi-cog")
])),
_: 1
}),
_cache[27] || (_cache[27] = _createTextVNode(" 高级选项 "))
]),
_: 1
}),
_createVNode(_component_v_expansion_panel_text, null, {
default: _withCtx(() => [
_createVNode(_component_v_row, null, {
default: _withCtx(() => [
_createVNode(_component_v_col, {
cols: "12",
md: "6"
}, {
default: _withCtx(() => [
_createVNode(_component_v_switch, {
modelValue: config.auto_update_subscriptions,
"onUpdate:modelValue": _cache[13] || (_cache[13] = $event => ((config.auto_update_subscriptions) = $event)),
label: "自动更新订阅",
color: "primary",
inset: "",
hint: "定期自动更新Clash订阅配置",
"persistent-hint": ""
}, null, 8, ["modelValue"])
]),
_: 1
}),
_createVNode(_component_v_col, {
cols: "12",
md: "6"
}, {
default: _withCtx(() => [
_createVNode(_component_v_switch, {
modelValue: config.group_by_region,
"onUpdate:modelValue": _cache[14] || (_cache[14] = $event => ((config.group_by_region) = $event)),
label: "按大洲分组节点",
color: "primary",
inset: "",
hint: "启用后根据名称,将节点添加到代理组",
"persistent-hint": ""
}, null, 8, ["modelValue"])
]),
_: 1
}),
_createVNode(_component_v_col, { cols: "12" }, {
default: _withCtx(() => [
_createVNode(_component_v_text_field, {
modelValue: config.ruleset_prefix,
"onUpdate:modelValue": _cache[15] || (_cache[15] = $event => ((config.ruleset_prefix) = $event)),
label: "规则集前缀",
variant: "outlined",
placeholder: "📂<-",
hint: "为生成的规则集添加前缀",
"persistent-hint": ""
}, {
"prepend-inner": _withCtx(() => [
_createVNode(_component_v_icon, { color: "info" }, {
default: _withCtx(() => _cache[28] || (_cache[28] = [
_createTextVNode("mdi-prefix")
])),
_: 1
})
]),
_: 1
}, 8, ["modelValue"])
]),
_: 1
})
]),
_: 1
})
]),
_: 1
})
]),
_: 1
})
]),
_: 1
})
]),
_: 1
}, 8, ["modelValue"])
]),
_: 1
}),
_createVNode(_component_v_card_actions, null, {
default: _withCtx(() => [
_createVNode(_component_v_btn, {
color: "primary",
onClick: notifySwitch
}, {
default: _withCtx(() => [
_createVNode(_component_v_icon, { left: "" }, {
default: _withCtx(() => _cache[34] || (_cache[34] = [
_createTextVNode("mdi-view-dashboard-edit")
])),
_: 1
}),
_cache[35] || (_cache[35] = _createTextVNode(" 规则 "))
]),
_: 1
}),
_createVNode(_component_v_btn, {
color: "secondary",
onClick: resetForm
}, {
default: _withCtx(() => _cache[36] || (_cache[36] = [
_createTextVNode("重置")
])),
_: 1
}),
_createVNode(_component_v_btn, {
color: "info",
onClick: testConnection,
loading: testing.value
}, {
default: _withCtx(() => _cache[37] || (_cache[37] = [
_createTextVNode("测试连接")
])),
_: 1
}, 8, ["loading"]),
_createVNode(_component_v_spacer),
_createVNode(_component_v_btn, {
color: "primary",
disabled: !isFormValid.value,
onClick: saveConfig,
loading: saving.value
}, {
default: _withCtx(() => _cache[38] || (_cache[38] = [
_createTextVNode(" 保存配置 ")
])),
_: 1
}, 8, ["disabled", "loading"])
]),
_: 1
}),
(testResult.show)
? (_openBlock(), _createBlock(_component_v_alert, {
key: 0,
type: testResult.success ? 'success' : 'error',
variant: "tonal",
closable: "",
class: "ma-4 mt-0",
"onClick:close": _cache[17] || (_cache[17] = $event => (testResult.show = false))
}, {
default: _withCtx(() => [
_createElementVNode("div", _hoisted_2, [
_createVNode(_component_v_icon, { class: "mr-2" }, {
default: _withCtx(() => [
_createTextVNode(_toDisplayString(testResult.success ? 'mdi-check-circle' : 'mdi-alert-circle'), 1)
]),
_: 1
}),
_createElementVNode("div", null, [
_createElementVNode("div", _hoisted_3, _toDisplayString(testResult.title), 1),
_createElementVNode("div", _hoisted_4, _toDisplayString(testResult.message), 1)
])
])
]),
_: 1
}, 8, ["type"]))
: _createCommentVNode("", true)
]),
_: 1
})
]))
}
}
};
const ConfigComponent = /*#__PURE__*/_export_sfc(_sfc_main, [['__scopeId',"data-v-e9acef13"]]);
export { ConfigComponent as default };

View File

@@ -0,0 +1,5 @@
.plugin-config[data-v-e9acef13] {
max-width: 800px;
margin: 0 auto;
}

View File

@@ -0,0 +1,15 @@
import { importShared } from './__federation_fn_import-JrT3xvdd.js';
import { _ as _export_sfc } from './_plugin-vue_export-helper-pcqpp-6-.js';
const _sfc_main = {};
const {openBlock:_openBlock,createElementBlock:_createElementBlock} = await importShared('vue');
const _hoisted_1 = { class: "dashboard-widget" };
function _sfc_render(_ctx, _cache) {
return (_openBlock(), _createElementBlock("div", _hoisted_1))
}
const DashboardComponent = /*#__PURE__*/_export_sfc(_sfc_main, [['render',_sfc_render]]);
export { DashboardComponent as default };

View File

@@ -0,0 +1,48 @@
.plugin-page[data-v-d5896cff] {
max-width: 1200px;
margin: 0 auto;
}
/* 使卡片等宽并适应移动端 */
.d-flex.flex-wrap[data-v-d5896cff] {
gap: 16px;
}
.url-display[data-v-d5896cff] {
word-break: break-all;
padding: 8px;
background: rgba(0, 0, 0, 0.05);
border-radius: 4px;
}
/* 移动端堆叠布局 */
@media (max-width: 768px) {
.d-flex.flex-wrap[data-v-d5896cff] {
flex-direction: column;
}
}
/* Add visual distinction between sections */
.ruleset-section[data-v-d5896cff] {
border: 1px solid #e0e0e0;
border-radius: 4px;
padding: 16px;
background-color: #f5f5f5;
}
.top-section[data-v-d5896cff] {
border: 1px solid #e0e0e0;
border-radius: 4px;
padding: 16px;
background-color: #f9f9f9;
}
/* Optional: Add different border colors to further distinguish */
.ruleset-section[data-v-d5896cff] {
border-left: 4px solid #2196F3; /* Blue accent */
}
.top-section[data-v-d5896cff] {
border-left: 4px solid #4CAF50; /* Green accent */
}
.drag-handle[data-v-d5896cff] {
cursor: move;
}

File diff suppressed because it is too large Load Diff