feat: 页面配置+风险规则右侧改为可编辑表格双向同步JSON编辑器
This commit is contained in:
@@ -42,15 +42,25 @@
|
||||
</div>
|
||||
</div>
|
||||
<div style="flex:1;overflow:auto;min-height:0">
|
||||
<div v-if="!parsed.length" style="text-align:center;padding:40px;color:#909399">暂无页面入口</div>
|
||||
<el-table v-else :data="parsed" stripe border style="font-size:13px" :row-style="{height:'42px'}">
|
||||
<el-table-column prop="key" label="标识" width="100" />
|
||||
<el-table-column prop="label" label="名称" width="110" />
|
||||
<el-table-column prop="method" label="方法" width="70" />
|
||||
<el-table-column label="完整URL" min-width="250">
|
||||
<template #default="s">{{ resolveUrl(s.row.url) }}</template>
|
||||
<div style="font-size:13px;font-weight:500;margin-bottom:4px">双向可视化</div>
|
||||
<el-table :data="parsed" stripe border style="font-size:13px" :row-style="{height:'42px'}" v-if="parsed.length">
|
||||
<el-table-column prop="key" label="key" width="100">
|
||||
<template #default="s"><el-input v-model="s.row.key" size="small" @input="syncToJson"/></template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="label" label="名称" width="110">
|
||||
<template #default="s"><el-input v-model="s.row.label" size="small" @input="syncToJson"/></template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="method" label="方法" width="80">
|
||||
<template #default="s"><el-select v-model="s.row.method" size="small" @change="syncToJson"><el-option label="GET" value="GET"/><el-option label="POST" value="POST"/></el-select></template>
|
||||
</el-table-column>
|
||||
<el-table-column label="URL" min-width="200">
|
||||
<template #default="s"><el-input v-model="s.row.url" size="small" @input="syncToJson"/></template>
|
||||
</el-table-column>
|
||||
<el-table-column width="50">
|
||||
<template #default="s"><el-button size="small" type="danger" text @click="remove(s.$index)">×</el-button></template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-else style="text-align:center;padding:40px;color:#909399">暂无页面入口</div>
|
||||
<div style="margin-top:8px"><el-button size="small" @click="addEntry">+ 添加</el-button></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -93,7 +103,9 @@ const editPage = async (row) => {
|
||||
catch { editorJson.value = '[]' }
|
||||
}
|
||||
|
||||
const addEntry = () => { parsed.value.push({key:'',label:'',url:'{base}',method:'GET'}); editorJson.value = JSON.stringify(parsed.value, null, 2) }
|
||||
const syncToJson = () => { editorJson.value = JSON.stringify(parsed.value, null, 2) }
|
||||
const remove = (idx) => { parsed.value.splice(idx,1); syncToJson() }
|
||||
const addEntry = () => { parsed.value.push({key:'',label:'',url:'{base}',method:'GET'}); syncToJson() }
|
||||
const savePages = async () => {
|
||||
saving.value = true
|
||||
try { await api.raw.put('/sites/'+editSiteId.value+'/pages', { entries: parsed.value }); ElMessage.success('已保存'); editSiteId.value=''; fetchAll() }
|
||||
|
||||
Reference in New Issue
Block a user