Files
LaiTool/src/define/setting/dynamicSetting.js
T

119 lines
4.2 KiB
JavaScript
Raw Normal View History

2024-05-15 12:57:15 +08:00
let fspromises = require('fs').promises;
import { get, cloneDeep } from 'lodash';
import { define } from '../define';
export class DynamicSetting {
constructor(global) {
this.global = global;
}
/**
* 通过指定的类型,获取数据
* @param {*} type default:在代码中写死的 dynamic:用户自定义的 all:写死的和自定义的合并返回
* @param {*} mainType 主分类,gpttag这些
* @param {*} property 返回书信的名称 gpt_optionsgpt_model_optionsgpt_auto_inference
* @param {*} defaultSetting 默认的设置,用于合并数据
* @param {*} defaultData 默认数据,默认值为null
* @returns
*/
async getDataByTypeAndProperty(type, mainType, property, defaultSetting, defaultData = []) {
try {
let res = [];
// 获取自定义的GPT数据
let dynamic_setting = JSON.parse(await fspromises.readFile(define.dynamic_setting, 'utf-8'));
let tags = get(dynamic_setting, mainType, {});
let data = get(tags, property, defaultData);
if (type == "default") {
// res = get(this, property, defaultData);
} else if (type == "dynamic") {
res = data;
} else if (type == "all") {
res = defaultSetting.concat(data);
}
else {
throw new Error(`不存在的类型 : ${value}`);
}
return {
code: 1,
data: res
}
} catch (error) {
return {
code: 0,
message: error.toString()
}
}
}
/**
* 保存 dynamic_setting 中主分支中指定属性的数据
* @param {*} value 要保存的数据
* @param {*} mainType 大的设置里面的主分支
* @param {*} property 对应的属性
* @param {*} callback 回调函数,可以对数据进行自定义的判断
*/
async saveDataByTypeAndProperty(value, mainType, property, callback = null) {
try {
// 获取自定义的GPT数据
let dynamic_setting = JSON.parse(await fspromises.readFile(define.dynamic_setting, 'utf-8'));
let tmp_gpt = get(dynamic_setting, mainType, {});
let gpt = tmp_gpt[property] ? tmp_gpt[property] : [];
if (callback) {
callback(gpt);
}
if (value.id) {
// 判断当前ID的数据是否存在,存在覆盖,不存在追加
let index = gpt.findIndex(item => item.id == value.id);
if (index < 0) {
gpt.push(value);
} else {
gpt[index] = value;
}
} else {
value.id = uuidv4();
gpt.push(value);
}
tmp_gpt[property] = gpt;
// 将修改后的数据保存
dynamic_setting[mainType] = tmp_gpt;
// 写入文件
await fspromises.writeFile(define.dynamic_setting, JSON.stringify(dynamic_setting));
} catch (error) {
throw error;
}
}
/**
* 删除指定的属性中的数据
* @param {*} id 要删除数据的ID
* @param {*} mainType 删除的主分支的类别
* @param {*} property 删除的属性中的数据
*/
async deleteDataByTypeAndProperty(id, mainType, property) {
try {
// 获取自定义的GPT数据
let dynamic_setting = JSON.parse(await fspromises.readFile(define.dynamic_setting, 'utf-8'));
let tmp_data = get(dynamic_setting, mainType, {});
let gpt = tmp_data[property] ? tmp_data[property] : [];
// 判断当前ID的数据是否存在,存在删除
let index = gpt.findIndex(item => item.id == id);
if (index >= 0) {
gpt.splice(index, 1);
}
// 将修改后的数据保存
dynamic_setting[mainType][property] = gpt;
// 写入文件
await fspromises.writeFile(define.dynamic_setting, JSON.stringify(dynamic_setting));
} catch (error) {
throw error;
}
}
}