import { getDatabase } from '../../../utils/databaseAdapter.js'; export async function onRequest(context) { // 页面设置相关,GET方法读取设置,POST方法保存设置 const { request, // same as existing Worker API env, // same as existing Worker API params, // if filename includes [id] or [[path]] waitUntil, // same as ctx.waitUntil in existing Worker API next, // used for middleware or to fetch assets data, // arbitrary space for passing data between middlewares } = context; const db = getDatabase(env); // GET读取设置 if (request.method === 'GET') { const settings = await getPageConfig(db, env) return new Response(JSON.stringify(settings), { headers: { 'content-type': 'application/json', }, }) } // POST保存设置 if (request.method === 'POST') { const body = await request.json() const settings = body // 写入数据库 await db.put('manage@sysConfig@page', JSON.stringify(settings)) return new Response(JSON.stringify(settings), { headers: { 'content-type': 'application/json', }, }) } } export async function getPageConfig(db, env) { const settings = {} // 读取数据库中的设置 const settingsStr = await db.get('manage@sysConfig@page') const settingsKV = settingsStr ? JSON.parse(settingsStr) : {} const config = [] settings.config = config config.push( // 全局设置 { id: 'siteTitle', label: '网站标题', placeholder: 'Sanyue ImgHub', category: '全局设置', }, { id: 'siteIcon', label: '网站图标', category: '全局设置', }, { id: 'ownerName', label: '图床名称', placeholder: 'Sanyue ImgHub', category: '全局设置', }, { id: 'logoUrl', label: '图床Logo', category: '全局设置', }, { id: 'logoLink', label: 'Logo跳转链接', placeholder: 'https://github.com/MarSeventh/CloudFlare-ImgBed', tooltip: '点击Logo时跳转的链接,留空则使用默认GitHub链接', category: '全局设置', }, { id: 'bkInterval', label: '背景切换间隔', placeholder: '3000', tooltip: '单位:毫秒 ms', category: '全局设置', }, { id: 'bkOpacity', label: '背景图透明度', placeholder: '1', tooltip: '0-1 之间的小数', category: '全局设置', }, { id: 'urlPrefix', label: '默认URL前缀', tooltip: '自定义URL前缀,如:https://img.a.com/file/,留空则使用当前域名
设置后将应用于客户端和管理端', category: '全局设置', }, // 客户端设置 { id: 'announcement', label: '公告', tooltip: '支持HTML标签', category: '客户端设置', }, { id: 'defaultUploadChannel', label: '默认渠道类型', type: 'select', options: [ { label: 'Telegram', value: 'telegram' }, { label: 'Cloudflare R2', value: 'cfr2' }, { label: 'S3', value: 's3' }, { label: 'Discord', value: 'discord' }, { label: 'HuggingFace', value: 'huggingface' }, ], placeholder: 'telegram', category: '客户端设置', }, { id: 'defaultChannelName', label: '默认渠道名称', type: 'channelName', tooltip: '指定默认使用的渠道名称,需先选择上传渠道', category: '客户端设置', }, { id: 'defaultUploadFolder', label: '默认上传目录', placeholder: '/ 开头的合法目录,不能包含特殊字符, 默认为根目录', category: '客户端设置', }, { id: 'defaultUploadNameType', label: '默认命名方式', type: 'select', options: [ { label: '默认', value: 'default' }, { label: '仅前缀', value: 'index' }, { label: '仅原名', value: 'origin' }, { label: '短链接', value: 'short' }, ], placeholder: 'default', category: '客户端设置', }, { id: 'defaultConvertToWebp', label: '默认转换WebP', type: 'boolean', default: false, tooltip: '上传前将图片转换为WebP格式,可有效减小文件体积', category: '客户端设置', }, { id: 'defaultCustomerCompress', label: '默认开启压缩', type: 'boolean', default: true, tooltip: '上传前在本地进行压缩,仅对图片文件生效', category: '客户端设置', }, { id: 'defaultCompressBar', label: '默认压缩阈值', placeholder: '5', tooltip: '图片大小超过此值将自动压缩,单位MB,范围1-20', category: '客户端设置', }, { id: 'defaultCompressQuality', label: '默认期望大小', placeholder: '4', tooltip: '压缩后图片大小期望值,单位MB,范围0.5-压缩阈值', category: '客户端设置', }, { id: 'loginBkImg', label: '登录页背景图', tooltip: '1.填写 bing 使用必应壁纸轮播
2.填写 ["url1","url2"] 使用多张图片轮播
3.填写 ["url"] 使用单张图片', category: '客户端设置', }, { id: 'uploadBkImg', label: '上传页背景图', tooltip: '1.填写 bing 使用必应壁纸轮播
2.填写 ["url1","url2"] 使用多张图片轮播
3.填写 ["url"] 使用单张图片', category: '客户端设置', }, { id: 'footerLink', label: '页脚传送门链接', category: '客户端设置', }, { id: 'disableFooter', label: '隐藏页脚', type: 'boolean', default: false, category: '客户端设置', }, // 管理端设置 { id: 'adminLoginBkImg', label: '登录页背景图', tooltip: '1.填写 bing 使用必应壁纸轮播
2.填写 ["url1","url2"] 使用多张图片轮播
3.填写 ["url"] 使用单张图片', category: '管理端设置', } ) const userConfig = env.USER_CONFIG if (userConfig) { try { const parsedConfig = JSON.parse(userConfig) if (typeof parsedConfig === 'object' && parsedConfig !== null) { // 搜索config中的id,如果存在则更新 for (let i = 0; i < config.length; i++) { if (parsedConfig[config[i].id]) { config[i].value = parsedConfig[config[i].id] } } } } catch (error) { // do nothing } } // 用KV中的设置覆盖默认设置 for (let i = 0; i < settingsKV.config?.length; i++) { const item = settingsKV.config[i] const index = config.findIndex(x => x.id === item.id) if (index !== -1) { config[index].value = item.value } } return settings }