fastbee/yack-web/src/views/platform/utils/requestTemplate.js
2026-05-31 08:42:02 +08:00

83 lines
2.6 KiB
JavaScript

/**
* 将 KeyValueEditor 的行数据转为批量文本
*/
export function rowsToBulkText(rows) {
if (!rows || !rows.length) return ''
return rows.map(row => {
const prefix = row.enabled === false ? '#' : ''
return `${prefix}${row.key || ''}:${row.value || ''}`
}).join('\n')
}
/**
* 将批量文本解析为行数据
*/
export function bulkTextToRows(text) {
if (!text || !text.trim()) return []
return text.split('\n').filter(line => line.trim()).map(line => {
let enabled = true
let content = line
if (content.startsWith('#')) {
enabled = false
content = content.substring(1)
}
const idx = content.indexOf(':')
const key = idx >= 0 ? content.substring(0, idx).trim() : content.trim()
const value = idx >= 0 ? content.substring(idx + 1).trim() : ''
return { enabled, key, value, description: '' }
})
}
/**
* 将 HttpRequestDesigner 的数据序列化为存储格式
*/
export function serializeDesigner(designer) {
const result = {
method: designer.method || 'GET',
path: designer.pathTemplate || '',
contentType: designer.contentType || ''
}
if (designer.params && designer.params.length) {
result.params = designer.params.filter(p => p.key)
}
if (designer.headers && designer.headers.length) {
result.headers = designer.headers.filter(h => h.key)
}
if (designer.body) {
result.body = { mode: designer.body.mode || 'none' }
if (designer.body.mode === 'form-data' && designer.body.formData) {
result.body.formData = designer.body.formData.filter(f => f.key)
}
if (designer.body.mode === 'x-www-form-urlencoded' && designer.body.urlencoded) {
result.body.urlencoded = designer.body.urlencoded.filter(f => f.key)
}
if (designer.body.mode === 'raw-json') {
result.body.raw = designer.body.raw || ''
}
}
if (designer.config && designer.config.length) {
result.config = designer.config.filter(c => c.key)
}
return result
}
/**
* 将存储格式反序列化为 HttpRequestDesigner 数据
*/
export function deserializeDesigner(data) {
return {
method: (data && data.method) || 'GET',
pathTemplate: (data && data.path) || '',
contentType: (data && data.contentType) || '',
params: (data && data.params) || [],
headers: (data && data.headers) || [],
body: {
mode: (data && data.body && data.body.mode) || 'none',
formData: (data && data.body && data.body.formData) || [],
urlencoded: (data && data.body && data.body.urlencoded) || [],
raw: (data && data.body && data.body.raw) || ''
},
config: (data && data.config) || []
}
}