refactor: 配置弹窗适配纯Groovy方案,无JSON时提示,完善脚本编辑提示

This commit is contained in:
mediabot-pt
2026-07-01 10:49:00 +08:00
parent dcba64096e
commit 698efbb0c6

View File

@@ -44,32 +44,39 @@
<el-button size="small" @click="startEdit">编辑</el-button>
</template>
<el-button size="small" text @click="configVisible=true" v-if="selectedConfigId">查看配置JSON</el-button>
<el-button size="small" text @click="configVisible=true" v-if="selectedConfigId">查看配置</el-button>
</div>
</el-card>
<!-- 配置/脚本弹窗 -->
<el-dialog v-model="configVisible" title="适配配置" width="800px" :close-on-click-modal="false">
<el-dialog v-model="configVisible" title="适配配置 · v{{ selectedConfig?.version }}" width="880px" :close-on-click-modal="false">
<el-tabs v-model="configTab" type="card" size="small">
<el-tab-pane label="配置JSON" name="config">
<template v-if="editing">
<el-input v-model="editContent" type="textarea" :rows="20" style="font-family:monospace;font-size:12px" />
<div v-if="!selectedConfigJson" style="text-align:center;padding:40px;color:#909399">
无 JSON 配置,已切换为纯 Groovy 方案
</div>
<template v-else-if="editing">
<el-input v-model="editContent" type="textarea" :rows="22" style="font-family:monospace;font-size:12px" />
</template>
<pre v-else class="config-json" v-html="highlightedConfig"></pre>
</el-tab-pane>
<el-tab-pane label="Groovy 脚本" name="script">
<div v-if="scriptLoading" style="text-align:center;padding:20px;color:#909399">加载中...</div>
<template v-else>
<el-input v-model="scriptContent" type="textarea" :rows="20" style="font-family:monospace;font-size:12px"
placeholder="// Groovy 解析脚本&#10;// 内置变量: content(页面内容), url(访问URL), jsoup, json, utils&#10;&#10;def doc = jsoup.parse(content)&#10;..." />
<div style="margin-bottom:6px;font-size:11px;color:#909399">
内置变量: <code>content</code>(页面内容) <code>url</code>(访问URL) <code>jsoup</code> <code>json</code> <code>utils</code>
· 返回 Map{pageName,extracted,message} 或 List
</div>
<el-input v-model="scriptContent" type="textarea" :rows="22" style="font-family:monospace;font-size:12px"
placeholder="def doc = jsoup.parse(content)&#10;def rows = []&#10;doc.select('table tr').each { row ->&#10; rows &lt;&lt; [&#10; title: utils.text(utils.selectFirst(row,'td.name a')),&#10; size: utils.text(utils.selectFirst(row,'td.size'))&#10; ]&#10;}&#10;return [pageName:'search', extracted:rows]" />
</template>
</el-tab-pane>
</el-tabs>
<template #footer>
<el-button @click="configVisible=false">关闭</el-button>
<template v-if="selectedConfig?.status==='pending'">
<el-button v-if="configTab==='config'" type="primary" size="small" @click="editing? saveEdit() : startEdit()">
{{ editing ? '保存' : '编辑' }}
<el-button v-if="configTab==='config' && selectedConfigJson" type="primary" size="small" @click="editing? saveEdit() : startEdit()">
{{ editing ? '保存JSON' : '编辑JSON' }}
</el-button>
<el-button v-if="configTab==='config' && editing" size="small" @click="cancelEdit">取消</el-button>
<el-button v-if="configTab==='script'" type="primary" size="small" @click="saveScript" :loading="saving">