diff --git a/open-isle-cli/src/views/NewPostPageView.vue b/open-isle-cli/src/views/NewPostPageView.vue
index d55a15519..5851e964c 100644
--- a/open-isle-cli/src/views/NewPostPageView.vue
+++ b/open-isle-cli/src/views/NewPostPageView.vue
@@ -176,6 +176,8 @@ export default {
if (res.ok) {
const data = await res.json()
content.value = data.content || ''
+ } else if (res.status === 429) {
+ toast.error('今日AI优化次数已用尽')
} else {
toast.error('AI 优化失败')
}
diff --git a/open-isle-cli/src/views/SettingsPageView.vue b/open-isle-cli/src/views/SettingsPageView.vue
index 32eb7362c..89548423b 100644
--- a/open-isle-cli/src/views/SettingsPageView.vue
+++ b/open-isle-cli/src/views/SettingsPageView.vue
@@ -36,6 +36,10 @@
密码强度
+
保存中...
@@ -65,6 +69,7 @@ export default {
role: '',
publishMode: 'DIRECT',
passwordStrength: 'LOW',
+ aiFormatLimit: 3,
isLoadingPage: false,
isSaving: false
}
@@ -109,6 +114,14 @@ export default {
{ id: 'HIGH', name: '高', icon: 'fas fa-user-shield' }
])
},
+ fetchAiLimits() {
+ return Promise.resolve([
+ { id: 3, name: '3次' },
+ { id: 5, name: '5次' },
+ { id: 10, name: '10次' },
+ { id: -1, name: '无限' }
+ ])
+ },
async loadAdminConfig() {
try {
const token = getToken()
@@ -119,6 +132,7 @@ export default {
const data = await res.json()
this.publishMode = data.publishMode
this.passwordStrength = data.passwordStrength
+ this.aiFormatLimit = data.aiFormatLimit
}
} catch (e) {
// ignore
@@ -169,7 +183,7 @@ export default {
await fetch(`${API_BASE_URL}/api/admin/config`, {
method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },
- body: JSON.stringify({ publishMode: this.publishMode, passwordStrength: this.passwordStrength })
+ body: JSON.stringify({ publishMode: this.publishMode, passwordStrength: this.passwordStrength, aiFormatLimit: this.aiFormatLimit })
})
}
toast.success('保存成功')
diff --git a/src/main/java/com/openisle/controller/AdminConfigController.java b/src/main/java/com/openisle/controller/AdminConfigController.java
index cb6c32949..b874a1a8d 100644
--- a/src/main/java/com/openisle/controller/AdminConfigController.java
+++ b/src/main/java/com/openisle/controller/AdminConfigController.java
@@ -4,6 +4,7 @@ import com.openisle.model.PasswordStrength;
import com.openisle.model.PublishMode;
import com.openisle.service.PasswordValidator;
import com.openisle.service.PostService;
+import com.openisle.service.AiUsageService;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@@ -14,12 +15,14 @@ import org.springframework.web.bind.annotation.*;
public class AdminConfigController {
private final PostService postService;
private final PasswordValidator passwordValidator;
+ private final AiUsageService aiUsageService;
@GetMapping
public ConfigDto getConfig() {
ConfigDto dto = new ConfigDto();
dto.setPublishMode(postService.getPublishMode());
dto.setPasswordStrength(passwordValidator.getStrength());
+ dto.setAiFormatLimit(aiUsageService.getFormatLimit());
return dto;
}
@@ -31,6 +34,9 @@ public class AdminConfigController {
if (dto.getPasswordStrength() != null) {
passwordValidator.setStrength(dto.getPasswordStrength());
}
+ if (dto.getAiFormatLimit() != null) {
+ aiUsageService.setFormatLimit(dto.getAiFormatLimit());
+ }
return getConfig();
}
@@ -38,5 +44,6 @@ public class AdminConfigController {
public static class ConfigDto {
private PublishMode publishMode;
private PasswordStrength passwordStrength;
+ private Integer aiFormatLimit;
}
}
diff --git a/src/main/java/com/openisle/controller/AiController.java b/src/main/java/com/openisle/controller/AiController.java
index ddffc8d35..6e5dca1fd 100644
--- a/src/main/java/com/openisle/controller/AiController.java
+++ b/src/main/java/com/openisle/controller/AiController.java
@@ -1,8 +1,10 @@
package com.openisle.controller;
import com.openisle.service.OpenAiService;
+import com.openisle.service.AiUsageService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,13 +18,21 @@ import java.util.Map;
public class AiController {
private final OpenAiService openAiService;
+ private final AiUsageService aiUsageService;
@PostMapping("/format")
- public ResponseEntity