V 3.3.3
1. 修复MJ设置初始化问题 2. 添加MJ本地代理模式,可以本地部署的代理模式
This commit is contained in:
parent
927dd14574
commit
c43abd6908
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "laitool",
|
"name": "laitool",
|
||||||
"version": "3.3.2",
|
"version": "3.3.3",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "laitool",
|
"name": "laitool",
|
||||||
"version": "3.3.2",
|
"version": "3.3.3",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@alicloud/alimt20181012": "^1.2.0",
|
"@alicloud/alimt20181012": "^1.2.0",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "laitool",
|
"name": "laitool",
|
||||||
"version": "3.3.2",
|
"version": "3.3.3",
|
||||||
"description": "An AI tool for image processing, video processing, and other functions.",
|
"description": "An AI tool for image processing, video processing, and other functions.",
|
||||||
"main": "./out/main/index.js",
|
"main": "./out/main/index.js",
|
||||||
"author": "laitool.cn",
|
"author": "laitool.cn",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@ -53,6 +53,7 @@ export class RemoteMJModel extends Realm.Object<RemoteMJModel> {
|
|||||||
updateTime: Date
|
updateTime: Date
|
||||||
version: string
|
version: string
|
||||||
blockMessage?: string
|
blockMessage?: string
|
||||||
|
type?: string
|
||||||
static schema: ObjectSchema = {
|
static schema: ObjectSchema = {
|
||||||
name: 'RemoteMJ',
|
name: 'RemoteMJ',
|
||||||
properties: {
|
properties: {
|
||||||
@ -73,7 +74,8 @@ export class RemoteMJModel extends Realm.Object<RemoteMJModel> {
|
|||||||
createTime: 'date',
|
createTime: 'date',
|
||||||
updateTime: 'date',
|
updateTime: 'date',
|
||||||
version: 'string',
|
version: 'string',
|
||||||
blockMessage: 'string?'
|
blockMessage: 'string?',
|
||||||
|
type: "string?"
|
||||||
},
|
},
|
||||||
// 主键为_id
|
// 主键为_id
|
||||||
primaryKey: 'id'
|
primaryKey: 'id'
|
||||||
|
|||||||
@ -31,6 +31,7 @@ export class MJSettingService extends BaseSoftWareService {
|
|||||||
return MJSettingService.instance
|
return MJSettingService.instance
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化数据
|
* 初始化数据
|
||||||
*/
|
*/
|
||||||
@ -302,6 +303,9 @@ export class MJSettingService extends BaseSoftWareService {
|
|||||||
if (remoteMjQuery?.accountId) {
|
if (remoteMjQuery?.accountId) {
|
||||||
remoteMjSettings = this.realm.objects('RemoteMJ').filtered('accountId = $0', remoteMjQuery.accountId)
|
remoteMjSettings = this.realm.objects('RemoteMJ').filtered('accountId = $0', remoteMjQuery.accountId)
|
||||||
}
|
}
|
||||||
|
if (remoteMjQuery?.type) {
|
||||||
|
remoteMjSettings = this.realm.objects('RemoteMJ').filtered('type = $0', remoteMjQuery.type)
|
||||||
|
}
|
||||||
let resRemoteMj = Array.from(remoteMjSettings).map((remoteMj) => {
|
let resRemoteMj = Array.from(remoteMjSettings).map((remoteMj) => {
|
||||||
return {
|
return {
|
||||||
...remoteMj
|
...remoteMj
|
||||||
@ -463,7 +467,6 @@ export class MJSettingService extends BaseSoftWareService {
|
|||||||
*/
|
*/
|
||||||
GetMjSetting() {
|
GetMjSetting() {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
let res = this.realm.objects('Options').filtered(`key = "${OptionKeyName.MJ_GlobalSetting}"`);
|
let res = this.realm.objects('Options').filtered(`key = "${OptionKeyName.MJ_GlobalSetting}"`);
|
||||||
|
|
||||||
let mjSetting: OptionModel.OptionItem | null = null;
|
let mjSetting: OptionModel.OptionItem | null = null;
|
||||||
|
|||||||
@ -170,6 +170,14 @@ const migration = (oldRealm: Realm, newRealm: Realm) => {
|
|||||||
}
|
}
|
||||||
if (oldRealm.schemaVersion < 25) {
|
if (oldRealm.schemaVersion < 25) {
|
||||||
}
|
}
|
||||||
|
if (oldRealm.schemaVersion < 26) {
|
||||||
|
newRealm.write(() => {
|
||||||
|
const newSoftwares = newRealm.objects('RemoteMJ')
|
||||||
|
for (let software of newSoftwares) {
|
||||||
|
software.type = "remote" // 默认都是启用的;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class BaseSoftWareService extends BaseService {
|
export class BaseSoftWareService extends BaseService {
|
||||||
@ -210,7 +218,7 @@ export class BaseSoftWareService extends BaseService {
|
|||||||
OptionsModel
|
OptionsModel
|
||||||
],
|
],
|
||||||
path: dbPath,
|
path: dbPath,
|
||||||
schemaVersion: 25, // 当前版本号
|
schemaVersion: 26, // 当前版本号
|
||||||
migration: migration
|
migration: migration
|
||||||
}
|
}
|
||||||
// 判断当前全局是不是又当前这个
|
// 判断当前全局是不是又当前这个
|
||||||
|
|||||||
@ -14,6 +14,9 @@ let mjSetting = new MJSetting()
|
|||||||
import { Watermark } from '../Service/watermark'
|
import { Watermark } from '../Service/watermark'
|
||||||
let watermark = new Watermark()
|
let watermark = new Watermark()
|
||||||
|
|
||||||
|
import { SoftWareServiceBasic } from '../Service/ServiceBasic/softwareServiceBasic'
|
||||||
|
let softWareServiceBasic = new SoftWareServiceBasic()
|
||||||
|
|
||||||
async function SettingIpc() {
|
async function SettingIpc() {
|
||||||
// 获取背景音乐配置列表
|
// 获取背景音乐配置列表
|
||||||
ipcMain.handle(
|
ipcMain.handle(
|
||||||
@ -179,12 +182,6 @@ async function SettingIpc() {
|
|||||||
async (event, value) => await mjSetting.GetMJSetting(value)
|
async (event, value) => await mjSetting.GetMJSetting(value)
|
||||||
)
|
)
|
||||||
|
|
||||||
// 保存MJ的基础设置信息
|
|
||||||
ipcMain.handle(
|
|
||||||
DEFINE_STRING.SETTING.UPDATE_MJ_SETTING,
|
|
||||||
async (event, value) => await mjSetting.UpdateMJSetting(value)
|
|
||||||
)
|
|
||||||
|
|
||||||
// 获取MJ的所有设置
|
// 获取MJ的所有设置
|
||||||
ipcMain.handle(
|
ipcMain.handle(
|
||||||
DEFINE_STRING.SETTING.GET_MJ_SETTING_TREE_DATA,
|
DEFINE_STRING.SETTING.GET_MJ_SETTING_TREE_DATA,
|
||||||
@ -200,19 +197,19 @@ async function SettingIpc() {
|
|||||||
// 获取所有的代理MJ信息
|
// 获取所有的代理MJ信息
|
||||||
ipcMain.handle(
|
ipcMain.handle(
|
||||||
DEFINE_STRING.SETTING.GET_REMOTE_MJ_SETTINGS,
|
DEFINE_STRING.SETTING.GET_REMOTE_MJ_SETTINGS,
|
||||||
async (event) => await mjSetting.GetRemoteMJSettings()
|
async (event, type: string) => await mjSetting.GetRemoteMJSettings(type)
|
||||||
)
|
)
|
||||||
|
|
||||||
// 创建新的代理MJ信息
|
// 创建新的代理MJ信息
|
||||||
ipcMain.handle(
|
ipcMain.handle(
|
||||||
DEFINE_STRING.SETTING.ADD_REMOTE_MJ_SETTING,
|
DEFINE_STRING.SETTING.ADD_REMOTE_MJ_SETTING,
|
||||||
async (event, value, isRemote) => await mjSetting.AddRemoteMJSetting(value, isRemote)
|
async (event, value, type: string) => await mjSetting.AddRemoteMJSetting(value, true, type)
|
||||||
)
|
)
|
||||||
|
|
||||||
// 修改MJ账号并重连
|
// 修改MJ账号并重连
|
||||||
ipcMain.handle(
|
ipcMain.handle(
|
||||||
DEFINE_STRING.SETTING.UPDATE_REMOTE_MJ_SETTING,
|
DEFINE_STRING.SETTING.UPDATE_REMOTE_MJ_SETTING,
|
||||||
async (event, value) => await mjSetting.UpdateRemoteMJSetting(value)
|
async (event, value, type: string) => await mjSetting.UpdateRemoteMJSetting(value, type)
|
||||||
)
|
)
|
||||||
|
|
||||||
// 删除指定的MJ账号
|
// 删除指定的MJ账号
|
||||||
@ -224,7 +221,7 @@ async function SettingIpc() {
|
|||||||
/** 同步MJ远程代理服务器账户信息 */
|
/** 同步MJ远程代理服务器账户信息 */
|
||||||
ipcMain.handle(
|
ipcMain.handle(
|
||||||
DEFINE_STRING.SETTING.GET_REMOTE_MJ_SETTINGS_FROM_SERVICE,
|
DEFINE_STRING.SETTING.GET_REMOTE_MJ_SETTINGS_FROM_SERVICE,
|
||||||
async (event) => await mjSetting.GetRemoteMJSettingsFromService()
|
async (event, type: string) => await mjSetting.GetRemoteMJSettingsFromService(type)
|
||||||
)
|
)
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|||||||
@ -31,18 +31,35 @@ class MJApi {
|
|||||||
this.optionServices = new OptionServices()
|
this.optionServices = new OptionServices()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定类型的MJ账号设置
|
||||||
|
* @param type
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async GetRemoteMJAccountAndRandom(type: string): Promise<string> {
|
||||||
|
let _mjSetting = await MJSettingService.getInstance()
|
||||||
|
let res = _mjSetting.GetRemoteMJSettings({
|
||||||
|
type: type
|
||||||
|
})
|
||||||
|
if (res.code != 1) {
|
||||||
|
throw new Error(res.message)
|
||||||
|
}
|
||||||
|
if (res.data.length == 0) {
|
||||||
|
throw new Error("没有找到对应的本地代理模式的账号信息,请检查设置")
|
||||||
|
}
|
||||||
|
let randomIndex = Math.floor(Math.random() * res.data.length)
|
||||||
|
let randomAccount = res.data[randomIndex];
|
||||||
|
let randomAccountId = randomAccount.accountId;
|
||||||
|
if (type == 'local') {
|
||||||
|
randomAccountId = randomAccount.channelId;
|
||||||
|
}
|
||||||
|
return randomAccountId
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化MJ设置
|
* 初始化MJ设置
|
||||||
*/
|
*/
|
||||||
async InitMJSetting(): Promise<void> {
|
async InitMJSetting(): Promise<void> {
|
||||||
// 获取MJ配置,从数据库中
|
|
||||||
// let _mjSettingService = await MJSettingService.getInstance()
|
|
||||||
// let mjSettings = _mjSettingService.GetMJSettingTreeData()
|
|
||||||
// if (mjSettings.code == 0) {
|
|
||||||
// throw new Error(mjSettings.message)
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
let mjSettingData = await this.optionServices.GetOptionByKey(OptionKeyName.MJ_GlobalSetting);
|
let mjSettingData = await this.optionServices.GetOptionByKey(OptionKeyName.MJ_GlobalSetting);
|
||||||
if (mjSettingData.code == 0) {
|
if (mjSettingData.code == 0) {
|
||||||
throw new Error("加载MJ设置失败,失败原因如下:" + mjSettingData.message)
|
throw new Error("加载MJ设置失败,失败原因如下:" + mjSettingData.message)
|
||||||
@ -62,13 +79,24 @@ class MJApi {
|
|||||||
this.imagineUrl = define.remotemj_api + 'mj/submit/imagine'
|
this.imagineUrl = define.remotemj_api + 'mj/submit/imagine'
|
||||||
this.describeUrl = define.remotemj_api + 'mj/submit/describe'
|
this.describeUrl = define.remotemj_api + 'mj/submit/describe'
|
||||||
this.fetchTaskUrl = define.remotemj_api + 'mj/task/${id}/fetch'
|
this.fetchTaskUrl = define.remotemj_api + 'mj/task/${id}/fetch'
|
||||||
|
} else if (this.mjSimpleSetting.type == MJImageType.LOCAL_MJ) {
|
||||||
|
let localRemoteBaseUrl = this.mj_globalSetting.mj_localRemoteSimpleSetting.baseUrl;
|
||||||
|
let localRemotePort = this.mj_globalSetting.mj_localRemoteSimpleSetting.port;
|
||||||
|
let localRemoteToken = this.mj_globalSetting.mj_localRemoteSimpleSetting.token;
|
||||||
|
if (isEmpty(localRemoteBaseUrl) || isEmpty(localRemotePort) || isEmpty(localRemoteToken)) {
|
||||||
|
throw new Error("没有找到对应的本地代理模式的设置,请检查设置")
|
||||||
|
}
|
||||||
|
if (localRemoteBaseUrl.endsWith('/')) {
|
||||||
|
localRemoteBaseUrl = localRemoteBaseUrl.slice(0, -1)
|
||||||
|
}
|
||||||
|
this.imagineUrl = localRemoteBaseUrl + ":" + localRemotePort + '/mj/submit/imagine'
|
||||||
|
this.describeUrl = localRemoteBaseUrl + ":" + localRemotePort + '/mj/submit/describe'
|
||||||
|
this.fetchTaskUrl = localRemoteBaseUrl + ":" + localRemotePort + '/mj/task/${id}/fetch'
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
let apiUrlIndex = apiUrl.findIndex(item => item.value == this.mj_globalSetting.mj_apiSetting.mjApiUrl);
|
let apiUrlIndex = apiUrl.findIndex(item => item.value == this.mj_globalSetting.mj_apiSetting.mjApiUrl);
|
||||||
if (apiUrlIndex == -1) {
|
if (apiUrlIndex == -1) {
|
||||||
throw new Error('没有找到MJ API对应的请求URL,请检查配置');
|
throw new Error('没有找到MJ API对应的请求URL,请检查配置');
|
||||||
}
|
}
|
||||||
|
|
||||||
let apiUrlItem = apiUrl[apiUrlIndex];
|
let apiUrlItem = apiUrl[apiUrlIndex];
|
||||||
if (apiUrlItem.mj_url == null) {
|
if (apiUrlItem.mj_url == null) {
|
||||||
throw new Error('没有找到MJ API对应的请求URL,请检查配置');
|
throw new Error('没有找到MJ API对应的请求URL,请检查配置');
|
||||||
@ -98,6 +126,11 @@ class MJApi {
|
|||||||
'mj-api-secret': define.API
|
'mj-api-secret': define.API
|
||||||
}
|
}
|
||||||
useTransfer = this.mj_globalSetting.mj_remoteSimpleSetting.useTransfer
|
useTransfer = this.mj_globalSetting.mj_remoteSimpleSetting.useTransfer
|
||||||
|
} else if (this.mjSimpleSetting.type == MJImageType.LOCAL_MJ) {
|
||||||
|
headers = {
|
||||||
|
'mj-api-secret': this.mj_globalSetting.mj_localRemoteSimpleSetting.token
|
||||||
|
}
|
||||||
|
useTransfer = false;
|
||||||
} else {
|
} else {
|
||||||
headers = {
|
headers = {
|
||||||
Authorization: this.mj_globalSetting.mj_apiSetting.apiKey
|
Authorization: this.mj_globalSetting.mj_apiSetting.apiKey
|
||||||
@ -195,6 +228,7 @@ class MJApi {
|
|||||||
switch (this.mjSimpleSetting.type) {
|
switch (this.mjSimpleSetting.type) {
|
||||||
case MJImageType.REMOTE_MJ:
|
case MJImageType.REMOTE_MJ:
|
||||||
case MJImageType.API_MJ:
|
case MJImageType.API_MJ:
|
||||||
|
case MJImageType.LOCAL_MJ:
|
||||||
res = await this.SubmitMJDescribeAPI(param)
|
res = await this.SubmitMJDescribeAPI(param)
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
@ -215,9 +249,9 @@ class MJApi {
|
|||||||
base64: param.image,
|
base64: param.image,
|
||||||
accountFilter: {
|
accountFilter: {
|
||||||
modes: [this.mj_globalSetting.mj_apiSetting.mjSpeed == MJSpeed.FAST ? "FAST" : "RELAX"],
|
modes: [this.mj_globalSetting.mj_apiSetting.mjSpeed == MJSpeed.FAST ? "FAST" : "RELAX"],
|
||||||
remark: global.machineId
|
remark: global.machineId,
|
||||||
|
instanceId: "",
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
let config = {
|
let config = {
|
||||||
headers: {
|
headers: {
|
||||||
@ -228,9 +262,19 @@ class MJApi {
|
|||||||
if (this.mjSimpleSetting.type == MJImageType.REMOTE_MJ) {
|
if (this.mjSimpleSetting.type == MJImageType.REMOTE_MJ) {
|
||||||
config.headers["mj-api-secret"] = define.API;
|
config.headers["mj-api-secret"] = define.API;
|
||||||
delete data.accountFilter.modes;
|
delete data.accountFilter.modes;
|
||||||
} else {
|
delete data.accountFilter.instanceId;
|
||||||
|
} else if (this.mjSimpleSetting.type == MJImageType.API_MJ) {
|
||||||
delete data.accountFilter.remark
|
delete data.accountFilter.remark
|
||||||
|
delete data.accountFilter.instanceId;
|
||||||
config.headers["Authorization"] = this.mj_globalSetting.mj_apiSetting.apiKey;
|
config.headers["Authorization"] = this.mj_globalSetting.mj_apiSetting.apiKey;
|
||||||
|
} else if (this.mjSimpleSetting.type == MJImageType.LOCAL_MJ) {
|
||||||
|
delete data.accountFilter.remark
|
||||||
|
delete data.accountFilter.modes;
|
||||||
|
let instanceId = await this.GetRemoteMJAccountAndRandom('local');
|
||||||
|
data.accountFilter.instanceId = instanceId;
|
||||||
|
config.headers["mj-api-secret"] = this.mj_globalSetting.mj_localRemoteSimpleSetting.token;
|
||||||
|
} else {
|
||||||
|
throw new Error("MJ出图的类型不支持")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 开始请求
|
// 开始请求
|
||||||
@ -276,6 +320,7 @@ class MJApi {
|
|||||||
switch (this.mjSimpleSetting.type) {
|
switch (this.mjSimpleSetting.type) {
|
||||||
case MJImageType.REMOTE_MJ:
|
case MJImageType.REMOTE_MJ:
|
||||||
case MJImageType.API_MJ:
|
case MJImageType.API_MJ:
|
||||||
|
case MJImageType.LOCAL_MJ:
|
||||||
res = await this.SubmitMJImagineAPI(taskId, prompt)
|
res = await this.SubmitMJImagineAPI(taskId, prompt)
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
@ -302,7 +347,8 @@ class MJApi {
|
|||||||
prompt: prompt,
|
prompt: prompt,
|
||||||
accountFilter: {
|
accountFilter: {
|
||||||
modes: [this.mj_globalSetting.mj_apiSetting.mjSpeed == MJSpeed.FAST ? "FAST" : "RELAX"],
|
modes: [this.mj_globalSetting.mj_apiSetting.mjSpeed == MJSpeed.FAST ? "FAST" : "RELAX"],
|
||||||
remark: global.machineId
|
remark: global.machineId,
|
||||||
|
instanceId: "",
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -317,11 +363,21 @@ class MJApi {
|
|||||||
if (this.mjSimpleSetting.type == MJImageType.REMOTE_MJ) {
|
if (this.mjSimpleSetting.type == MJImageType.REMOTE_MJ) {
|
||||||
config.headers["mj-api-secret"] = define.API;
|
config.headers["mj-api-secret"] = define.API;
|
||||||
delete data.accountFilter.modes;
|
delete data.accountFilter.modes;
|
||||||
|
delete data.accountFilter.instanceId;
|
||||||
useTransfer = this.mj_globalSetting.mj_remoteSimpleSetting.useTransfer
|
useTransfer = this.mj_globalSetting.mj_remoteSimpleSetting.useTransfer
|
||||||
} else {
|
} else if (this.mjSimpleSetting.type == MJImageType.API_MJ) {
|
||||||
delete data.accountFilter.remark
|
delete data.accountFilter.remark
|
||||||
|
delete data.accountFilter.instanceId;
|
||||||
config.headers["Authorization"] = this.mj_globalSetting.mj_apiSetting.apiKey;
|
config.headers["Authorization"] = this.mj_globalSetting.mj_apiSetting.apiKey;
|
||||||
useTransfer = this.mj_globalSetting.mj_apiSetting.useTransfer
|
useTransfer = this.mj_globalSetting.mj_apiSetting.useTransfer
|
||||||
|
} else if (this.mjSimpleSetting.type == MJImageType.LOCAL_MJ) {
|
||||||
|
delete data.accountFilter.remark
|
||||||
|
let instanceId = await this.GetRemoteMJAccountAndRandom('local');
|
||||||
|
data.accountFilter.instanceId = instanceId;
|
||||||
|
useTransfer = false;
|
||||||
|
config.headers["mj-api-secret"] = this.mj_globalSetting.mj_localRemoteSimpleSetting.token;
|
||||||
|
} else {
|
||||||
|
throw new Error("MJ出图的类型不支持")
|
||||||
}
|
}
|
||||||
|
|
||||||
let resData: any = undefined;
|
let resData: any = undefined;
|
||||||
@ -353,7 +409,6 @@ class MJApi {
|
|||||||
let re = JSON.parse(res.data.data);
|
let re = JSON.parse(res.data.data);
|
||||||
resData = re
|
resData = re
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// 开始请求
|
// 开始请求
|
||||||
let res = await axios.post(this.imagineUrl, data, config)
|
let res = await axios.post(this.imagineUrl, data, config)
|
||||||
resData = res.data
|
resData = res.data
|
||||||
|
|||||||
@ -6,10 +6,15 @@ import { MJRobotType, MJSpeed } from "@/define/enum/mjEnum"
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function GetMJRequestModelOptions() {
|
function GetMJRequestModelOptions() {
|
||||||
let mjRequstModel = [{
|
let mjRequstModel = [
|
||||||
label: "本地MJ(待开发)",
|
{
|
||||||
|
label: "API模式",
|
||||||
|
value: "api_mj",
|
||||||
|
disable: false
|
||||||
|
}, {
|
||||||
|
label: "本地代理模式",
|
||||||
value: "local_mj",
|
value: "local_mj",
|
||||||
disable: true
|
disable: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "代理MJ(token)",
|
label: "代理MJ(token)",
|
||||||
@ -19,12 +24,7 @@ function GetMJRequestModelOptions() {
|
|||||||
{
|
{
|
||||||
label: "浏览器模式",
|
label: "浏览器模式",
|
||||||
value: "browser_mj",
|
value: "browser_mj",
|
||||||
disable: false
|
disable: true
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "API模式",
|
|
||||||
value: "api_mj",
|
|
||||||
disable: false
|
|
||||||
}]
|
}]
|
||||||
return mjRequstModel.filter(item => !item.disable)
|
return mjRequstModel.filter(item => !item.disable)
|
||||||
}
|
}
|
||||||
|
|||||||
35
src/main/Service/ServiceBasic/softwareMjsettingBasic.ts
Normal file
35
src/main/Service/ServiceBasic/softwareMjsettingBasic.ts
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import { MJSettingService } from "@/define/db/service/SoftWare/mjSettingService";
|
||||||
|
import { MJSettingModel } from "@/model/Setting/mjSetting";
|
||||||
|
|
||||||
|
export class SoftwareMjsettingBasic {
|
||||||
|
mjSettingService: MJSettingService
|
||||||
|
|
||||||
|
async InitService() {
|
||||||
|
if (!this.mjSettingService) {
|
||||||
|
this.mjSettingService = await MJSettingService.getInstance()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//#region MJ设置相关
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取MJ的设置信息
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async GetMjSetting(): Promise<MJSettingModel.MjSimpleSettingModel> {
|
||||||
|
await this.InitService();
|
||||||
|
let mjSetting = this.mjSettingService.GetMjSetting()
|
||||||
|
return mjSetting
|
||||||
|
}
|
||||||
|
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region 事务操作
|
||||||
|
async transaction(callback: (realm: any) => void) {
|
||||||
|
await this.InitService()
|
||||||
|
this.mjSettingService.transaction(() => {
|
||||||
|
callback(this.mjSettingService.realm)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { SoftwareService } from '../../../define/db/service/SoftWare/softwareService';
|
import { SoftwareService } from '../../../define/db/service/SoftWare/softwareService';
|
||||||
import { MJSettingService } from '../../../define/db/service/SoftWare/mjSettingService';
|
|
||||||
import { MJSettingModel } from '../../../model/Setting/mjSetting';
|
import { MJSettingModel } from '../../../model/Setting/mjSetting';
|
||||||
|
import { SoftwareMjsettingBasic } from './softwareMjsettingBasic';
|
||||||
|
|
||||||
|
|
||||||
export class SoftWareServiceBasic {
|
export class SoftWareServiceBasic {
|
||||||
softwareService: SoftwareService
|
softwareService: SoftwareService
|
||||||
mjSettingService: MJSettingService
|
softwareMjsettingBasic: SoftwareMjsettingBasic
|
||||||
constructor() { }
|
|
||||||
|
constructor() {
|
||||||
|
this.softwareMjsettingBasic = new SoftwareMjsettingBasic()
|
||||||
|
}
|
||||||
|
|
||||||
async InitService() {
|
async InitService() {
|
||||||
if (!this.softwareService) {
|
if (!this.softwareService) {
|
||||||
this.softwareService = await SoftwareService.getInstance()
|
this.softwareService = await SoftwareService.getInstance()
|
||||||
}
|
}
|
||||||
if (!this.mjSettingService) {
|
|
||||||
this.mjSettingService = await MJSettingService.getInstance()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//#region software相关的基础服务
|
//#region software相关的基础服务
|
||||||
@ -79,19 +79,26 @@ export class SoftWareServiceBasic {
|
|||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region MJ设置相关
|
//#region Option 相关
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region MJ 设置相关
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取MJ的设置信息
|
* 获取MJ的设置信息
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async GetMjSetting(): Promise<MJSettingModel.MjSimpleSettingModel> {
|
GetMjSetting = async (): Promise<MJSettingModel.MjSimpleSettingModel> => await this.softwareMjsettingBasic.GetMjSetting();
|
||||||
await this.InitService();
|
|
||||||
let mjSetting = this.mjSettingService.GetMjSetting()
|
|
||||||
|
|
||||||
return mjSetting
|
|
||||||
}
|
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
|
||||||
|
//#region 事务操作
|
||||||
|
|
||||||
|
transaction = async (realm: any) => await this.softwareMjsettingBasic.transaction(realm);
|
||||||
|
//#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -15,16 +15,17 @@ export class DiscordWorker {
|
|||||||
* 初始化DisCord的配置文件
|
* 初始化DisCord的配置文件
|
||||||
*/
|
*/
|
||||||
async InitData() {
|
async InitData() {
|
||||||
if (this.mj_config) return;
|
// TODO 初始化的方式有修改
|
||||||
// 初始化MJ配置
|
// if (this.mj_config) return;
|
||||||
let _mjSettingService = await MJSettingService.getInstance();
|
// // 初始化MJ配置
|
||||||
let mjSettings = _mjSettingService.GetMJSettingTreeData();
|
// let _mjSettingService = await MJSettingService.getInstance();
|
||||||
if (mjSettings.code == 0) {
|
// let mjSettings = _mjSettingService.GetMJSettingTreeData_();
|
||||||
throw new Error(mjSettings.message);
|
// if (mjSettings.code == 0) {
|
||||||
}
|
// throw new Error(mjSettings.message);
|
||||||
let mjSetting = mjSettings.data;
|
// }
|
||||||
|
// let mjSetting = mjSettings.data;
|
||||||
|
|
||||||
this.mj_config = mjSetting;
|
// this.mj_config = mjSetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -14,7 +14,6 @@ import { ImageGenerate } from './ReverseManage/imageGenerate.js'
|
|||||||
import { Setting } from './setting/setting'
|
import { Setting } from './setting/setting'
|
||||||
import { has, isEmpty } from 'lodash'
|
import { has, isEmpty } from 'lodash'
|
||||||
import { AutoSync } from './setting/autoSync.js'
|
import { AutoSync } from './setting/autoSync.js'
|
||||||
import { TaskManager } from './Service/task/taskManage'
|
|
||||||
import { SoftWareServiceBasic } from './Service/ServiceBasic/softwareServiceBasic'
|
import { SoftWareServiceBasic } from './Service/ServiceBasic/softwareServiceBasic'
|
||||||
|
|
||||||
// ipc
|
// ipc
|
||||||
@ -22,12 +21,15 @@ import { DiscordIpc, RemoveDiscordIpc } from './IPCEvent/discordIpc.js'
|
|||||||
import { Logger } from './logger.js'
|
import { Logger } from './logger.js'
|
||||||
import { RegisterIpc } from './IPCEvent/index.js'
|
import { RegisterIpc } from './IPCEvent/index.js'
|
||||||
|
|
||||||
|
import { InitRemoteMjSettingType } from './initFunc'
|
||||||
|
|
||||||
let tools = new Tools()
|
let tools = new Tools()
|
||||||
let imageGenerate = new ImageGenerate(global)
|
let imageGenerate = new ImageGenerate(global)
|
||||||
let setting = new Setting(global)
|
let setting = new Setting(global)
|
||||||
let softWareServiceBasic = new SoftWareServiceBasic()
|
let softWareServiceBasic = new SoftWareServiceBasic()
|
||||||
|
|
||||||
async function InitData(gl) {
|
async function InitData(gl) {
|
||||||
|
await InitRemoteMjSettingType()
|
||||||
let res = await setting.getSettingDafultData()
|
let res = await setting.getSettingDafultData()
|
||||||
gl.config = res
|
gl.config = res
|
||||||
return res
|
return res
|
||||||
@ -95,7 +97,7 @@ async function createWindow(hash = 'ShowMessage', data, url = null) {
|
|||||||
if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
|
if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
|
||||||
mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + '/#/' + hash)
|
mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + '/#/' + hash)
|
||||||
// mainWindow.webContents.openDevTools()
|
// mainWindow.webContents.openDevTools()
|
||||||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
|
||||||
} else {
|
} else {
|
||||||
if (hash != '') {
|
if (hash != '') {
|
||||||
mainWindow.loadURL(`file://${path.join(__dirname, '../renderer/index.html')}#/${hash}`)
|
mainWindow.loadURL(`file://${path.join(__dirname, '../renderer/index.html')}#/${hash}`)
|
||||||
|
|||||||
25
src/main/initFunc.ts
Normal file
25
src/main/initFunc.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import { isEmpty } from "lodash";
|
||||||
|
import { errorMessage, successMessage } from "./Public/generalTools";
|
||||||
|
import { SoftWareServiceBasic } from "./Service/ServiceBasic/softwareServiceBasic";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化远程MJ的设置类型
|
||||||
|
* @description 远程MJ的设置类型有两种:remote和local,remote表示远程代理模式,local表示本地模式
|
||||||
|
*/
|
||||||
|
export async function InitRemoteMjSettingType() {
|
||||||
|
try {
|
||||||
|
let softWareServiceBasic = new SoftWareServiceBasic()
|
||||||
|
softWareServiceBasic.transaction((realm: any) => {
|
||||||
|
let remoteMjs = realm.objects('RemoteMJ');
|
||||||
|
for (let remoteMj of remoteMjs) {
|
||||||
|
if (remoteMj.type == null || isEmpty(remoteMj.type)) {
|
||||||
|
remoteMj.type = "remote" // 默认都是remote的;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
successMessage("", "初始化远程MJ的设置类型成功", "InitRemoteMjSettingType")
|
||||||
|
} catch (error) {
|
||||||
|
errorMessage("初始化远程MJ的设置类型失败," + error.toString(), "InitRemoteMjSettingType")
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -66,149 +66,12 @@ async function GlobalAutoSync() {
|
|||||||
* 自动同步MJ配置数据
|
* 自动同步MJ配置数据
|
||||||
*/
|
*/
|
||||||
|
|
||||||
async function AutoSyncMJConfig2210() {
|
async function AutoSyncMJConfig2210() {}
|
||||||
try {
|
|
||||||
// 判断版本
|
|
||||||
if (version != '2.2.10') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 同步MJ的配置到服务器中
|
|
||||||
let mjConfigJson = JSON.parse(await fspromises.readFile(define.img_base, 'utf-8'))
|
|
||||||
// 开始同步APIMJsetting
|
|
||||||
let _mjSettingService = await MJSettingService.getInstance()
|
|
||||||
|
|
||||||
if (!mjConfigJson.mj_config) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断数据库中有没有API数据
|
|
||||||
let dbApiSetting = _mjSettingService.GetAPIMjSetting(null)
|
|
||||||
if (dbApiSetting.code == 1 && dbApiSetting.data.length <= 0) {
|
|
||||||
// 同步API请求配置
|
|
||||||
if (
|
|
||||||
mjConfigJson.mj_config.mj_api_url &&
|
|
||||||
mjConfigJson.mj_config.mj_speed &&
|
|
||||||
mjConfigJson.mj_config.api_key
|
|
||||||
) {
|
|
||||||
let apiSetting = {
|
|
||||||
mjApiUrl: mjConfigJson.mj_config.mj_api_url,
|
|
||||||
mjSpeed: mjConfigJson.mj_config.mj_speed,
|
|
||||||
apiKey: mjConfigJson.mj_config.api_key
|
|
||||||
}
|
|
||||||
let res = _mjSettingService.AddAPIMjSetting(apiSetting)
|
|
||||||
if (res.code == 1) {
|
|
||||||
global.logger.info('AutoSyncMJConfig2210', '自动同步MJ API 配置数据成功')
|
|
||||||
} else {
|
|
||||||
global.logger.error(
|
|
||||||
'AutoSyncMJConfig2210',
|
|
||||||
'自动同步MJ API 配置数据失败,错误信息如下:' + '\n' + res.message
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断数据库中是不是存在浏览器配置数据,不存在同步
|
|
||||||
let dbBrowserSetting = _mjSettingService.GetBrowserMJSetting(null)
|
|
||||||
if (dbBrowserSetting.code == 1 && dbBrowserSetting.data.length <= 0) {
|
|
||||||
// 同步浏览器配置,判断数据是不是存在
|
|
||||||
if (
|
|
||||||
isEmpty(mjConfigJson.mj_config.serviceID) ||
|
|
||||||
isEmpty(mjConfigJson.mj_config.channelID) ||
|
|
||||||
isEmpty(mjConfigJson.mj_config.token) ||
|
|
||||||
!mjConfigJson.mj_config.userAgent ||
|
|
||||||
isEmpty(mjConfigJson.mj_config.userAgent) ||
|
|
||||||
isEmpty(mjConfigJson.mj_config.userAgent.userAgent)
|
|
||||||
) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 开始添加浏览器配置
|
|
||||||
let browserSetting = {
|
|
||||||
serviceId: mjConfigJson.mj_config.serviceID,
|
|
||||||
channelId: mjConfigJson.mj_config.channelID,
|
|
||||||
token: mjConfigJson.mj_config.token,
|
|
||||||
userAgent: mjConfigJson.mj_config.userAgent.userAgent
|
|
||||||
}
|
|
||||||
let res = _mjSettingService.AddBrowserMJSetting(browserSetting)
|
|
||||||
if (res.code == 1) {
|
|
||||||
global.logger.info('AutoSyncMJConfig2210', '自动同步MJ 浏览器配置数据成功')
|
|
||||||
} else {
|
|
||||||
global.logger.error(
|
|
||||||
'AutoSyncMJConfig2210',
|
|
||||||
'自动同步MJ 浏览器配置数据失败,错误信息如下:' + '\n' + res.message
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断基础数据,不存在同步
|
|
||||||
let mjSetting = _mjSettingService.GetMjSetting()
|
|
||||||
if (mjSetting.code == 1 && mjSetting.data.length <= 0) {
|
|
||||||
//判断数据然后选择同步
|
|
||||||
if (
|
|
||||||
isEmpty(mjConfigJson.mj_config.request_model) ||
|
|
||||||
isEmpty(mjConfigJson.mj_config.select_robot) ||
|
|
||||||
isEmpty(mjConfigJson.mj_config.image_scale) ||
|
|
||||||
isEmpty(mjConfigJson.mj_config.image_model) ||
|
|
||||||
isEmpty(mjConfigJson.mj_config.image_suffix)
|
|
||||||
) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 开始添加基础配置
|
|
||||||
let mjSettingData = {
|
|
||||||
requestModel: mjConfigJson.mj_config.request_model,
|
|
||||||
selectRobot: mjConfigJson.mj_config.select_robot,
|
|
||||||
imageScale: mjConfigJson.mj_config.image_scale,
|
|
||||||
imageModel: mjConfigJson.mj_config.image_model,
|
|
||||||
imageSuffix: mjConfigJson.mj_config.image_suffix,
|
|
||||||
taskCount: mjConfigJson.mj_config.task_count ? mjConfigJson.mj_config.task_count : 3,
|
|
||||||
spaceTime: mjConfigJson.mj_config.space_time ? mjConfigJson.mj_config.space_time : 5
|
|
||||||
}
|
|
||||||
let res = _mjSettingService.AddMJSetting(mjSettingData)
|
|
||||||
if (res.code == 1) {
|
|
||||||
global.logger.info('AutoSyncMJConfig2210', '自动同步MJ 基础配置数据成功')
|
|
||||||
} else {
|
|
||||||
global.logger.error(
|
|
||||||
'AutoSyncMJConfig2210',
|
|
||||||
'自动同步MJ 基础配置数据失败,错误信息如下:' + '\n' + res.message
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化默认数据
|
|
||||||
let _softwareService = await SoftwareService.getInstance()
|
|
||||||
let softs = await _softwareService.GetSoftwareData(null)
|
|
||||||
if (softs.code == 1 && softs.data.length <= 0) {
|
|
||||||
// 添加
|
|
||||||
let softData = {
|
|
||||||
theme: 'light',
|
|
||||||
reverse_display_show: false,
|
|
||||||
reverse_show_book_striped: false,
|
|
||||||
reverse_data_table_size: 'small'
|
|
||||||
}
|
|
||||||
let res = await _softwareService.AddSfotware(softData)
|
|
||||||
if (res.code == 0) {
|
|
||||||
throw new Error(res.message)
|
|
||||||
}
|
|
||||||
|
|
||||||
global.logger.info('AutoSyncMJConfig2210', '自动同步软件配置数据成功')
|
|
||||||
}
|
|
||||||
|
|
||||||
return mjConfigJson
|
|
||||||
} catch (error) {
|
|
||||||
// 同步数据不报错,只添加日志
|
|
||||||
global.logger.error(
|
|
||||||
'AutoSyncMJConfig2210',
|
|
||||||
'自动同步MJ配置数据失败,错误信息如下:' + '\n' + error.toString()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
export async function AutoSync() {
|
export async function AutoSync() {
|
||||||
// 2.2.10 版本 自动同步数据
|
// 2.2.10 版本 自动同步数据
|
||||||
await AutoSyncMJConfig2210()
|
// await AutoSyncMJConfig2210()
|
||||||
// 通用同步
|
// 通用同步
|
||||||
await GlobalAutoSync()
|
await GlobalAutoSync()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,383 +0,0 @@
|
|||||||
import axios from 'axios'
|
|
||||||
import { MJSettingService } from '../../define/db/service/SoftWare/mjSettingService'
|
|
||||||
import { define } from '../../define/define'
|
|
||||||
import { errorMessage, successMessage } from '../Public/generalTools'
|
|
||||||
import { isEmpty } from 'lodash'
|
|
||||||
const { v4: uuidv4 } = require('uuid')
|
|
||||||
|
|
||||||
export class MJSetting {
|
|
||||||
constructor() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 同步远程代理服务器中的MJ账号信息
|
|
||||||
*/
|
|
||||||
async GetRemoteMJSettingsFromService() {
|
|
||||||
try {
|
|
||||||
let url = define.remotemj_api + 'mj/account/query'
|
|
||||||
let res = await axios.post(
|
|
||||||
url,
|
|
||||||
{ remark: global.machineId, current: 1, pageNumber: 0, pageSize: 30 },
|
|
||||||
{ headers: { 'mj-api-secret': define.API } }
|
|
||||||
)
|
|
||||||
|
|
||||||
console.log('GetRemoteMJSettingsFromService', res)
|
|
||||||
if (res.status != 200) {
|
|
||||||
throw new Error(res.statusText)
|
|
||||||
}
|
|
||||||
if (!res.data || !res.data.content) {
|
|
||||||
throw new Error('远程服务器返回数据格式错误')
|
|
||||||
}
|
|
||||||
let content = res.data.content
|
|
||||||
|
|
||||||
let remoteMjSetting = await this.GetRemoteMJSettings()
|
|
||||||
if (remoteMjSetting.code == 0) {
|
|
||||||
throw new Error(remoteMjSetting.message)
|
|
||||||
}
|
|
||||||
|
|
||||||
let remoteIds = remoteMjSetting.data.map((item) => item.id)
|
|
||||||
for (let i = 0; i < remoteIds.length; i++) {
|
|
||||||
const element = remoteIds[i]
|
|
||||||
let deleteRes = await this.DeleteRemoteMJSetting(element, false)
|
|
||||||
if (deleteRes.code == 0) {
|
|
||||||
throw new Error(deleteRes.message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (content.length <= 0) {
|
|
||||||
// 没有数据,删除当前的所有的配置
|
|
||||||
} else {
|
|
||||||
// 先将所有的数据删除,再添加
|
|
||||||
for (let i = 0; i < content.length; i++) {
|
|
||||||
const element = content[i]
|
|
||||||
|
|
||||||
let addRes = await this.AddRemoteMJSetting(
|
|
||||||
{
|
|
||||||
channelId: element.channelId,
|
|
||||||
guildId: element.guildId,
|
|
||||||
userToken: element.userToken,
|
|
||||||
coreSize: element.coreSize,
|
|
||||||
queueSize: element.queueSize,
|
|
||||||
timeoutMinutes: element.timeoutMinutes,
|
|
||||||
userAgent: element.userAgent,
|
|
||||||
remark: element.remark,
|
|
||||||
enable: element.enable,
|
|
||||||
remixAutoSubmit: element.remixAutoSubmit,
|
|
||||||
mjBotChannelId: element.mjBotChannelId,
|
|
||||||
nijiBotChannelId: element.nijiBotChannelId,
|
|
||||||
accountId: element.id,
|
|
||||||
blockMessage: element.properties.disabledReason
|
|
||||||
},
|
|
||||||
false
|
|
||||||
)
|
|
||||||
if (addRes.code == 0) {
|
|
||||||
throw new Error(addRes.message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return successMessage(
|
|
||||||
null,
|
|
||||||
'同步远程代理服务器中的MJ账号信息成功',
|
|
||||||
'MJSetting_GetRemoteMJSettingsFromService'
|
|
||||||
)
|
|
||||||
} catch (error) {
|
|
||||||
return errorMessage(
|
|
||||||
'同步远程代理服务器中的MJ账号信息错误,详细错误信息如下:' + error.toString(),
|
|
||||||
'MJSetting_GetRemoteMJSettingsFromService'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取MJ的基础设置数据
|
|
||||||
*/
|
|
||||||
async GetMJSetting(mjSettingQuery) {
|
|
||||||
try {
|
|
||||||
let _mjSetting = await MJSettingService.getInstance()
|
|
||||||
let res = _mjSetting.GetMjSetting()
|
|
||||||
return res
|
|
||||||
} catch (error) {
|
|
||||||
return errorMessage(
|
|
||||||
'获取MJ的基础配置错误,错误信息如下:' + error.toString(),
|
|
||||||
'MJSetting_GetMJSetting'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 保存MJ的基础设置
|
|
||||||
* @param {*} mjSetting 保存的数据
|
|
||||||
*/
|
|
||||||
async UpdateMJSetting(mjSetting) {
|
|
||||||
try {
|
|
||||||
let _mjSetting = await MJSettingService.getInstance()
|
|
||||||
let res = _mjSetting.UpdateMJSetting(mjSetting)
|
|
||||||
return res
|
|
||||||
} catch (error) {
|
|
||||||
return errorMessage(
|
|
||||||
'保存MJ的基础配置错误,错误信息如下:' + error.toString(),
|
|
||||||
'MJSetting_UpdateMJSetting'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取MJ配置的所有数据
|
|
||||||
*/
|
|
||||||
async GetMJSettingTreeData() {
|
|
||||||
try {
|
|
||||||
let _mjSetting = await MJSettingService.getInstance()
|
|
||||||
let res = _mjSetting.GetMJSettingTreeData()
|
|
||||||
return res
|
|
||||||
} catch (error) {
|
|
||||||
return errorMessage(
|
|
||||||
'获取MJ配置错误,详细错误信息如下:' + error.toString(),
|
|
||||||
'MJSetting_GetMJSettingTreeData'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 保存MJ设置的所有数据
|
|
||||||
* @param {*} mjSetting
|
|
||||||
*/
|
|
||||||
async SaveMJSettingTreeData(mjSetting) {
|
|
||||||
try {
|
|
||||||
let _mjSetting = await MJSettingService.getInstance()
|
|
||||||
let res = _mjSetting.SaveMJSettingTreeData(mjSetting)
|
|
||||||
return res
|
|
||||||
} catch (error) {
|
|
||||||
return errorMessage(
|
|
||||||
'保存MJ配置错误,详细错误信息如下:' + error.toString(),
|
|
||||||
'MJSetting_SaveMJSettingTreeData'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取所有的MJ代理模式账号信息
|
|
||||||
*/
|
|
||||||
async GetRemoteMJSettings() {
|
|
||||||
try {
|
|
||||||
let _mjSetting = await MJSettingService.getInstance()
|
|
||||||
let res = _mjSetting.GetRemoteMJSettings(null)
|
|
||||||
return res
|
|
||||||
} catch (error) {
|
|
||||||
return errorMessage(
|
|
||||||
'获取MJ代理模式账号信息错误,详细错误信息如下:' + error.toString(),
|
|
||||||
'MJSetting_GetRemoteMJSettings'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建新的代理MJ信息
|
|
||||||
* @param {*} value
|
|
||||||
*/
|
|
||||||
async AddRemoteMJSetting(value, isRemote) {
|
|
||||||
try {
|
|
||||||
// 先检查必填字段
|
|
||||||
console.log(value)
|
|
||||||
if (isEmpty(value.channelId) || isEmpty(value.guildId) || isEmpty(value.userToken)) {
|
|
||||||
throw new Error('必填字段服务器ID,频道ID,用户token不能为空')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value.coreSize == null || value.queueSize == null || value.timeoutMinutes == null) {
|
|
||||||
throw new Error('必填字段核心线程数,队列大小,超时时间不能为空')
|
|
||||||
}
|
|
||||||
if (!value.userAgent) {
|
|
||||||
value.userAgent =
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 开始调用创建任务
|
|
||||||
let createUrl = define.remotemj_api + 'mj/account/create'
|
|
||||||
// 上面是必传的
|
|
||||||
let remoteData = {
|
|
||||||
channelId: value.channelId,
|
|
||||||
guildId: value.guildId,
|
|
||||||
userToken: value.userToken,
|
|
||||||
coreSize: value.coreSize,
|
|
||||||
queueSize: value.queueSize,
|
|
||||||
timeoutMinutes: value.timeoutMinutes,
|
|
||||||
userAgent: value.userAgent
|
|
||||||
? value.userAgent
|
|
||||||
: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
|
|
||||||
remark: global.machineId,
|
|
||||||
remixAutoSubmit: false
|
|
||||||
}
|
|
||||||
|
|
||||||
// 额外添加
|
|
||||||
if (value.mjBotChannelId) {
|
|
||||||
remoteData.mjBotChannelId = value.mjBotChannelId
|
|
||||||
}
|
|
||||||
if (value.nijiBotChannelId) {
|
|
||||||
remoteData.nijiBotChannelId = value.nijiBotChannelId
|
|
||||||
}
|
|
||||||
if (value.accountId) {
|
|
||||||
remoteData.accountId = value.accountId
|
|
||||||
}
|
|
||||||
if (!isEmpty(value.blockMessage)) {
|
|
||||||
remoteData.blockMessage = value.blockMessage
|
|
||||||
}
|
|
||||||
if (value.hasOwnProperty('enable')) {
|
|
||||||
remoteData.enable = value.enable
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isRemote) {
|
|
||||||
// 添加账号
|
|
||||||
let accountRes = await axios.post(createUrl, remoteData, {
|
|
||||||
headers: {
|
|
||||||
'mj-api-secret': define.API
|
|
||||||
}
|
|
||||||
})
|
|
||||||
console.log(accountRes)
|
|
||||||
|
|
||||||
if (accountRes.data.code != 1) {
|
|
||||||
throw new Error(accountRes.data.description)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 添加成功,修改数据,将数据返回 (服务器添加成功,开始在本地数据库添加)s
|
|
||||||
let accountId = accountRes.data.result
|
|
||||||
remoteData.accountId = accountId
|
|
||||||
}
|
|
||||||
|
|
||||||
remoteData.remixAutoSubmit = false
|
|
||||||
|
|
||||||
let _mjSettingService = await MJSettingService.getInstance()
|
|
||||||
|
|
||||||
let save_res = _mjSettingService.AddRemoteMjSetting(remoteData)
|
|
||||||
if (save_res.code != 1) {
|
|
||||||
throw new Error(save_res.message)
|
|
||||||
}
|
|
||||||
return successMessage(remoteData, 'MJ账号同步成功', 'MJSetting_AddRemoteMJSetting')
|
|
||||||
} catch (error) {
|
|
||||||
return errorMessage(
|
|
||||||
'创建新的代理MJ信息错误,详细错误信息如下:' + error.toString(),
|
|
||||||
'MJSetting_AddRemoteMJSetting'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改MJ的账号信息,并重连
|
|
||||||
* @param {*} value
|
|
||||||
*/
|
|
||||||
async UpdateRemoteMJSetting(value) {
|
|
||||||
try {
|
|
||||||
// 先检查必填字段
|
|
||||||
console.log(value)
|
|
||||||
|
|
||||||
if (isEmpty(value.accountId)) {
|
|
||||||
throw new Error('修改不能没有账号实例ID')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isEmpty(value.channelId) || isEmpty(value.guildId) || isEmpty(value.userToken)) {
|
|
||||||
throw new Error('必填字段服务器ID,频道ID,用户token不能为空')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value.coreSize == null || value.queueSize == null || value.timeoutMinutes == null) {
|
|
||||||
throw new Error('必填字段核心线程数,队列大小,超时时间不能为空')
|
|
||||||
}
|
|
||||||
if (!value.userAgent) {
|
|
||||||
value.userAgent =
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 开始调用更新重连任务
|
|
||||||
let updateUrl = define.remotemj_api + `mj/account/${value.accountId}/update-reconnect`
|
|
||||||
|
|
||||||
// 开始修改
|
|
||||||
let remoteData = {
|
|
||||||
channelId: value.channelId,
|
|
||||||
coreSize: value.coreSize,
|
|
||||||
enable: value.enable,
|
|
||||||
guildId: value.guildId,
|
|
||||||
id: value.accountId,
|
|
||||||
mjBotChannelId: value.mjBotChannelId ? value.mjBotChannelId : '',
|
|
||||||
nijiBotChannelId: value.nijiBotChannelId ? value.nijiBotChannelId : '',
|
|
||||||
queueSize: value.queueSize,
|
|
||||||
remark: global.machineId,
|
|
||||||
remixAutoSubmit: false,
|
|
||||||
timeoutMinutes: value.timeoutMinutes ? value.timeoutMinutes : 10,
|
|
||||||
userAgent: value.userAgent,
|
|
||||||
userToken: value.userToken,
|
|
||||||
weight: 1
|
|
||||||
}
|
|
||||||
|
|
||||||
let accountRes = await axios.put(updateUrl, remoteData, {
|
|
||||||
headers: {
|
|
||||||
'mj-api-secret': define.API
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
if (accountRes.data.code != 1) {
|
|
||||||
throw new Error(accountRes.description)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新成功,修改数据
|
|
||||||
remoteData.accountId = value.accountId
|
|
||||||
remoteData.id = value.id
|
|
||||||
|
|
||||||
// 同步成功,修改数据
|
|
||||||
let _mjSettingService = await MJSettingService.getInstance()
|
|
||||||
let save_res = _mjSettingService.UpdateRemoteMjSetting(remoteData)
|
|
||||||
|
|
||||||
if (save_res.code == 0) {
|
|
||||||
throw new Error(save_res.message)
|
|
||||||
}
|
|
||||||
|
|
||||||
return successMessage(remoteData, 'MJ账号修改并同步成功', 'MJSetting_UpdateRemoteMJSetting')
|
|
||||||
} catch (error) {
|
|
||||||
return errorMessage(
|
|
||||||
'修改MJ的账号信息错误,详细错误信息如下:' + error.toString(),
|
|
||||||
'MJSetting_UpdateRemoteMJSetting'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除指定的MJ账号
|
|
||||||
* @param {*} id 数据库中存放的ID
|
|
||||||
*/
|
|
||||||
async DeleteRemoteMJSetting(id, isRemote) {
|
|
||||||
try {
|
|
||||||
// 先检查必填字段
|
|
||||||
if (isEmpty(id)) {
|
|
||||||
throw new Error('无法删除没有ID的数据')
|
|
||||||
}
|
|
||||||
// 先获取数据
|
|
||||||
let _mjSetting = await MJSettingService.getInstance()
|
|
||||||
let deleteConfig = _mjSetting.GetRemoteMJSettings({ id: id })
|
|
||||||
if (deleteConfig.data.length <= 0) {
|
|
||||||
throw new Error('没有要删除的数据')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isRemote) {
|
|
||||||
// 开始删除
|
|
||||||
let deleteData = deleteConfig.data[0]
|
|
||||||
let deleteUrl = define.remotemj_api + `mj/account/${deleteData.accountId}/delete`
|
|
||||||
let accountRes = await axios.delete(deleteUrl, {
|
|
||||||
headers: {
|
|
||||||
'mj-api-secret': define.API
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if (accountRes.data.code != 1) {
|
|
||||||
throw new Error(accountRes.data.description)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除本地数据
|
|
||||||
// 删除成功,修改数据
|
|
||||||
let save_res = _mjSetting.DeleteRemoteMJSetting(id)
|
|
||||||
if (save_res.code == 0) {
|
|
||||||
throw new Error(save_res.message)
|
|
||||||
}
|
|
||||||
return successMessage(null, 'MJ账号删除成功', 'MJSetting_DeleteRemoteMJSetting')
|
|
||||||
} catch (error) {
|
|
||||||
return errorMessage(
|
|
||||||
'删除指定的MJ账号错误,详细错误信息如下:' + error.toString(),
|
|
||||||
'MJSetting_DeleteRemoteMJSetting'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
553
src/main/setting/mjSetting.ts
Normal file
553
src/main/setting/mjSetting.ts
Normal file
@ -0,0 +1,553 @@
|
|||||||
|
import axios from 'axios'
|
||||||
|
import { MJSettingService } from '../../define/db/service/SoftWare/mjSettingService'
|
||||||
|
import { define } from '../../define/define'
|
||||||
|
import { errorMessage, successMessage } from '../Public/generalTools'
|
||||||
|
import { isEmpty } from 'lodash'
|
||||||
|
const { v4: uuidv4 } = require('uuid')
|
||||||
|
import OptionHandle from "@/main/Service/Options/index"
|
||||||
|
import { OptionKeyName } from '@/define/enum/option'
|
||||||
|
import { ValidateJson } from '@/define/Tools/validate'
|
||||||
|
import { MJSettingModel } from '@/model/Setting/mjSetting'
|
||||||
|
|
||||||
|
export class MJSetting {
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步远程代理服务器中的MJ账号信息
|
||||||
|
* @param type 使用的类型
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async GetRemoteMJSettingsFromService(type: string) {
|
||||||
|
try {
|
||||||
|
if (type != 'remote' && type != 'local') {
|
||||||
|
throw new Error('没有指定类型,请检查')
|
||||||
|
}
|
||||||
|
let content = undefined
|
||||||
|
let mjGlobalSetting = await this.GetMJGlobalSetting()
|
||||||
|
if (type == "local") {
|
||||||
|
if (isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl) || isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.port) || isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.token)) {
|
||||||
|
throw new Error('没有配置本地代理模式的基本信息,请检查')
|
||||||
|
}
|
||||||
|
mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl = mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl.endsWith('/') ? mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl.slice(0, -1) : mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl;
|
||||||
|
|
||||||
|
// 调用分页获取所有的账号信息
|
||||||
|
let url = `${mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl}:${mjGlobalSetting.mj_localRemoteSimpleSetting.port}/mj/admin/accounts`;
|
||||||
|
let res = await axios.post(url, {
|
||||||
|
pagination: {
|
||||||
|
current: 1,
|
||||||
|
pageSize: 200
|
||||||
|
},
|
||||||
|
sort: {
|
||||||
|
predicate: "",
|
||||||
|
reverse: false
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
current: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
pageNumber: 0
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
headers: {
|
||||||
|
'mj-api-secret': mjGlobalSetting.mj_localRemoteSimpleSetting.token
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log('GetRemoteMJSettingsFromService', res)
|
||||||
|
if (res.status != 200) {
|
||||||
|
throw new Error(res.statusText)
|
||||||
|
}
|
||||||
|
if (!res.data || !res.data.list) {
|
||||||
|
throw new Error('远程服务器返回数据格式错误')
|
||||||
|
}
|
||||||
|
content = res.data.list
|
||||||
|
} else {
|
||||||
|
let url = define.remotemj_api + 'mj/account/query'
|
||||||
|
let res = await axios.post(
|
||||||
|
url,
|
||||||
|
{ remark: global.machineId, current: 1, pageNumber: 0, pageSize: 30 },
|
||||||
|
{ headers: { 'mj-api-secret': define.API } }
|
||||||
|
)
|
||||||
|
|
||||||
|
console.log('GetRemoteMJSettingsFromService', res)
|
||||||
|
if (res.status != 200) {
|
||||||
|
throw new Error(res.statusText)
|
||||||
|
}
|
||||||
|
if (!res.data || !res.data.content) {
|
||||||
|
throw new Error('远程服务器返回数据格式错误')
|
||||||
|
}
|
||||||
|
content = res.data.content
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let remoteMjSetting = await this.GetRemoteMJSettings(type)
|
||||||
|
if (remoteMjSetting.code == 0) {
|
||||||
|
throw new Error(remoteMjSetting.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
let remoteIds = remoteMjSetting.data.map((item) => item.id)
|
||||||
|
for (let i = 0; i < remoteIds.length; i++) {
|
||||||
|
const element = remoteIds[i]
|
||||||
|
let deleteRes = await this.DeleteRemoteMJSetting(element, false)
|
||||||
|
if (deleteRes.code == 0) {
|
||||||
|
throw new Error(deleteRes.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 先将所有的数据删除,再添加
|
||||||
|
for (let i = 0; i < content.length; i++) {
|
||||||
|
const element = content[i]
|
||||||
|
|
||||||
|
let addRes = await this.AddRemoteMJSetting(
|
||||||
|
{
|
||||||
|
channelId: element.channelId,
|
||||||
|
guildId: element.guildId,
|
||||||
|
userToken: element.userToken,
|
||||||
|
coreSize: element.coreSize,
|
||||||
|
queueSize: element.queueSize,
|
||||||
|
timeoutMinutes: element.timeoutMinutes,
|
||||||
|
userAgent: element.userAgent,
|
||||||
|
remark: element.remark,
|
||||||
|
enable: element.enable,
|
||||||
|
remixAutoSubmit: element.remixAutoSubmit,
|
||||||
|
mjBotChannelId: element.mjBotChannelId,
|
||||||
|
nijiBotChannelId: element.nijiBotChannelId,
|
||||||
|
accountId: element.id,
|
||||||
|
blockMessage: element.properties.disabledReason || element.disabledReason
|
||||||
|
},
|
||||||
|
false, type
|
||||||
|
)
|
||||||
|
if (addRes.code == 0) {
|
||||||
|
throw new Error(addRes.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return successMessage(
|
||||||
|
null,
|
||||||
|
'同步远程代理服务器中的MJ账号信息成功',
|
||||||
|
'MJSetting_GetRemoteMJSettingsFromService'
|
||||||
|
)
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(
|
||||||
|
'同步远程代理服务器中的MJ账号信息错误,详细错误信息如下:' + error.toString(),
|
||||||
|
'MJSetting_GetRemoteMJSettingsFromService'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取MJ的基础设置数据
|
||||||
|
* @param mjSettingQuery
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async GetMJSetting(mjSettingQuery) {
|
||||||
|
try {
|
||||||
|
let _mjSetting = await MJSettingService.getInstance()
|
||||||
|
let res = _mjSetting.GetMjSetting()
|
||||||
|
return res
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(
|
||||||
|
'获取MJ的基础配置错误,错误信息如下:' + error.toString(),
|
||||||
|
'MJSetting_GetMJSetting'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取MJ的全局设置数据
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
private async GetMJGlobalSetting(): Promise<MJSettingModel.MJ_GlobalSettingModel> {
|
||||||
|
let mjSettingOption = await OptionHandle.GetOptionByKey(OptionKeyName.MJ_GlobalSetting);
|
||||||
|
if (mjSettingOption.code == 0) {
|
||||||
|
throw new Error(mjSettingOption.message)
|
||||||
|
}
|
||||||
|
if (mjSettingOption.data == null || mjSettingOption.data == undefined) {
|
||||||
|
throw new Error('没有找到MJ的全局设置,请检查')
|
||||||
|
}
|
||||||
|
if (!ValidateJson(mjSettingOption.data.value)) {
|
||||||
|
throw new Error('MJ的全局设置数据格式错误,请检查')
|
||||||
|
}
|
||||||
|
let mjSetting = JSON.parse(mjSettingOption.data.value) as MJSettingModel.MJ_GlobalSettingModel
|
||||||
|
if (!mjSetting) {
|
||||||
|
throw new Error('MJ的全局设置数据格式错误,请检查')
|
||||||
|
}
|
||||||
|
return mjSetting
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取MJ配置的所有数据
|
||||||
|
*/
|
||||||
|
async GetMJSettingTreeData() {
|
||||||
|
try {
|
||||||
|
let _mjSetting = await MJSettingService.getInstance()
|
||||||
|
let res = _mjSetting.GetMJSettingTreeData()
|
||||||
|
return res
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(
|
||||||
|
'获取MJ配置错误,详细错误信息如下:' + error.toString(),
|
||||||
|
'MJSetting_GetMJSettingTreeData'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存MJ设置的所有数据
|
||||||
|
* @param {*} mjSetting
|
||||||
|
*/
|
||||||
|
async SaveMJSettingTreeData(mjSetting) {
|
||||||
|
try {
|
||||||
|
let _mjSetting = await MJSettingService.getInstance()
|
||||||
|
let res = _mjSetting.SaveMJSettingTreeData(mjSetting)
|
||||||
|
return res
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(
|
||||||
|
'保存MJ配置错误,详细错误信息如下:' + error.toString(),
|
||||||
|
'MJSetting_SaveMJSettingTreeData'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有的MJ代理模式账号信息
|
||||||
|
*/
|
||||||
|
async GetRemoteMJSettings(type: string) {
|
||||||
|
try {
|
||||||
|
let _mjSetting = await MJSettingService.getInstance()
|
||||||
|
let res = _mjSetting.GetRemoteMJSettings({
|
||||||
|
type: type
|
||||||
|
})
|
||||||
|
return res
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(
|
||||||
|
'获取MJ代理模式账号信息错误,详细错误信息如下:' + error.toString(),
|
||||||
|
'MJSetting_GetRemoteMJSettings'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建新的代理MJ信息
|
||||||
|
* @param {*} value
|
||||||
|
*/
|
||||||
|
async AddRemoteMJSetting(value, isRemote, type: string) {
|
||||||
|
try {
|
||||||
|
if (type != "remote" && type != 'local') {
|
||||||
|
throw new Error('没有指定类型,请检查')
|
||||||
|
}
|
||||||
|
// 先检查必填字段
|
||||||
|
if (isEmpty(value.channelId) || isEmpty(value.guildId) || isEmpty(value.userToken)) {
|
||||||
|
throw new Error('必填字段服务器ID,频道ID,用户token不能为空')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value.coreSize == null || value.queueSize == null || value.timeoutMinutes == null) {
|
||||||
|
throw new Error('必填字段核心线程数,队列大小,超时时间不能为空')
|
||||||
|
}
|
||||||
|
if (!value.userAgent) {
|
||||||
|
value.userAgent =
|
||||||
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始调用创建任务
|
||||||
|
let createUrl = undefined;
|
||||||
|
let mjGlobalSetting = await this.GetMJGlobalSetting()
|
||||||
|
|
||||||
|
if (type == 'remote') {
|
||||||
|
createUrl = define.remotemj_api + 'mj/account/create'
|
||||||
|
}
|
||||||
|
else if (type == 'local') {
|
||||||
|
let localRemoteBaseUrl = "http://127.0.0.1";
|
||||||
|
if (!isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl)) {
|
||||||
|
localRemoteBaseUrl = mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl
|
||||||
|
}
|
||||||
|
let localRemotePort = "8080";
|
||||||
|
if (!isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.port)) {
|
||||||
|
localRemotePort = mjGlobalSetting.mj_localRemoteSimpleSetting.port
|
||||||
|
}
|
||||||
|
createUrl = `${localRemoteBaseUrl}:${localRemotePort}` + '/mj/admin/account'
|
||||||
|
}
|
||||||
|
|
||||||
|
if (createUrl == null) {
|
||||||
|
throw new Error('没有指定类型,请检查')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 上面是必传的
|
||||||
|
let remoteData = {
|
||||||
|
channelId: value.channelId,
|
||||||
|
guildId: value.guildId,
|
||||||
|
userToken: value.userToken,
|
||||||
|
coreSize: value.coreSize,
|
||||||
|
queueSize: value.queueSize,
|
||||||
|
timeoutMinutes: value.timeoutMinutes,
|
||||||
|
userAgent: value.userAgent
|
||||||
|
? value.userAgent
|
||||||
|
: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
|
||||||
|
remark: global.machineId,
|
||||||
|
remixAutoSubmit: false
|
||||||
|
} as any
|
||||||
|
|
||||||
|
// 额外添加
|
||||||
|
if (value.mjBotChannelId) {
|
||||||
|
remoteData.mjBotChannelId = value.mjBotChannelId
|
||||||
|
}
|
||||||
|
if (value.nijiBotChannelId) {
|
||||||
|
remoteData.nijiBotChannelId = value.nijiBotChannelId
|
||||||
|
}
|
||||||
|
if (value.accountId) {
|
||||||
|
remoteData.accountId = value.accountId
|
||||||
|
}
|
||||||
|
if (!isEmpty(value.blockMessage)) {
|
||||||
|
remoteData.blockMessage = value.blockMessage
|
||||||
|
}
|
||||||
|
if (value.hasOwnProperty('enable')) {
|
||||||
|
remoteData.enable = value.enable
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRemote) {
|
||||||
|
// 添加账号
|
||||||
|
let token = define.API;
|
||||||
|
if (type == 'local') {
|
||||||
|
token = mjGlobalSetting.mj_localRemoteSimpleSetting.token
|
||||||
|
}
|
||||||
|
let accountRes = await axios.post(createUrl, remoteData, {
|
||||||
|
headers: {
|
||||||
|
'mj-api-secret': token
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log(accountRes)
|
||||||
|
|
||||||
|
if (type == 'local' && !accountRes.data.success) {
|
||||||
|
throw new Error(accountRes.data.message)
|
||||||
|
}
|
||||||
|
if (type == 'remote' && accountRes.data.code != 1) {
|
||||||
|
throw new Error(accountRes.data.description)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加成功,修改数据,将数据返回 (服务器添加成功,开始在本地数据库添加)s
|
||||||
|
let accountId = accountRes.data.result
|
||||||
|
remoteData.accountId = accountId
|
||||||
|
|
||||||
|
// 这边将数据记录到本地数据库中
|
||||||
|
if (type == 'local') {
|
||||||
|
try {
|
||||||
|
var data = JSON.stringify({
|
||||||
|
type: 0,
|
||||||
|
dataString: JSON.stringify(remoteData)
|
||||||
|
});
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
method: 'post',
|
||||||
|
url: define.lms + '/lms/Other/AddDataInfo',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: data
|
||||||
|
};
|
||||||
|
await axios(config);
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
// 忽略错误
|
||||||
|
// console.error('Error:', error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
remoteData.remixAutoSubmit = false
|
||||||
|
remoteData.type = type
|
||||||
|
|
||||||
|
let _mjSettingService = await MJSettingService.getInstance()
|
||||||
|
|
||||||
|
let save_res = _mjSettingService.AddRemoteMjSetting(remoteData)
|
||||||
|
if (save_res.code != 1) {
|
||||||
|
throw new Error(save_res.message)
|
||||||
|
}
|
||||||
|
return successMessage(remoteData, 'MJ账号同步成功', 'MJSetting_AddRemoteMJSetting')
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(
|
||||||
|
'创建新的代理MJ信息错误,详细错误信息如下:' + error.toString(),
|
||||||
|
'MJSetting_AddRemoteMJSetting'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改MJ的账号信息,并重连
|
||||||
|
* @param {*} value
|
||||||
|
*/
|
||||||
|
async UpdateRemoteMJSetting(value, type: string) {
|
||||||
|
try {
|
||||||
|
if (type != "remote" && type != 'local') {
|
||||||
|
throw new Error('没有指定类型,请检查')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEmpty(value.accountId)) {
|
||||||
|
throw new Error('修改不能没有账号实例ID')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEmpty(value.channelId) || isEmpty(value.guildId) || isEmpty(value.userToken)) {
|
||||||
|
throw new Error('必填字段服务器ID,频道ID,用户token不能为空')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value.coreSize == null || value.queueSize == null || value.timeoutMinutes == null) {
|
||||||
|
throw new Error('必填字段核心线程数,队列大小,超时时间不能为空')
|
||||||
|
}
|
||||||
|
if (!value.userAgent) {
|
||||||
|
value.userAgent =
|
||||||
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始调用更新重连任务
|
||||||
|
let updateUrl = undefined;
|
||||||
|
let mjGlobalSetting = await this.GetMJGlobalSetting()
|
||||||
|
if (type == 'remote') {
|
||||||
|
updateUrl = define.remotemj_api + `mj/account/${value.accountId}/update-reconnect`
|
||||||
|
} else if (type == 'local') {
|
||||||
|
if (isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl) || isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.port) || isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.token)) {
|
||||||
|
throw new Error('没有配置本地代理模式的基本信息,请检查')
|
||||||
|
}
|
||||||
|
let localRemoteBaseUrl = mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl.endsWith('/') ? mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl.slice(0, -1) : mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl;
|
||||||
|
let localRemotePort = mjGlobalSetting.mj_localRemoteSimpleSetting.port;
|
||||||
|
updateUrl = `${localRemoteBaseUrl}:${localRemotePort}/mj/admin/account-reconnect/${value.accountId}`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateUrl == null) {
|
||||||
|
throw new Error('没有指定类型,请检查')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始修改
|
||||||
|
let remoteData = {
|
||||||
|
channelId: value.channelId,
|
||||||
|
coreSize: value.coreSize,
|
||||||
|
enable: value.enable,
|
||||||
|
guildId: value.guildId,
|
||||||
|
id: value.accountId,
|
||||||
|
mjBotChannelId: value.mjBotChannelId ? value.mjBotChannelId : '',
|
||||||
|
nijiBotChannelId: value.nijiBotChannelId ? value.nijiBotChannelId : '',
|
||||||
|
queueSize: value.queueSize,
|
||||||
|
remark: global.machineId,
|
||||||
|
remixAutoSubmit: false,
|
||||||
|
timeoutMinutes: value.timeoutMinutes ? value.timeoutMinutes : 10,
|
||||||
|
userAgent: value.userAgent,
|
||||||
|
userToken: value.userToken,
|
||||||
|
weight: 1
|
||||||
|
} as any
|
||||||
|
|
||||||
|
let token = define.API;
|
||||||
|
if (type == 'local') {
|
||||||
|
token = mjGlobalSetting.mj_localRemoteSimpleSetting.token
|
||||||
|
remoteData.enableMj = true;
|
||||||
|
remoteData.enableNiji = true;
|
||||||
|
}
|
||||||
|
let accountRes = await axios.put(updateUrl, remoteData, {
|
||||||
|
headers: {
|
||||||
|
'mj-api-secret': token
|
||||||
|
}
|
||||||
|
}) as any
|
||||||
|
|
||||||
|
if (type == 'local' && !accountRes.data.success) {
|
||||||
|
throw new Error(accountRes.data.message)
|
||||||
|
}
|
||||||
|
if (type == 'remote' && accountRes.data.code != 1) {
|
||||||
|
throw new Error(accountRes.data.description)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新成功,修改数据
|
||||||
|
remoteData.accountId = value.accountId
|
||||||
|
remoteData.id = value.id
|
||||||
|
remoteData.type = type
|
||||||
|
|
||||||
|
// 同步成功,修改数据
|
||||||
|
let _mjSettingService = await MJSettingService.getInstance()
|
||||||
|
let save_res = _mjSettingService.UpdateRemoteMjSetting(remoteData)
|
||||||
|
|
||||||
|
if (save_res.code == 0) {
|
||||||
|
throw new Error(save_res.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
return successMessage(remoteData, 'MJ账号修改并同步成功', 'MJSetting_UpdateRemoteMJSetting')
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(
|
||||||
|
'修改MJ的账号信息错误,详细错误信息如下:' + error.toString(),
|
||||||
|
'MJSetting_UpdateRemoteMJSetting'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除指定的MJ账号
|
||||||
|
* @param {*} id 数据库中存放的ID
|
||||||
|
*/
|
||||||
|
async DeleteRemoteMJSetting(id, isRemote) {
|
||||||
|
try {
|
||||||
|
// 先检查必填字段
|
||||||
|
if (isEmpty(id)) {
|
||||||
|
throw new Error('无法删除没有ID的数据')
|
||||||
|
}
|
||||||
|
// 先获取数据
|
||||||
|
let _mjSetting = await MJSettingService.getInstance()
|
||||||
|
let deleteConfig = _mjSetting.GetRemoteMJSettings({ id: id })
|
||||||
|
if (deleteConfig.data.length <= 0) {
|
||||||
|
throw new Error('没有要删除的数据')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRemote) {
|
||||||
|
// 开始删除
|
||||||
|
let deleteData = deleteConfig.data[0]
|
||||||
|
let type = deleteData.type;
|
||||||
|
if (type != 'remote' && type != 'local') {
|
||||||
|
throw new Error('没有指定类型,请检查')
|
||||||
|
}
|
||||||
|
// 删除远程的账号
|
||||||
|
if (type == 'local') {
|
||||||
|
let mjGlobalSetting = await this.GetMJGlobalSetting()
|
||||||
|
if (isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl) || isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.port) || isEmpty(mjGlobalSetting.mj_localRemoteSimpleSetting.token)) {
|
||||||
|
throw new Error('没有配置本地代理模式的基本信息,请检查')
|
||||||
|
}
|
||||||
|
let localRemoteBaseUrl = mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl.endsWith('/') ? mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl.slice(0, -1) : mjGlobalSetting.mj_localRemoteSimpleSetting.baseUrl;
|
||||||
|
let localRemotePort = mjGlobalSetting.mj_localRemoteSimpleSetting.port;
|
||||||
|
let deleteUrl = `${localRemoteBaseUrl}:${localRemotePort}/mj/admin/account/${deleteData.accountId}`
|
||||||
|
|
||||||
|
let accountRes = await axios.delete(deleteUrl, {
|
||||||
|
headers: {
|
||||||
|
'mj-api-secret': mjGlobalSetting.mj_localRemoteSimpleSetting.token
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (accountRes.status != 200) {
|
||||||
|
throw new Error(accountRes.data.message)
|
||||||
|
}
|
||||||
|
if (accountRes.data.success == false) {
|
||||||
|
throw new Error(accountRes.data.message)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// remote
|
||||||
|
let deleteUrl = define.remotemj_api + `mj/account/${deleteData.accountId}/delete`
|
||||||
|
let accountRes = await axios.delete(deleteUrl, {
|
||||||
|
headers: {
|
||||||
|
'mj-api-secret': define.API
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (accountRes.data.code != 1) {
|
||||||
|
throw new Error(accountRes.data.description)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除本地数据
|
||||||
|
// 删除成功,修改数据
|
||||||
|
let save_res = _mjSetting.DeleteRemoteMJSetting(id)
|
||||||
|
if (save_res.code == 0) {
|
||||||
|
throw new Error(save_res.message)
|
||||||
|
}
|
||||||
|
return successMessage(null, 'MJ账号删除成功', 'MJSetting_DeleteRemoteMJSetting')
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(
|
||||||
|
'删除指定的MJ账号错误,详细错误信息如下:' + error.toString(),
|
||||||
|
'MJSetting_DeleteRemoteMJSetting'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
src/model/Setting/mjSetting.d.ts
vendored
10
src/model/Setting/mjSetting.d.ts
vendored
@ -98,6 +98,15 @@ declare namespace MJSettingModel {
|
|||||||
useTransfer: boolean // 是否国内转发
|
useTransfer: boolean // 是否国内转发
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MJ本地代理模式配置数据模型
|
||||||
|
*/
|
||||||
|
type MJLocalRemoteSimpleSettingModel = {
|
||||||
|
baseUrl: string
|
||||||
|
port: string
|
||||||
|
token: string
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MJ 全局设置
|
* MJ 全局设置
|
||||||
*/
|
*/
|
||||||
@ -106,5 +115,6 @@ declare namespace MJSettingModel {
|
|||||||
mj_apiSetting: MJAPISettingModel
|
mj_apiSetting: MJAPISettingModel
|
||||||
mj_browserSetting: BrowserMJSettingModel
|
mj_browserSetting: BrowserMJSettingModel
|
||||||
mj_remoteSimpleSetting: MJRemoteSimpleSettingModel
|
mj_remoteSimpleSetting: MJRemoteSimpleSettingModel
|
||||||
|
mj_localRemoteSimpleSetting: MJLocalRemoteSimpleSettingModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,6 +25,7 @@ const mj = {
|
|||||||
// 将翻译任务添加到后台队列中
|
// 将翻译任务添加到后台队列中
|
||||||
TranslateReturnNowTask: async (value, callback) =>
|
TranslateReturnNowTask: async (value, callback) =>
|
||||||
callback(await ipcRenderer.invoke(DEFINE_STRING.MJ.TRANSLATE_RETURN_NOW_TASK, value)),
|
callback(await ipcRenderer.invoke(DEFINE_STRING.MJ.TRANSLATE_RETURN_NOW_TASK, value)),
|
||||||
|
|
||||||
// MJ原创生图
|
// MJ原创生图
|
||||||
OriginalMJImageGenerate: async (value, callback) =>
|
OriginalMJImageGenerate: async (value, callback) =>
|
||||||
callback(await ipcRenderer.invoke(DEFINE_STRING.MJ.ORIGINAL_MJ_IMAGE_GENERATE, value)),
|
callback(await ipcRenderer.invoke(DEFINE_STRING.MJ.ORIGINAL_MJ_IMAGE_GENERATE, value)),
|
||||||
|
|||||||
@ -33,10 +33,6 @@ const setting = {
|
|||||||
GetMjSetting: async (value = null) =>
|
GetMjSetting: async (value = null) =>
|
||||||
await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_MJ_SETTING, value),
|
await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_MJ_SETTING, value),
|
||||||
|
|
||||||
// 保存MJ的基础设置
|
|
||||||
UpdateMJSetting: async (value) =>
|
|
||||||
await ipcRenderer.invoke(DEFINE_STRING.SETTING.UPDATE_MJ_SETTING, value),
|
|
||||||
|
|
||||||
// 获取MJ的所有设置
|
// 获取MJ的所有设置
|
||||||
GetMJSettingTreeData: async () =>
|
GetMJSettingTreeData: async () =>
|
||||||
await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_MJ_SETTING_TREE_DATA),
|
await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_MJ_SETTING_TREE_DATA),
|
||||||
@ -46,23 +42,23 @@ const setting = {
|
|||||||
await ipcRenderer.invoke(DEFINE_STRING.SETTING.SAVE_MJ_SETTING_TREE_DATA, value),
|
await ipcRenderer.invoke(DEFINE_STRING.SETTING.SAVE_MJ_SETTING_TREE_DATA, value),
|
||||||
|
|
||||||
// 获取所有的代理MJ的账号
|
// 获取所有的代理MJ的账号
|
||||||
GetRemoteMJSettings: async () =>
|
GetRemoteMJSettings: async (type: string) =>
|
||||||
await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_REMOTE_MJ_SETTINGS),
|
await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_REMOTE_MJ_SETTINGS, type),
|
||||||
|
|
||||||
// 添加代理模式的MJ账号
|
// 添加代理模式的MJ账号
|
||||||
AddRemoteMJSetting: async (value, isRemote) =>
|
AddRemoteMJSetting: async (value, type) =>
|
||||||
await ipcRenderer.invoke(DEFINE_STRING.SETTING.ADD_REMOTE_MJ_SETTING, value, isRemote),
|
await ipcRenderer.invoke(DEFINE_STRING.SETTING.ADD_REMOTE_MJ_SETTING, value, type),
|
||||||
|
|
||||||
// 修改并重连MJ的账号
|
// 修改并重连MJ的账号
|
||||||
UpdateRemoteMJSetting: async (value) =>
|
UpdateRemoteMJSetting: async (value, type: string) =>
|
||||||
await ipcRenderer.invoke(DEFINE_STRING.SETTING.UPDATE_REMOTE_MJ_SETTING, value),
|
await ipcRenderer.invoke(DEFINE_STRING.SETTING.UPDATE_REMOTE_MJ_SETTING, value, type),
|
||||||
|
|
||||||
// 删除指定的MJ账号
|
// 删除指定的MJ账号
|
||||||
DeleteRemoteMJSetting: async (value: string, isRemote: boolean) =>
|
DeleteRemoteMJSetting: async (value: string, isRemote: boolean) =>
|
||||||
await ipcRenderer.invoke(DEFINE_STRING.SETTING.DELETE_REMOTE_MJ_SETTING, value, isRemote),
|
await ipcRenderer.invoke(DEFINE_STRING.SETTING.DELETE_REMOTE_MJ_SETTING, value, isRemote),
|
||||||
|
|
||||||
/** 同步代理服务器的账号信息 */
|
/** 同步代理服务器的账号信息 */
|
||||||
GetRemoteMJSettingsFromService: async () => await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_REMOTE_MJ_SETTINGS_FROM_SERVICE),
|
GetRemoteMJSettingsFromService: async (type: string) => await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_REMOTE_MJ_SETTINGS_FROM_SERVICE, type),
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
|||||||
79
src/renderer/src/assets/css/note.less
Normal file
79
src/renderer/src/assets/css/note.less
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
.custom-collapse {
|
||||||
|
margin-top: 16px;
|
||||||
|
border-radius: 6px;
|
||||||
|
background-color: rgba(255, 247, 231, 0.6);
|
||||||
|
border: 1px solid #ffe7a3;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #b88230;
|
||||||
|
padding: 8px 0;
|
||||||
|
/* 增加上下内边距,使折叠状态下的高度更高 */
|
||||||
|
font-size: 16px;
|
||||||
|
/* 增加字体大小 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-header .warning-icon {
|
||||||
|
margin-right: 8px;
|
||||||
|
color: #e6a23c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 为Naive UI的折叠面板标题添加额外的样式 */
|
||||||
|
:deep(.n-collapse-item__header) {
|
||||||
|
padding: 12px 20px !important;
|
||||||
|
/* 覆盖原有内边距 */
|
||||||
|
height: auto !important;
|
||||||
|
/* 允许高度自适应内容 */
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.n-collapse-item__header-main) {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-section {
|
||||||
|
margin-top: 16px;
|
||||||
|
padding: 12px;
|
||||||
|
border-radius: 6px;
|
||||||
|
background-color: rgba(255, 247, 231, 0.6);
|
||||||
|
border: 1px solid #ffe7a3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
color: #b88230;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-icon {
|
||||||
|
margin-right: 6px;
|
||||||
|
color: #e6a23c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-content {
|
||||||
|
padding-left: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-content p {
|
||||||
|
margin: 4px 0;
|
||||||
|
color: #5c3c10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clickable-link {
|
||||||
|
color: #0077ff;
|
||||||
|
text-decoration: underline;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clickable-link:hover {
|
||||||
|
color: #0055cc;
|
||||||
|
}
|
||||||
140
src/renderer/src/components/Common/NotesCollapse.vue
Normal file
140
src/renderer/src/components/Common/NotesCollapse.vue
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<!-- filepath: src\renderer\src\components\Common\NotesCollapse.vue -->
|
||||||
|
<template>
|
||||||
|
<n-collapse class="custom-collapse">
|
||||||
|
<n-collapse-item :name="name" :title="title">
|
||||||
|
<template #header>
|
||||||
|
<div class="collapse-header">
|
||||||
|
<n-icon size="20" class="warning-icon">
|
||||||
|
<svg v-if="iconType === 'warning'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path fill="currentColor" d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z" />
|
||||||
|
</svg>
|
||||||
|
<svg v-else-if="iconType === 'info'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path fill="currentColor" d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z" />
|
||||||
|
</svg>
|
||||||
|
<slot v-else name="icon"></slot>
|
||||||
|
</n-icon>
|
||||||
|
<span style="font-size: 16px">{{ title }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<div class="notes-content">
|
||||||
|
<!-- 如果传入内容数组,自动生成段落 -->
|
||||||
|
<template v-if="items && items.length">
|
||||||
|
<p v-for="(item, index) in items" :key="index" v-html="item"></p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 默认插槽用于完全自定义内容 -->
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
</n-collapse-item>
|
||||||
|
</n-collapse>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { NCollapse, NCollapseItem, NIcon } from 'naive-ui'
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
// 折叠面板名称
|
||||||
|
name: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: '1'
|
||||||
|
},
|
||||||
|
// 标题
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '注意事项'
|
||||||
|
},
|
||||||
|
// 图标类型: 'warning', 'info' 或自定义
|
||||||
|
iconType: {
|
||||||
|
type: String,
|
||||||
|
default: 'warning'
|
||||||
|
},
|
||||||
|
// 内容项数组,每项会渲染为一个段落
|
||||||
|
items: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.custom-collapse {
|
||||||
|
margin-top: 16px;
|
||||||
|
border-radius: 6px;
|
||||||
|
background-color: rgba(255, 247, 231, 0.6);
|
||||||
|
border: 1px solid #ffe7a3;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #b88230;
|
||||||
|
padding: 8px 0;
|
||||||
|
/* 增加上下内边距,使折叠状态下的高度更高 */
|
||||||
|
font-size: 16px;
|
||||||
|
/* 增加字体大小 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-header .warning-icon {
|
||||||
|
margin-right: 8px;
|
||||||
|
color: #e6a23c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 为Naive UI的折叠面板标题添加额外的样式 */
|
||||||
|
:deep(.n-collapse-item__header) {
|
||||||
|
padding: 12px 20px !important;
|
||||||
|
/* 覆盖原有内边距 */
|
||||||
|
height: auto !important;
|
||||||
|
/* 允许高度自适应内容 */
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.n-collapse-item__header-main) {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-section {
|
||||||
|
margin-top: 16px;
|
||||||
|
padding: 12px;
|
||||||
|
border-radius: 6px;
|
||||||
|
background-color: rgba(255, 247, 231, 0.6);
|
||||||
|
border: 1px solid #ffe7a3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
color: #b88230;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-icon {
|
||||||
|
margin-right: 6px;
|
||||||
|
color: #e6a23c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-content {
|
||||||
|
padding-left: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-content p {
|
||||||
|
margin: 4px 0;
|
||||||
|
color: #5c3c10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clickable-link {
|
||||||
|
color: #0077ff;
|
||||||
|
text-decoration: underline;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clickable-link:hover {
|
||||||
|
color: #0055cc;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -3,7 +3,7 @@
|
|||||||
<div id="AddMultiRemoteMj" style="overflow-y: auto">
|
<div id="AddMultiRemoteMj" style="overflow-y: auto">
|
||||||
<div style="margin-bottom: 5px">
|
<div style="margin-bottom: 5px">
|
||||||
<n-button type="info" @click="ManageAccount(null)">新增账号</n-button>
|
<n-button type="info" @click="ManageAccount(null)">新增账号</n-button>
|
||||||
<n-button type="info" style="margin-left: 10px" @click="GetRemoteMJSettingsFromService()"
|
<n-button type="info" style="margin-left: 10px" @click="GetRemoteMJSettingsFromService"
|
||||||
>同步服务器帐号信息</n-button
|
>同步服务器帐号信息</n-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@ -25,8 +25,13 @@ let props = defineProps({
|
|||||||
height: {
|
height: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 500
|
default: 500
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: 'remote'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
let message = useMessage()
|
let message = useMessage()
|
||||||
let dialog = useDialog()
|
let dialog = useDialog()
|
||||||
let maxHeight = ref(props.height - 150)
|
let maxHeight = ref(props.height - 150)
|
||||||
@ -37,7 +42,7 @@ let spinning = ref(false)
|
|||||||
async function GetRemoteMJSettingsFromService() {
|
async function GetRemoteMJSettingsFromService() {
|
||||||
spinning.value = true
|
spinning.value = true
|
||||||
try {
|
try {
|
||||||
let remoteMjSettingRes = await window.setting.GetRemoteMJSettingsFromService()
|
let remoteMjSettingRes = await window.setting.GetRemoteMJSettingsFromService(props.type)
|
||||||
if (remoteMjSettingRes.code == 0) {
|
if (remoteMjSettingRes.code == 0) {
|
||||||
message.error('获取代理MJ配置失败')
|
message.error('获取代理MJ配置失败')
|
||||||
return
|
return
|
||||||
@ -45,7 +50,7 @@ async function GetRemoteMJSettingsFromService() {
|
|||||||
message.success('同步服务器帐号信息成功')
|
message.success('同步服务器帐号信息成功')
|
||||||
|
|
||||||
// 关闭的时候,刷新数据
|
// 关闭的时候,刷新数据
|
||||||
let res = await window.setting.GetRemoteMJSettings()
|
let res = await window.setting.GetRemoteMJSettings(props.type)
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
message.error('获取代理MJ配置失败')
|
message.error('获取代理MJ配置失败')
|
||||||
} else {
|
} else {
|
||||||
@ -146,7 +151,7 @@ onMounted(async () => {
|
|||||||
|
|
||||||
spinning.value = true
|
spinning.value = true
|
||||||
try {
|
try {
|
||||||
let res = await window.setting.GetRemoteMJSettings()
|
let res = await window.setting.GetRemoteMJSettings(props.type)
|
||||||
console.log(res)
|
console.log(res)
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
message.error('获取代理MJ配置失败')
|
message.error('获取代理MJ配置失败')
|
||||||
@ -176,12 +181,12 @@ async function ManageAccount(remote = null) {
|
|||||||
dialog.create({
|
dialog.create({
|
||||||
showIcon: false,
|
showIcon: false,
|
||||||
title: '添加MJ账号',
|
title: '添加MJ账号',
|
||||||
content: () => h(ManageRemoteMjAccount, {}),
|
content: () => h(ManageRemoteMjAccount, { type: props.type }),
|
||||||
style: `min-width : 600px; width : ${dW}px; height : ${dH}px; padding-right : 5px;`,
|
style: `min-width : 600px; width : ${dW}px; height : ${dH}px; padding-right : 5px;`,
|
||||||
maskClosable: false,
|
maskClosable: false,
|
||||||
onClose: async () => {
|
onClose: async () => {
|
||||||
// 关闭的时候,刷新数据
|
// 关闭的时候,刷新数据
|
||||||
let remoteMjSettingRes = await window.setting.GetRemoteMJSettings()
|
let remoteMjSettingRes = await window.setting.GetRemoteMJSettings(props.type)
|
||||||
if (remoteMjSettingRes.code == 0) {
|
if (remoteMjSettingRes.code == 0) {
|
||||||
message.error('获取代理MJ配置失败')
|
message.error('获取代理MJ配置失败')
|
||||||
} else {
|
} else {
|
||||||
@ -216,7 +221,7 @@ async function DeleteAccount(row, isRemote) {
|
|||||||
}
|
}
|
||||||
message.success('删除账号成功')
|
message.success('删除账号成功')
|
||||||
// 这边刷新一下数据
|
// 这边刷新一下数据
|
||||||
let remoteMjSettingRes = await window.setting.GetRemoteMJSettings()
|
let remoteMjSettingRes = await window.setting.GetRemoteMJSettings(props.type)
|
||||||
if (remoteMjSettingRes.code == 0) {
|
if (remoteMjSettingRes.code == 0) {
|
||||||
message.error('获取代理MJ配置失败')
|
message.error('获取代理MJ配置失败')
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -102,42 +102,37 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script setup>
|
||||||
import { ref, onMounted, defineComponent, onUnmounted, toRaw, watch } from 'vue'
|
import { ref, onMounted, defineComponent, onUnmounted, toRaw, watch } from 'vue'
|
||||||
import { useMessage, NForm, NFormItem, NInput, NInputNumber, NButton, NSwitch } from 'naive-ui'
|
import { useMessage, NForm, NFormItem, NInput, NInputNumber, NButton, NSwitch } from 'naive-ui'
|
||||||
import { useSettingStore } from '../../../../../stores/setting'
|
import { useSettingStore } from '../../../../../stores/setting'
|
||||||
|
|
||||||
export default defineComponent({
|
let message = useMessage()
|
||||||
components: {
|
|
||||||
NForm,
|
|
||||||
NFormItem,
|
|
||||||
NInput,
|
|
||||||
NInputNumber,
|
|
||||||
NButton,
|
|
||||||
NSwitch
|
|
||||||
},
|
|
||||||
setup() {
|
|
||||||
let message = useMessage()
|
|
||||||
|
|
||||||
let settingStore = useSettingStore()
|
let settingStore = useSettingStore()
|
||||||
let addRef = ref(null)
|
let addRef = ref(null)
|
||||||
let loading = ref(false)
|
let loading = ref(false)
|
||||||
|
|
||||||
onMounted(async () => {
|
let props = defineProps({
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: 'remote'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
console.log(settingStore)
|
console.log(settingStore)
|
||||||
})
|
})
|
||||||
let rules = {
|
let rules = {
|
||||||
guildId: [{ required: true, message: '请输入服务器ID', trigger: 'blur' }],
|
guildId: [{ required: true, message: '请输入服务器ID', trigger: 'blur' }],
|
||||||
channelId: [{ required: true, message: '请输入频道ID', trigger: 'blur' }],
|
channelId: [{ required: true, message: '请输入频道ID', trigger: 'blur' }],
|
||||||
userToken: [{ required: true, message: '请输入用户token', trigger: 'blur' }]
|
userToken: [{ required: true, message: '请输入用户token', trigger: 'blur' }]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建账号
|
* 创建账号
|
||||||
*/
|
*/
|
||||||
async function CreateAccount(e) {
|
async function CreateAccount(e) {
|
||||||
|
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
addRef.value?.validate(async (errors) => {
|
addRef.value?.validate(async (errors) => {
|
||||||
if (errors) {
|
if (errors) {
|
||||||
@ -149,7 +144,10 @@ export default defineComponent({
|
|||||||
// 判断当前是不是有数据
|
// 判断当前是不是有数据
|
||||||
if (settingStore.actionRemoteMJ.accountId) {
|
if (settingStore.actionRemoteMJ.accountId) {
|
||||||
// 同步并重连
|
// 同步并重连
|
||||||
let res = await window.setting.UpdateRemoteMJSetting(toRaw(settingStore.actionRemoteMJ))
|
let res = await window.setting.UpdateRemoteMJSetting(
|
||||||
|
toRaw(settingStore.actionRemoteMJ),
|
||||||
|
props.type
|
||||||
|
)
|
||||||
loading.value = false
|
loading.value = false
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
message.error('更新账号失败,错误消息如下:' + res.message)
|
message.error('更新账号失败,错误消息如下:' + res.message)
|
||||||
@ -158,7 +156,10 @@ export default defineComponent({
|
|||||||
message.success('更新账号成功')
|
message.success('更新账号成功')
|
||||||
} else {
|
} else {
|
||||||
// 新建,开始保存
|
// 新建,开始保存
|
||||||
let res = await window.setting.AddRemoteMJSetting(toRaw(settingStore.actionRemoteMJ),true)
|
let res = await window.setting.AddRemoteMJSetting(
|
||||||
|
toRaw(settingStore.actionRemoteMJ),
|
||||||
|
props.type
|
||||||
|
)
|
||||||
loading.value = false
|
loading.value = false
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
message.error('创建账号失败,错误消息如下:' + res.message)
|
message.error('创建账号失败,错误消息如下:' + res.message)
|
||||||
@ -168,8 +169,5 @@ export default defineComponent({
|
|||||||
settingStore.ResetActionRemoteMJ()
|
settingStore.ResetActionRemoteMJ()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return { settingStore, rules, CreateAccount, addRef, loading }
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -52,16 +52,49 @@
|
|||||||
</n-form-item>
|
</n-form-item>
|
||||||
</div>
|
</div>
|
||||||
</n-form>
|
</n-form>
|
||||||
|
<NotesCollapse title="注意事项">
|
||||||
|
<p>
|
||||||
|
1. 使用
|
||||||
|
<strong>无需科学上网</strong>,支持香港和美国节点,香港节点对大陆做了优化,延迟
|
||||||
|
<strong>100ms</strong> 以内
|
||||||
|
</p>
|
||||||
|
<p>2. 提供 <strong>快速</strong> 和 <strong>慢速</strong> 两种出图方式,可根据需求选择</p>
|
||||||
|
<p>3. 支持 <strong>20并发请求</strong>,可同时处理多张图片生成任务,大大提高工作效率</p>
|
||||||
|
<p>
|
||||||
|
4. 开启 <strong>"国内转发"</strong> 选项可解决部分地区(如河南、福建等)的网络访问问题
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
5. 确保网络环境稳定,以保证服务正常运行,推荐稳定🪜:
|
||||||
|
<span
|
||||||
|
class="clickable-link"
|
||||||
|
@click="openExternalLink('https://justmysocks.net/members/aff.php?aff=17835')"
|
||||||
|
>
|
||||||
|
Just My Socks网络加速服务
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</NotesCollapse>
|
||||||
</n-card>
|
</n-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { onMounted, ref } from 'vue'
|
import { onMounted, ref } from 'vue'
|
||||||
import { NCard, NForm, NFormItem, NInput, NSelect, NButton, useMessage } from 'naive-ui'
|
import {
|
||||||
|
NCard,
|
||||||
|
NForm,
|
||||||
|
NFormItem,
|
||||||
|
NInput,
|
||||||
|
NSelect,
|
||||||
|
NButton,
|
||||||
|
useMessage,
|
||||||
|
NIcon,
|
||||||
|
NCollapse,
|
||||||
|
NCollapseItem
|
||||||
|
} from 'naive-ui'
|
||||||
import { useOptionStore } from '@/stores/option'
|
import { useOptionStore } from '@/stores/option'
|
||||||
import MJDefine from '@/main/Service/MJ/mjDefine'
|
import MJDefine from '@/main/Service/MJ/mjDefine'
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
|
import NotesCollapse from '../../Common/NotesCollapse.vue'
|
||||||
|
|
||||||
let optionStore = useOptionStore()
|
let optionStore = useOptionStore()
|
||||||
let message = useMessage()
|
let message = useMessage()
|
||||||
@ -92,4 +125,15 @@ async function openGptBuyUrl() {
|
|||||||
window.api.OpenUrl(buy_url)
|
window.api.OpenUrl(buy_url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打开外部链接
|
||||||
|
* @param {string} url - 要打开的URL
|
||||||
|
*/
|
||||||
|
function openExternalLink(url) {
|
||||||
|
window.api.OpenUrl(url)
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
@import '../../../assets//css//note.less';
|
||||||
|
</style>
|
||||||
|
|||||||
@ -0,0 +1,124 @@
|
|||||||
|
<template>
|
||||||
|
<div class="mj-remote-setting">
|
||||||
|
<n-card title="本地代理模式设置-自行部署服务" hoverable style="margin-top: 10px; min-width: 850px">
|
||||||
|
<n-form inline :model="optionStore.MJ_GlobalSetting.mj_localRemoteSimpleSetting">
|
||||||
|
<n-form-item label="服务地址" path="baseUrl">
|
||||||
|
<n-input
|
||||||
|
v-model:value="optionStore.MJ_GlobalSetting.mj_localRemoteSimpleSetting.baseUrl"
|
||||||
|
placeholder="输入服务器地址"
|
||||||
|
style="width: 200px"
|
||||||
|
/>
|
||||||
|
</n-form-item>
|
||||||
|
|
||||||
|
<n-form-item label="端口" path="port">
|
||||||
|
<n-input
|
||||||
|
v-model:value="optionStore.MJ_GlobalSetting.mj_localRemoteSimpleSetting.port"
|
||||||
|
placeholder="输入端口号"
|
||||||
|
style="width: 120px"
|
||||||
|
/>
|
||||||
|
</n-form-item>
|
||||||
|
|
||||||
|
<n-form-item path="token">
|
||||||
|
<template #label>
|
||||||
|
<span style="display: flex; align-items: center">
|
||||||
|
<span>访问令牌</span>
|
||||||
|
<n-tooltip trigger="hover" placement="top">
|
||||||
|
<template #trigger>
|
||||||
|
<n-icon size="18" class="question-icon">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path
|
||||||
|
fill="currentColor"
|
||||||
|
d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10s10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8s8 3.59 8 8s-3.59 8-8 8zm-1-4h2v2h-2zm1.61-9.96c-2.06-.3-3.88.97-4.43 2.79c-.18.58.26 1.17.87 1.17h.2c.41 0 .74-.29.88-.67c.32-.89 1.27-1.5 2.3-1.28c.95.2 1.65 1.13 1.57 2.1c-.1 1.34-1.62 1.63-2.45 2.88c0 .01-.01.01-.01.02c-.01.02-.02.03-.03.05c-.09.15-.18.32-.25.5c-.16.39-.22.82-.22 1.28h2c0-.42.11-.77.28-1.07c.53-.9 1.77-1.41 2.53-2.43c.8-1.05.76-2.46.28-3.55c-.87-1.98-2.9-3.12-4.52-2.79z"
|
||||||
|
></path>
|
||||||
|
</svg>
|
||||||
|
</n-icon>
|
||||||
|
</template>
|
||||||
|
默认值:admin
|
||||||
|
</n-tooltip>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
<n-input
|
||||||
|
v-model:value="optionStore.MJ_GlobalSetting.mj_localRemoteSimpleSetting.token"
|
||||||
|
placeholder="输入访问令牌"
|
||||||
|
style="width: 200px"
|
||||||
|
/>
|
||||||
|
</n-form-item>
|
||||||
|
|
||||||
|
<n-form-item style="margin-left: 20px">
|
||||||
|
<n-button type="info" @click="AddMultiMjAccount">账号管理</n-button>
|
||||||
|
</n-form-item>
|
||||||
|
</n-form>
|
||||||
|
|
||||||
|
<NotesCollapse title="注意事项">
|
||||||
|
<p>
|
||||||
|
1. 本地代理模式支持本地部署和服务器部署,需要自己进行部署,<span
|
||||||
|
class="clickable-link"
|
||||||
|
@click="openExternalLink('https://rvgyir5wk1c.feishu.cn/wiki/N7uuwsO5piB8F6kpvDScUNBGnpd')"
|
||||||
|
>
|
||||||
|
本地代理模式部署教程
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<p>2. 访问令牌默认为 <strong>admin</strong>,如有修改请相应更新</p>
|
||||||
|
<p>3. 通过账号管理功能可添加多个MJ账号,实现任务并行处理,提高效率</p>
|
||||||
|
<p>
|
||||||
|
4. 确保网络环境稳定,以保证服务正常运行,推荐稳定🪜:
|
||||||
|
<span
|
||||||
|
class="clickable-link"
|
||||||
|
@click="openExternalLink('https://justmysocks.net/members/aff.php?aff=17835')"
|
||||||
|
>
|
||||||
|
Just My Socks网络加速服务
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</NotesCollapse>
|
||||||
|
</n-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, h } from 'vue'
|
||||||
|
import {
|
||||||
|
NCard,
|
||||||
|
NButton,
|
||||||
|
useDialog,
|
||||||
|
NForm,
|
||||||
|
NFormItem,
|
||||||
|
NInput,
|
||||||
|
useMessage,
|
||||||
|
NTooltip,
|
||||||
|
NIcon
|
||||||
|
} from 'naive-ui'
|
||||||
|
import AddMultiRemoteMj from '../Components/AddMultiRemoteMj.vue'
|
||||||
|
import { useOptionStore } from '@/stores/option'
|
||||||
|
import NotesCollapse from '../../Common/NotesCollapse.vue'
|
||||||
|
|
||||||
|
const optionStore = useOptionStore()
|
||||||
|
const dialog = useDialog()
|
||||||
|
const message = useMessage()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加多个账号,这样可以同时跑多个账号
|
||||||
|
*/
|
||||||
|
async function AddMultiMjAccount() {
|
||||||
|
let dW = window.innerWidth * 0.9
|
||||||
|
let dH = window.innerHeight * 0.9
|
||||||
|
dialog.create({
|
||||||
|
showIcon: false,
|
||||||
|
title: '管理代理模式MJ账号',
|
||||||
|
content: () => h(AddMultiRemoteMj, { height: dH, type: 'local' }),
|
||||||
|
style: `min-width : 600px; width : ${dW}px; height : ${dH}px; padding-right : 5px;`,
|
||||||
|
maskClosable: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打开外部链接
|
||||||
|
* @param {string} url - 要打开的URL
|
||||||
|
*/
|
||||||
|
function openExternalLink(url) {
|
||||||
|
window.api.OpenUrl(url)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
@import '../../../assets//css//note.less';
|
||||||
|
</style>
|
||||||
@ -17,19 +17,36 @@
|
|||||||
<n-button type="info" @click="AddMultiMjAccount">账号管理</n-button>
|
<n-button type="info" @click="AddMultiMjAccount">账号管理</n-button>
|
||||||
</n-form-item>
|
</n-form-item>
|
||||||
</n-form>
|
</n-form>
|
||||||
|
<NotesCollapse title="注意事项">
|
||||||
|
<p>1. 日常使用无需开启梯子,仅添加账号时需要网络代理</p>
|
||||||
|
<p>2. 通过账号管理功能可添加多个MJ账号,实现任务并行处理,提高效率</p>
|
||||||
|
<p>
|
||||||
|
3. 开启 <strong>"国内转发"</strong> 选项可解决部分地区(如河南、福建等)的网络访问问题
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
4. 确保网络环境稳定,以保证服务正常运行,推荐稳定🪜:
|
||||||
|
<span
|
||||||
|
class="clickable-link"
|
||||||
|
@click="openExternalLink('https://justmysocks.net/members/aff.php?aff=17835')"
|
||||||
|
>
|
||||||
|
Just My Socks网络加速服务
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</NotesCollapse>
|
||||||
</n-card>
|
</n-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, h } from 'vue'
|
import { ref, h } from 'vue'
|
||||||
import { NCard, NButton, useDialog, NForm, NFormItem, NSelect } from 'naive-ui'
|
import { NCard, NButton, useDialog, NForm, NFormItem, NSelect, useMessage } from 'naive-ui'
|
||||||
import AddMultiRemoteMj from '../Components/AddMultiRemoteMj.vue'
|
import AddMultiRemoteMj from '../Components/AddMultiRemoteMj.vue'
|
||||||
import { useOptionStore } from '@/stores/option'
|
import { useOptionStore } from '@/stores/option'
|
||||||
|
import NotesCollapse from '../../Common/NotesCollapse.vue'
|
||||||
|
|
||||||
let optionStore = useOptionStore()
|
const optionStore = useOptionStore()
|
||||||
|
const dialog = useDialog()
|
||||||
let dialog = useDialog()
|
const message = useMessage()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加多个账号,这样可以同时跑多个账号
|
* 添加多个账号,这样可以同时跑多个账号
|
||||||
@ -40,9 +57,21 @@ async function AddMultiMjAccount() {
|
|||||||
dialog.create({
|
dialog.create({
|
||||||
showIcon: false,
|
showIcon: false,
|
||||||
title: '管理代理模式MJ账号',
|
title: '管理代理模式MJ账号',
|
||||||
content: () => h(AddMultiRemoteMj, { height: dH }),
|
content: () => h(AddMultiRemoteMj, { height: dH, type: 'remote' }),
|
||||||
style: `min-width : 600px; width : ${dW}px; height : ${dH}px; padding-right : 5px;`,
|
style: `min-width : 600px; width : ${dW}px; height : ${dH}px; padding-right : 5px;`,
|
||||||
maskClosable: false
|
maskClosable: false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打开外部链接
|
||||||
|
* @param {string} url - 要打开的URL
|
||||||
|
*/
|
||||||
|
function openExternalLink(url) {
|
||||||
|
window.api.OpenUrl(url)
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
@import '../../../assets//css//note.less';
|
||||||
|
</style>
|
||||||
|
|||||||
@ -3,7 +3,8 @@
|
|||||||
<MJSimpleSetting />
|
<MJSimpleSetting />
|
||||||
<MJAPISetting />
|
<MJAPISetting />
|
||||||
<MJRemoteSetting />
|
<MJRemoteSetting />
|
||||||
<MJBrowserSetting />
|
<!-- <MJBrowserSetting /> -->
|
||||||
|
<MJLocalRemoteSetting />
|
||||||
<n-button type="info" @click="SaveMjSetting" style="margin-top: 10px">保存MJ配置</n-button>
|
<n-button type="info" @click="SaveMjSetting" style="margin-top: 10px">保存MJ配置</n-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -19,6 +20,7 @@ import MJSimpleSetting from './MJSimpleSetting.vue'
|
|||||||
import MJAPISetting from './MJAPISetting.vue'
|
import MJAPISetting from './MJAPISetting.vue'
|
||||||
import MJRemoteSetting from './MJRemoteSetting.vue'
|
import MJRemoteSetting from './MJRemoteSetting.vue'
|
||||||
import MJBrowserSetting from './MJBrowserSetting.vue'
|
import MJBrowserSetting from './MJBrowserSetting.vue'
|
||||||
|
import MJLocalRemoteSetting from './MJLocalRemoteSetting.vue'
|
||||||
import { MJImageType } from '@/define/enum/mjEnum'
|
import { MJImageType } from '@/define/enum/mjEnum'
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
|
|
||||||
@ -64,6 +66,52 @@ async function InitMJSettingData() {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
optionStore.MJ_GlobalSetting = JSON.parse(mjRes.data.value)
|
optionStore.MJ_GlobalSetting = JSON.parse(mjRes.data.value)
|
||||||
|
if (optionStore.MJ_GlobalSetting.mj_apiSetting == null) {
|
||||||
|
optionStore.MJ_GlobalSetting.mj_apiSetting = {
|
||||||
|
apiKey: 'key',
|
||||||
|
id: '6db0d484-2a41-4545-8b26-ed32812965ad',
|
||||||
|
mjApiUrl: '2b443f53-ba12-42b3-a57c-e4df92685c73',
|
||||||
|
mjSpeed: 'RELAXED',
|
||||||
|
useTransfer: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (optionStore.MJ_GlobalSetting.mj_browserSetting == null) {
|
||||||
|
optionStore.MJ_GlobalSetting.mj_browserSetting = {
|
||||||
|
channelId: '自己的频道ID111111111',
|
||||||
|
customUserAgent: true,
|
||||||
|
id: '4d5d57f2-1d7a-4e0f-b347-a7283e75d64a',
|
||||||
|
mjBotId: '自己的MJ机器人ID',
|
||||||
|
nijBotId: '自己的NIJI机器人ID',
|
||||||
|
serviceId: '自己的服务器IDwwwwww',
|
||||||
|
token: '自己的令牌11111111111111',
|
||||||
|
userAgent: '自己的UserAgent111111111111111111111111111',
|
||||||
|
userAgentCustom: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (optionStore.MJ_GlobalSetting.mj_remoteSimpleSetting == null) {
|
||||||
|
optionStore.MJ_GlobalSetting.mj_remoteSimpleSetting = {
|
||||||
|
useTransfer: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (optionStore.MJ_GlobalSetting.mj_simpleSetting == null) {
|
||||||
|
optionStore.MJ_GlobalSetting.mj_simpleSetting = {
|
||||||
|
imageModel: '99377cad-c103-4cee-a958-86a104879328',
|
||||||
|
imageScale: '3e2772f2-041c-49c6-ba13-d0ed120310b8',
|
||||||
|
imageSuffix: ' --niji 6 --ar 1:1',
|
||||||
|
requestModel: 'api_mj',
|
||||||
|
selectRobot: 'niji',
|
||||||
|
spaceTime: 11,
|
||||||
|
taskCount: 3,
|
||||||
|
type: 'api_mj'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (optionStore.MJ_GlobalSetting.mj_localRemoteSimpleSetting == null) {
|
||||||
|
optionStore.MJ_GlobalSetting.mj_localRemoteSimpleSetting = {
|
||||||
|
baseUrl: 'http://127.0.0.1',
|
||||||
|
port: '8080',
|
||||||
|
token: 'admin'
|
||||||
|
}
|
||||||
|
}
|
||||||
message.success('加载MJSetting信息成功')
|
message.success('加载MJSetting信息成功')
|
||||||
}
|
}
|
||||||
await TimeDelay(1000)
|
await TimeDelay(1000)
|
||||||
@ -98,7 +146,7 @@ async function SaveMjSetting() {
|
|||||||
|
|
||||||
if (request_model == MJImageType.REMOTE_MJ) {
|
if (request_model == MJImageType.REMOTE_MJ) {
|
||||||
// 检查是不是有代理账号
|
// 检查是不是有代理账号
|
||||||
let remoteMjRes = await window.setting.GetRemoteMJSettings()
|
let remoteMjRes = await window.setting.GetRemoteMJSettings('remote')
|
||||||
if (remoteMjRes.code == 0) {
|
if (remoteMjRes.code == 0) {
|
||||||
message.error('获取代理MJ配置失败')
|
message.error('获取代理MJ配置失败')
|
||||||
return
|
return
|
||||||
@ -123,6 +171,13 @@ async function SaveMjSetting() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (request_model == MJImageType.LOCAL_MJ) {
|
||||||
|
if (optionStore.MJ_GlobalSetting.mj_localRemoteSimpleSetting.token == null) {
|
||||||
|
message.error('请检查本地模式代理模式访问令牌是不是为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
optionStore.MJ_GlobalSetting.mj_simpleSetting.type =
|
optionStore.MJ_GlobalSetting.mj_simpleSetting.type =
|
||||||
optionStore.MJ_GlobalSetting.mj_simpleSetting.requestModel
|
optionStore.MJ_GlobalSetting.mj_simpleSetting.requestModel
|
||||||
|
|
||||||
|
|||||||
@ -113,7 +113,13 @@ export const useOptionStore = defineStore('option', {
|
|||||||
},
|
},
|
||||||
mj_remoteSimpleSetting: {
|
mj_remoteSimpleSetting: {
|
||||||
useTransfer: false
|
useTransfer: false
|
||||||
|
},
|
||||||
|
mj_localRemoteSimpleSetting: {
|
||||||
|
baseUrl: "http://127.0.0.1",
|
||||||
|
port: "8080",
|
||||||
|
token: "admin",
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
[OptionKeyName.ComfyUI_SimpleSetting]: {
|
[OptionKeyName.ComfyUI_SimpleSetting]: {
|
||||||
requestUrl: "",
|
requestUrl: "",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user