mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-17 13:57:10 +00:00
88 lines
No EOL
3.3 KiB
JavaScript
88 lines
No EOL
3.3 KiB
JavaScript
import { UserInfo } from './user_data.js'
|
|
import { supportGuoba } from '../../guoba.support.js'
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
|
|
function getAttributeValues(obj, attributeName, results = []) {
|
|
if (Array.isArray(obj)) {
|
|
obj.forEach(item => getAttributeValues(item, attributeName, results));
|
|
} else if (typeof obj === 'object' && obj !== null) {
|
|
Object.keys(obj).forEach(key => {
|
|
if (key === attributeName) {
|
|
results.push(obj[key]);
|
|
} else if (typeof obj[key] === 'object') {
|
|
getAttributeValues(obj[key], attributeName, results);
|
|
}
|
|
});
|
|
}
|
|
return results;
|
|
}
|
|
|
|
async function SettingView(fastify, options) {
|
|
// 获取配置视图
|
|
fastify.post('/settingView', async (request, reply) => {
|
|
const token = request.cookies.token || request.body?.token || 'unknown'
|
|
let user = UserInfo(token)
|
|
if (!user) {
|
|
reply.send({ err: '未登录' })
|
|
} else if (user.autho === 'admin') {
|
|
const filepath = path.join('plugins/chatgpt-plugin/resources/view', 'setting_view.json')
|
|
let configView = JSON.parse(fs.readFileSync(filepath, 'utf8'))
|
|
|
|
// 从锅巴配置获取额外配置视图
|
|
const guoba = supportGuoba()
|
|
const guobaConfig = guoba.configInfo.schemas
|
|
const viewDataList = getAttributeValues(configView, 'data')
|
|
const guobaDataList = getAttributeValues(guobaConfig, 'field')
|
|
const otherDataList = guobaDataList.filter(item => !viewDataList.includes(item))
|
|
const otherData = guobaConfig.filter(item => otherDataList.includes(item.field))
|
|
// 转换视图
|
|
if (otherData.length > 0) {
|
|
let otherView = []
|
|
for (const data of otherData) {
|
|
let view = {
|
|
'label': data.label,
|
|
'placeholder': data.bottomHelpMessage || undefined,
|
|
'data': data.field,
|
|
}
|
|
switch (data.component) {
|
|
case 'Input':
|
|
view.type = 'text'
|
|
break
|
|
case 'Switch':
|
|
view.type = 'check'
|
|
break
|
|
case 'InputNumber':
|
|
view.type = 'number'
|
|
break
|
|
case 'InputPassword':
|
|
view.type = 'password'
|
|
break
|
|
case 'InputTextArea':
|
|
view.type = 'textarea'
|
|
break
|
|
case 'Select':
|
|
view.type = 'textarea'
|
|
view.items = data.componentProps.options
|
|
break
|
|
default:
|
|
continue
|
|
}
|
|
otherView.push(view)
|
|
}
|
|
configView.push({
|
|
"id": "OtherSettings",
|
|
"title": "其他设置",
|
|
"view": otherView
|
|
})
|
|
}
|
|
|
|
reply.send(configView)
|
|
} else {
|
|
reply.send({ err: '权限不足' })
|
|
}
|
|
return reply
|
|
})
|
|
}
|
|
|
|
export default SettingView |