-
+
Date: Fri, 16 May 2025 17:10:55 +0800
Subject: [PATCH 11/58] Update 202504112044.sql
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
fix:修复智控台fish-speech无法按声音播放bug
---
.../src/main/resources/db/changelog/202504112044.sql | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/main/manager-api/src/main/resources/db/changelog/202504112044.sql b/main/manager-api/src/main/resources/db/changelog/202504112044.sql
index 9fd2257d..df00d3b8 100644
--- a/main/manager-api/src/main/resources/db/changelog/202504112044.sql
+++ b/main/manager-api/src/main/resources/db/changelog/202504112044.sql
@@ -32,7 +32,7 @@ INSERT INTO `ai_model_config` VALUES ('TTS_EdgeTTS', 'TTS', 'EdgeTTS', 'Edge语
INSERT INTO `ai_model_config` VALUES ('TTS_DoubaoTTS', 'TTS', 'DoubaoTTS', '豆包语音合成', 0, 1, '{\"type\": \"doubao\", \"api_url\": \"https://openspeech.bytedance.com/api/v1/tts\", \"voice\": \"BV001_streaming\", \"output_dir\": \"tmp/\", \"authorization\": \"Bearer;\", \"appid\": \"\", \"access_token\": \"\", \"cluster\": \"volcano_tts\"}', NULL, NULL, 2, NULL, NULL, NULL, NULL);
INSERT INTO `ai_model_config` VALUES ('TTS_CosyVoiceSiliconflow', 'TTS', 'CosyVoiceSiliconflow', '硅基流动语音合成', 0, 1, '{\"type\": \"siliconflow\", \"model\": \"FunAudioLLM/CosyVoice2-0.5B\", \"voice\": \"FunAudioLLM/CosyVoice2-0.5B:alex\", \"output_dir\": \"tmp/\", \"access_token\": \"\", \"response_format\": \"wav\"}', NULL, NULL, 3, NULL, NULL, NULL, NULL);
INSERT INTO `ai_model_config` VALUES ('TTS_CozeCnTTS', 'TTS', 'CozeCnTTS', 'Coze中文语音合成', 0, 1, '{\"type\": \"cozecn\", \"voice\": \"7426720361733046281\", \"output_dir\": \"tmp/\", \"access_token\": \"\", \"response_format\": \"wav\"}', NULL, NULL, 4, NULL, NULL, NULL, NULL);
-INSERT INTO `ai_model_config` VALUES ('TTS_FishSpeech', 'TTS', 'FishSpeech', 'FishSpeech语音合成', 0, 1, '{\"type\": \"fishspeech\", \"output_dir\": \"tmp/\", \"response_format\": \"wav\", \"reference_id\": null, \"reference_audio\": [\"/tmp/test.wav\"], \"reference_text\": [\"你弄来这些吟词宴曲来看,还是这些混话来欺负我。\"], \"normalize\": true, \"max_new_tokens\": 1024, \"chunk_length\": 200, \"top_p\": 0.7, \"repetition_penalty\": 1.2, \"temperature\": 0.7, \"streaming\": false, \"use_memory_cache\": \"on\", \"seed\": null, \"channels\": 1, \"rate\": 44100, \"api_key\": \"\", \"api_url\": \"http://127.0.0.1:8080/v1/tts\"}', NULL, NULL, 5, NULL, NULL, NULL, NULL);
+INSERT INTO `ai_model_config` VALUES ('TTS_FishSpeech', 'TTS', 'FishSpeech', 'FishSpeech语音合成', 0, 1, '{\"type\": \"fishspeech\", \"output_dir\": \"tmp/\", \"response_format\": \"wav\", \"reference_id\": null, \"reference_audio\": [\"/tmp/test.wav\"], \"reference_text\": [\"你弄来这些吟词宴曲来看,还是这些混话来欺负我。\"], \"normalize\": true, \"max_new_tokens\": 1024, \"chunk_length\": 200, \"top_p\": 0.7, \"repetition_penalty\": 1.2, \"temperature\": 0.7, \"streaming\": false, \"use_memory_cache\": \"on\", \"seed\": 1, \"channels\": 1, \"rate\": 44100, \"api_key\": \"\", \"api_url\": \"http://127.0.0.1:8080/v1/tts\"}', NULL, NULL, 5, NULL, NULL, NULL, NULL);
INSERT INTO `ai_model_config` VALUES ('TTS_GPT_SOVITS_V2', 'TTS', 'GPT_SOVITS_V2', 'GPT-SoVITS V2', 0, 1, '{\"type\": \"gpt_sovits_v2\", \"url\": \"http://127.0.0.1:9880/tts\", \"output_dir\": \"tmp/\", \"text_lang\": \"auto\", \"ref_audio_path\": \"caixukun.wav\", \"prompt_text\": \"\", \"prompt_lang\": \"zh\", \"top_k\": 5, \"top_p\": 1, \"temperature\": 1, \"text_split_method\": \"cut0\", \"batch_size\": 1, \"batch_threshold\": 0.75, \"split_bucket\": true, \"return_fragment\": false, \"speed_factor\": 1.0, \"streaming_mode\": false, \"seed\": -1, \"parallel_infer\": true, \"repetition_penalty\": 1.35, \"aux_ref_audio_paths\": []}', NULL, NULL, 6, NULL, NULL, NULL, NULL);
INSERT INTO `ai_model_config` VALUES ('TTS_GPT_SOVITS_V3', 'TTS', 'GPT_SOVITS_V3', 'GPT-SoVITS V3', 0, 1, '{\"type\": \"gpt_sovits_v3\", \"url\": \"http://127.0.0.1:9880\", \"output_dir\": \"tmp/\", \"text_language\": \"auto\", \"refer_wav_path\": \"caixukun.wav\", \"prompt_language\": \"zh\", \"prompt_text\": \"\", \"top_k\": 15, \"top_p\": 1.0, \"temperature\": 1.0, \"cut_punc\": \"\", \"speed\": 1.0, \"inp_refs\": [], \"sample_steps\": 32, \"if_sr\": false}', NULL, NULL, 7, NULL, NULL, NULL, NULL);
INSERT INTO `ai_model_config` VALUES ('TTS_MinimaxTTS', 'TTS', 'MinimaxTTS', 'MiniMax语音合成', 0, 1, '{\"type\": \"minimax\", \"output_dir\": \"tmp/\", \"group_id\": \"\", \"api_key\": \"你的api_key\", \"model\": \"speech-01-turbo\", \"voice_id\": \"female-shaonv\"}', NULL, NULL, 8, NULL, NULL, NULL, NULL);
From ae8f11d5a82bd092d46a3aaf186650e8a876e9b0 Mon Sep 17 00:00:00 2001
From: ljwwd2 <1205484020@qq.com>
Date: Sat, 17 May 2025 01:18:03 +0800
Subject: [PATCH 12/58] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=99=A8=E7=AE=A1?=
=?UTF-8?q?=E7=90=86-=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5api?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/service/impl/BaseServiceImpl.java | 55 +++++++++++++++
.../controller/ModelProviderController.java | 31 ++++++---
.../model/entity/ModelProviderEntity.java | 2 +-
.../model/service/ModelProviderService.java | 2 +
.../impl/ModelProviderServiceImpl.java | 68 ++++++++++++-------
5 files changed, 123 insertions(+), 35 deletions(-)
diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java
index 9d2ba5d5..49a003cb 100644
--- a/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java
+++ b/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java
@@ -1,6 +1,7 @@
package xiaozhi.common.service.impl;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -18,6 +19,7 @@ import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -92,6 +94,59 @@ public abstract class BaseServiceImpl, T> implements Bas
return page;
}
+ /**
+ * 获取分页对象
+ * @see xiaozhi.common.constant.Constant
+ * params.put(Constant.PAGE, "1");
+ * params.put(Constant.LIMIT, "10");
+ * params.put(Constant.ORDER_FIELD, List.of("model_type", "sort"));
+ * params.put(Constant.ORDER, "asc");
+ *
+ * @param params 分页查询参数
+ */
+ protected IPage getPage(Map params) {
+ // 分页参数
+ long curPage = 1;
+ long limit = 10;
+
+ if (params.get(Constant.PAGE) != null) {
+ curPage = Long.parseLong((String) params.get(Constant.PAGE));
+ }
+
+ if (params.get(Constant.LIMIT) != null) {
+ limit = Long.parseLong((String) params.get(Constant.LIMIT));
+ }
+
+ // 分页对象
+ Page page = new Page<>(curPage, limit);
+
+ // 分页参数
+ params.put(Constant.PAGE, page);
+
+ // 排序字段
+ Object orderField = params.get(Constant.ORDER_FIELD);
+
+ List orderFields = new ArrayList<>();
+
+ if (orderField instanceof String) {
+ orderFields.add((String) orderField);
+ } else if (orderField instanceof List) {
+ orderFields.addAll( (List) orderField);
+ }
+ String order = (String) params.get(Constant.ORDER);
+
+ // 有排序字段则排序,默认降序
+ if (CollectionUtils.isNotEmpty(orderFields)) {
+ if (StringUtils.isNotBlank(order) && Constant.ASC.equalsIgnoreCase(order)) {
+ return page.addOrder(OrderItem.ascs(orderFields.toArray(new String[orderFields.size()])));
+ } else {
+ return page.addOrder(OrderItem.descs(orderFields.toArray(new String[orderFields.size()])));
+ }
+ }
+
+ return page;
+ }
+
protected PageData getPageData(List> list, long total, Class target) {
List targetList = ConvertUtils.sourceToTarget(list, target);
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java
index b296c240..64e14cb3 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelProviderController.java
@@ -1,11 +1,21 @@
package xiaozhi.modules.model.controller;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.AllArgsConstructor;
+import java.util.List;
+
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
import xiaozhi.common.annotation.UpdateGroup;
import xiaozhi.common.page.PageData;
import xiaozhi.common.utils.Result;
@@ -31,7 +41,7 @@ public class ModelProviderController {
}
@PostMapping
- @Operation(summary = "获取模型供应器列表")
+ @Operation(summary = "新增模型供应器")
@RequiresPermissions("sys:role:superAdmin")
public Result add(@RequestBody @Validated ModelProviderDTO modelProviderDTO) {
ModelProviderDTO resp = modelProviderService.add(modelProviderDTO);
@@ -39,18 +49,19 @@ public class ModelProviderController {
}
@PutMapping
- @Operation(summary = "获取模型供应器列表")
+ @Operation(summary = "修改模型供应器")
@RequiresPermissions("sys:role:superAdmin")
public Result edit(@RequestBody @Validated(UpdateGroup.class) ModelProviderDTO modelProviderDTO) {
ModelProviderDTO resp = modelProviderService.edit(modelProviderDTO);
return new Result().ok(resp);
}
- @DeleteMapping("/{id}")
- @Operation(summary = "获取模型供应器列表")
+ @PostMapping("/delete")
+ @Operation(summary = "删除模型供应器")
@RequiresPermissions("sys:role:superAdmin")
- public Result delete(@PathVariable String id) {
- modelProviderService.delete(id);
+ @Parameter(name = "ids", description = "ID数组", required = true)
+ public Result delete(@RequestBody List ids) {
+ modelProviderService.delete(ids);
return new Result<>();
}
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java
index 62e84f67..0509e09c 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java
@@ -30,7 +30,7 @@ public class ModelProviderEntity {
private String name;
@Schema(description = "供应器字段列表(JSON格式)")
- @TableField(typeHandler = JacksonTypeHandler.class)
+// @TableField(typeHandler = JacksonTypeHandler.class)
private String fields;
@Schema(description = "排序")
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java
index fbb009fd..d41766f6 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java
@@ -17,6 +17,8 @@ public interface ModelProviderService {
void delete(String id);
+ void delete(List id);
+
PageData getListPage(ModelProviderDTO modelProviderDTO, String page, String limit);
List getList(String modelType, String provideCode);
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java
index 90f69f32..3ea21367 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java
@@ -5,12 +5,13 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.hutool.json.JSONArray;
import lombok.AllArgsConstructor;
import xiaozhi.common.constant.Constant;
import xiaozhi.common.exception.RenException;
@@ -41,49 +42,61 @@ public class ModelProviderServiceImpl extends BaseServiceImpl getListPage(ModelProviderDTO modelProviderEntity, String page, String limit) {
+ public PageData getListPage(ModelProviderDTO modelProviderDTO, String page, String limit) {
Map params = new HashMap();
params.put(Constant.PAGE, page);
params.put(Constant.LIMIT, limit);
+ params.put(Constant.ORDER_FIELD, List.of("model_type", "sort"));
+ params.put(Constant.ORDER, "asc");
- IPage pageParam = getPage(params, "model_type", true);
+ IPage pageParam = getPage(params);
QueryWrapper wrapper = new QueryWrapper();
- if (StringUtils.isNotBlank(modelProviderEntity.getModelType())) {
- wrapper.eq("model_type", modelProviderEntity.getModelType());
+ if (StringUtils.isNotBlank(modelProviderDTO.getModelType())) {
+ wrapper.eq("model_type", modelProviderDTO.getModelType());
}
- if (StringUtils.isNotBlank(modelProviderEntity.getName())) {
- wrapper.like("name", "%" + modelProviderEntity.getName() + "%");
+ if (StringUtils.isNotBlank(modelProviderDTO.getName())) {
+ wrapper.like("name", "%" + modelProviderDTO.getName() + "%");
}
return getPageData(modelProviderDao.selectPage(pageParam, wrapper), ModelProviderDTO.class);
}
- @Override
- public ModelProviderDTO add(ModelProviderDTO modelProviderEntity) {
- UserDetail user = SecurityUser.getUser();
- modelProviderEntity.setCreator(user.getId());
- modelProviderEntity.setUpdater(user.getId());
- modelProviderEntity.setCreateDate(new Date());
- modelProviderEntity.setUpdateDate(new Date());
- if (modelProviderDao.insert(ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderEntity.class)) == 0) {
- throw new RenException("新增数据失败");
- }
-
- return ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderDTO.class);
+ public static void main(String[] args) {
+ String jsonString = "\"[]\"";
+ JSONArray jsonArray = new JSONArray(jsonString);
+ System.out.println("字符串转 JSONArray: " + jsonArray.toString());
}
@Override
- public ModelProviderDTO edit(ModelProviderDTO modelProviderEntity) {
+ public ModelProviderDTO add(ModelProviderDTO modelProviderDTO) {
UserDetail user = SecurityUser.getUser();
- modelProviderEntity.setUpdater(user.getId());
- modelProviderEntity.setUpdateDate(new Date());
- if (modelProviderDao.updateById(ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderEntity.class)) == 0) {
+ modelProviderDTO.setCreator(user.getId());
+ modelProviderDTO.setUpdater(user.getId());
+ modelProviderDTO.setCreateDate(new Date());
+ modelProviderDTO.setUpdateDate(new Date());
+ // 去除Fields左右的双引号
+
+ modelProviderDTO.setFields(modelProviderDTO.getFields());
+ ModelProviderEntity entity = ConvertUtils.sourceToTarget(modelProviderDTO, ModelProviderEntity.class);
+ if (modelProviderDao.insert(entity) == 0) {
+ throw new RenException("新增数据失败");
+ }
+
+ return ConvertUtils.sourceToTarget(modelProviderDTO, ModelProviderDTO.class);
+ }
+
+ @Override
+ public ModelProviderDTO edit(ModelProviderDTO modelProviderDTO) {
+ UserDetail user = SecurityUser.getUser();
+ modelProviderDTO.setUpdater(user.getId());
+ modelProviderDTO.setUpdateDate(new Date());
+ if (modelProviderDao.updateById(ConvertUtils.sourceToTarget(modelProviderDTO, ModelProviderEntity.class)) == 0) {
throw new RenException("修改数据失败");
}
- return ConvertUtils.sourceToTarget(modelProviderEntity, ModelProviderDTO.class);
+ return ConvertUtils.sourceToTarget(modelProviderDTO, ModelProviderDTO.class);
}
@Override
@@ -93,6 +106,13 @@ public class ModelProviderServiceImpl extends BaseServiceImpl ids) {
+ if (modelProviderDao.deleteBatchIds(ids) == 0) {
+ throw new RenException("删除数据失败");
+ }
+ }
+
@Override
public List getList(String modelType, String providerCode) {
QueryWrapper queryWrapper = new QueryWrapper<>();
From 38a97d6b5a125276f674ca27d5004e382ccc7fb3 Mon Sep 17 00:00:00 2001
From: ljwwd2 <1205484020@qq.com>
Date: Sat, 17 May 2025 01:18:19 +0800
Subject: [PATCH 13/58] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=99=A8=E7=AE=A1?=
=?UTF-8?q?=E7=90=86-=E5=89=8D=E7=AB=AF=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
main/manager-web/src/apis/module/model.js | 142 +++++++-
.../src/components/ProviderDialog.vue | 12 +-
.../src/views/ProviderManagement.vue | 326 +++++++-----------
3 files changed, 266 insertions(+), 214 deletions(-)
diff --git a/main/manager-web/src/apis/module/model.js b/main/manager-web/src/apis/module/model.js
index ec0ea32f..e64072a8 100644
--- a/main/manager-web/src/apis/module/model.js
+++ b/main/manager-web/src/apis/module/model.js
@@ -166,20 +166,20 @@ export default {
configJson: formData.configJson
};
RequestService.sendRequest()
- .url(`${getServiceUrl()}/models/${modelType}/${provideCode}/${id}`)
- .method('PUT')
- .data(payload)
- .success((res) => {
- RequestService.clearRequestTime();
- callback(res);
- })
- .fail((err) => {
- console.error('更新模型失败:', err);
- this.$message.error(err.msg || '更新模型失败');
- RequestService.reAjaxFun(() => {
- this.updateModel(params, callback);
- });
- }).send();
+ .url(`${getServiceUrl()}/models/${modelType}/${provideCode}/${id}`)
+ .method('PUT')
+ .data(payload)
+ .success((res) => {
+ RequestService.clearRequestTime();
+ callback(res);
+ })
+ .fail((err) => {
+ console.error('更新模型失败:', err);
+ this.$message.error(err.msg || '更新模型失败');
+ RequestService.reAjaxFun(() => {
+ this.updateModel(params, callback);
+ });
+ }).send();
},
// 设置默认模型
setDefaultModel(id, callback) {
@@ -197,5 +197,117 @@ export default {
this.setDefaultModel(id, callback)
})
}).send()
- }
+ },
+
+ /**
+ * 获取模型配置列表(支持查询参数)
+ * @param {Object} params - 查询参数对象,例如 { name: 'test', modelType: 1 }
+ * @param {Function} callback - 回调函数
+ */
+ getModelProvidersPage(params, callback) {
+ // 构建查询参数
+ const queryParams = new URLSearchParams();
+ if (params.name) queryParams.append('name', params.name);
+ if (params.modelType !== undefined) queryParams.append('modelType', params.modelType);
+ if (params.page !== undefined) queryParams.append('page', params.page);
+ if (params.limit !== undefined) queryParams.append('limit', params.limit);
+
+ RequestService.sendRequest()
+ .url(`${getServiceUrl()}/models/provider?${queryParams.toString()}`)
+ .method('GET')
+ // 如果需要额外设置 header,可以在这里添加
+ // .headers({ 'X-Custom-Header': 'xxx' })
+ .success((res) => {
+ RequestService.clearRequestTime();
+ callback(res);
+ })
+ .fail((err) => {
+ console.error('获取供应器列表失败:', err);
+ this.$message.error('获取供应器列表失败');
+ RequestService.reAjaxFun(() => {
+ this.getModelProviders(params, callback);
+ });
+ }).send();
+ },
+
+ /**
+ * 新增模型供应器配置
+ * @param {Object} params - 请求参数对象,例如 { modelType: '1', providerCode: '1', name: '1', fields: '1', sort: 1 }
+ * @param {Function} callback - 成功回调函数
+ */
+ addModelProvider(params, callback) {
+ const postData = {
+ modelType: params.modelType || '',
+ providerCode: params.providerCode || '',
+ name: params.name || '',
+ fields: JSON.stringify(params.fields || []),
+ sort: params.sort || 0
+ };
+
+ RequestService.sendRequest()
+ .url(`${getServiceUrl()}/models/provider`)
+ .method('POST')
+ .data(postData)
+ .success((res) => {
+ console.log('新增模型供应器成功:', res);
+ RequestService.clearRequestTime();
+ // this.$message.success('新增模型供应器成功');
+ callback(res);
+ })
+ .fail((err) => {
+ console.error('新增模型供应器失败:', err);
+ // this.$message.error(err.msg || '新增模型供应器失败');
+ // RequestService.reAjaxFun(() => {
+ // this.addModelProvider(params, callback);
+ // });
+ }).send();
+ },
+
+ /**
+ * 更新模型供应器配置
+ * @param {Object} params - 请求参数对象,例如 { id: '111', modelType: '1', providerCode: '1', name: '1', fields: '1', sort: 1 }
+ * @param {Function} callback - 成功回调函数
+ */
+ updateModelProvider(params, callback) {
+ const putData = {
+ id: params.id || '',
+ modelType: params.modelType || '',
+ providerCode: params.providerCode || '',
+ name: params.name || '',
+ fields: JSON.stringify(params.fields || []),
+ sort: params.sort || 0
+ };
+
+ RequestService.sendRequest()
+ .url(`${getServiceUrl()}/models/provider`)
+ .method('PUT')
+ .data(putData)
+ .success((res) => {
+ RequestService.clearRequestTime();
+ callback(res);
+ })
+ .fail((err) => {
+ console.error('更新模型供应器失败:', err);
+ RequestService.reAjaxFun(() => {
+ this.updateModelProvider(params, callback);
+ });
+ }).send();
+ },
+ // 删除
+ deleteModelProviderByIds(ids, callback) {
+ RequestService.sendRequest()
+ .url(`${getServiceUrl()}/models/provider/delete`)
+ .method('POST')
+ .data(ids)
+ .success((res) => {
+ RequestService.clearRequestTime()
+ callback(res);
+ })
+ .fail((err) => {
+ console.error('删除参数失败:', err)
+ RequestService.reAjaxFun(() => {
+ this.deleteParam(ids, callback)
+ })
+ }).send()
+ },
}
diff --git a/main/manager-web/src/components/ProviderDialog.vue b/main/manager-web/src/components/ProviderDialog.vue
index 844282ee..72437450 100644
--- a/main/manager-web/src/components/ProviderDialog.vue
+++ b/main/manager-web/src/components/ProviderDialog.vue
@@ -10,15 +10,15 @@
-
-
+
+
-
-
+
+
@@ -135,8 +135,8 @@ export default {
return {
saving: false,
rules: {
- model_type: [{required: true, message: '请选择类别', trigger: 'change'}],
- provider_code: [{required: true, message: '请输入供应器编码', trigger: 'blur'}],
+ modelType: [{required: true, message: '请选择类别', trigger: 'change'}],
+ providerCode: [{required: true, message: '请输入供应器编码', trigger: 'blur'}],
name: [{required: true, message: '请输入供应器名称', trigger: 'blur'}]
},
isAllFieldsSelected: false,
diff --git a/main/manager-web/src/views/ProviderManagement.vue b/main/manager-web/src/views/ProviderManagement.vue
index f047f482..a476c5e2 100644
--- a/main/manager-web/src/views/ProviderManagement.vue
+++ b/main/manager-web/src/views/ProviderManagement.vue
@@ -1,13 +1,14 @@
-
+
供应器管理
- 类别筛选 {{ selectedModelTypeLabel }}
+ 类别筛选 {{ selectedModelTypeLabel }}
全部
@@ -16,7 +17,8 @@
-
+
搜索
@@ -26,35 +28,37 @@
+ element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
+ element-loading-background="rgba(255, 255, 255, 0.7)" :header-cell-class-name="headerCellClassName">
-
+
+
-
-
- 类别{{ selectedModelTypeLabel }}
-
-
- 全部
-
- {{ item.label }}
-
-
+
+
+ 类别{{ selectedModelTypeLabel }}
+
+
+ 全部
+
+ {{ item.label }}
+
+
-
- {{ getModelTypeLabel(scope.row.model_type) }}
+
+ {{ getModelTypeLabel(scope.row.modelType) }}
-
+
@@ -97,7 +101,8 @@
-
-
+
-
+
+@import './auth.scss';
+
+.login-type-container {
+ margin: 10px 20px;
+}
+
+:deep(.el-button--primary) {
+ background-color: #5778ff;
+ border-color: #5778ff;
+
+ &:hover,
+ &:focus {
+ background-color: #4a6ae8;
+ border-color: #4a6ae8;
+ }
+
+ &:active {
+ background-color: #3d5cd6;
+ border-color: #3d5cd6;
+ }
+}
+
diff --git a/main/manager-web/src/views/register.vue b/main/manager-web/src/views/register.vue
index 0806197f..744da3e4 100644
--- a/main/manager-web/src/views/register.vue
+++ b/main/manager-web/src/views/register.vue
@@ -23,38 +23,78 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
![验证码]()
+
+
+
+
+
+
+
+
+ {{ countdown > 0 ? `${countdown}秒后重试` : '发送验证码' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![验证码]()
+
+
+
+
+
@@ -81,7 +121,7 @@
+@import './auth.scss';
+
+.send-captcha-btn {
+ margin-right: -5px;
+ min-width: 100px;
+ height: 40px;
+ line-height: 40px;
+ border-radius: 4px;
+ font-size: 14px;
+ background: rgb(87, 120, 255);
+ border: none;
+ padding: 0px;
+
+ &:disabled {
+ background: #c0c4cc;
+ cursor: not-allowed;
+ }
+}
+
From d24419cfb7b10d0b5353897d73f9c35c9b480930 Mon Sep 17 00:00:00 2001
From: hrz <1710360675@qq.com>
Date: Sun, 18 May 2025 17:39:12 +0800
Subject: [PATCH 25/58] =?UTF-8?q?update:=E5=8F=91=E9=80=81=E6=89=8B?=
=?UTF-8?q?=E6=9C=BA=E9=AA=8C=E8=AF=81=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/security/service/impl/CaptchaServiceImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java
index a324c27f..09c8a185 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java
@@ -126,7 +126,7 @@ public class CaptchaServiceImpl implements CaptchaService {
}
// 发送验证码短信
- // smsService.sendVerificationCodeSms(phone, validateCodes);
+ smsService.sendVerificationCodeSms(phone, validateCodes);
}
@Override
From 4d0bef62eda6fc8bfc48dcc7a52a1e8e1bb91a2e Mon Sep 17 00:00:00 2001
From: hrz <1710360675@qq.com>
Date: Sun, 18 May 2025 17:55:18 +0800
Subject: [PATCH 26/58] =?UTF-8?q?update:=E8=A1=A5=E5=85=85=E7=BC=BA?=
=?UTF-8?q?=E5=A4=B1=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../xiaozhi/modules/security/controller/LoginController.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java
index b8186423..d0d84e66 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java
@@ -183,7 +183,7 @@ public class LoginController {
throw new RenException("用户名或验证码错误");
}
// 验证短信验证码是否正常
- boolean validate = captchaService.validateSMSValidateCode(dto.getPhone(), dto.getCode());
+ boolean validate = captchaService.validateSMSValidateCode(dto.getPhone(), dto.getCode(), false);
// 判断是否通过验证
if (!validate) {
throw new RenException("用户名或验证码错误");
From 5bba864faa38ff8f0f33a4f91a5317e969efbe80 Mon Sep 17 00:00:00 2001
From: hrz <1710360675@qq.com>
Date: Sun, 18 May 2025 17:59:08 +0800
Subject: [PATCH 27/58] =?UTF-8?q?fix=EF=BC=9A=E7=99=BB=E5=BD=95=E5=A4=B1?=
=?UTF-8?q?=E8=B4=A5=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF=E6=98=BE=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
main/manager-web/src/views/login.vue | 1 +
1 file changed, 1 insertion(+)
diff --git a/main/manager-web/src/views/login.vue b/main/manager-web/src/views/login.vue
index 407831d1..f082721e 100644
--- a/main/manager-web/src/views/login.vue
+++ b/main/manager-web/src/views/login.vue
@@ -199,6 +199,7 @@ export default {
this.$store.commit('setToken', JSON.stringify(data.data));
goToPage('/home');
}, (err) => {
+ showDanger(err.data.msg || '登录失败')
if (err.data != null && err.data.msg != null && err.data.msg.indexOf('图形验证码') > -1) {
this.fetchCaptcha()
}
From 748f17b777b692fecb8ba11abee7b4bfe12be669 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com>
Date: Sun, 18 May 2025 18:44:11 +0800
Subject: [PATCH 28/58] =?UTF-8?q?=E5=BC=80=E5=90=AF=E6=89=8B=E6=9C=BA?=
=?UTF-8?q?=E6=B3=A8=E5=86=8C=EF=BC=8C=E9=AA=8C=E8=AF=81=E7=9B=B8=E5=85=B3?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=8D=E5=8F=AF=E4=BB=A5=E4=B8=BA=E7=A9=BA?=
=?UTF-8?q?=20--SysParamsServiceImpl.java=20=E5=BC=80=E5=90=AF=E6=89=8B?=
=?UTF-8?q?=E6=9C=BA=E6=B3=A8=E5=86=8C=E5=8F=82=E6=95=B0=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E9=AA=8C=E8=AF=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/impl/SysParamsServiceImpl.java | 43 ++++++++++++++++---
1 file changed, 38 insertions(+), 5 deletions(-)
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java
index 2187a8b4..a72b94f4 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java
@@ -1,9 +1,6 @@
package xiaozhi.modules.sys.service.impl;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@@ -82,7 +79,7 @@ public class SysParamsServiceImpl extends BaseServiceImpl
list = new ArrayList();
+ list.add(Constant.SysMSMParam.SYSTEM_SMS_MAX_SEND_COUNT.getValue());
+ list.add(Constant.SysMSMParam.ALIYUN_SMS_ACCESS_KEY_ID.getValue());
+ list.add(Constant.SysMSMParam.ALIYUN_SMS_ACCESS_KEY_SECRET.getValue());
+ list.add(Constant.SysMSMParam.ALIYUN_SMS_SIGN_NAME.getValue());
+ list.add(Constant.SysMSMParam.ALIYUN_SMS_SMS_CODE_TEMPLATE_CODE.getValue());
+ StringBuilder str = new StringBuilder();
+ list.forEach( item -> {
+ if (!StringUtils.isNoneBlank(item)) {
+ str.append(",").append(item);
+ }
+ });
+ if (!str.isEmpty()) {
+ String promptStr = "%s这些参数不可以为空";
+ String substring = str.substring(1, str.length());
+ throw new RenException(promptStr.formatted(substring));
+ }
+ return true;
+ }
}
\ No newline at end of file
From db68871646b9bb655f71f24284b3664b2007e438 Mon Sep 17 00:00:00 2001
From: hrz <1710360675@qq.com>
Date: Sun, 18 May 2025 22:25:09 +0800
Subject: [PATCH 29/58] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E6=B5=8B?=
=?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B=E5=8F=82=E6=95=B0=E9=94=99=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/exception/RenExceptionHandler.java | 6 +++---
.../modules/sys/loginControllerTest.java | 19 ++++++++++++-------
2 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java b/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java
index df9023ae..f6b19d31 100644
--- a/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java
+++ b/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java
@@ -1,5 +1,8 @@
package xiaozhi.common.exception;
+import java.util.List;
+import java.util.Objects;
+
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.dao.DuplicateKeyException;
@@ -13,8 +16,6 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import xiaozhi.common.utils.Result;
-import java.util.List;
-import java.util.Objects;
/**
* 异常处理器
* Copyright (c) 人人开源 All rights reserved.
@@ -67,7 +68,6 @@ public class RenExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
- StringBuilder sb = new StringBuilder();
List allErrors = ex.getBindingResult().getAllErrors();
String errorMsg = allErrors.stream()
.filter(Objects::nonNull)
diff --git a/main/manager-api/src/test/java/xiaozhi/modules/sys/loginControllerTest.java b/main/manager-api/src/test/java/xiaozhi/modules/sys/loginControllerTest.java
index 777abbf9..5cc39967 100644
--- a/main/manager-api/src/test/java/xiaozhi/modules/sys/loginControllerTest.java
+++ b/main/manager-api/src/test/java/xiaozhi/modules/sys/loginControllerTest.java
@@ -1,15 +1,16 @@
package xiaozhi.modules.sys;
-import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
+
+import lombok.extern.slf4j.Slf4j;
import xiaozhi.modules.security.controller.LoginController;
import xiaozhi.modules.security.dto.LoginDTO;
+import xiaozhi.modules.security.dto.SmsVerificationDTO;
import xiaozhi.modules.sys.dto.RetrievePasswordDTO;
-
@Slf4j
@SpringBootTest
@ActiveProfiles("dev")
@@ -28,23 +29,27 @@ class loginControllerTest {
}
@Test
- public void testSmsVerification(){
+ public void testSmsVerification() {
try {
- loginController.smsVerification("手机号码");
- }catch (Exception e){
+ SmsVerificationDTO smsVerificationDTO = new SmsVerificationDTO();
+ smsVerificationDTO.setPhone("手机号码");
+ smsVerificationDTO.setCaptchaId("123456");
+ smsVerificationDTO.setCaptcha("123456");
+ loginController.smsVerification(smsVerificationDTO);
+ } catch (Exception e) {
System.out.println(e.getMessage());
}
}
@Test
- public void testRetrievePassword(){
+ public void testRetrievePassword() {
try {
RetrievePasswordDTO retrievePasswordDTO = new RetrievePasswordDTO();
retrievePasswordDTO.setCode("123456");
retrievePasswordDTO.setPhone("手机号码");
retrievePasswordDTO.setPassword("密码");
loginController.retrievePassword(retrievePasswordDTO);
- }catch (Exception e){
+ } catch (Exception e) {
System.out.println(e.getMessage());
}
From ff95764824c54c10f0b435508948a563437a3192 Mon Sep 17 00:00:00 2001
From: AMEN
Date: Sun, 18 May 2025 23:00:01 +0800
Subject: [PATCH 30/58] =?UTF-8?q?=E5=90=8E=E7=AB=AF=20=E5=8F=82=E6=95=B0?=
=?UTF-8?q?=E7=AE=A1=E7=90=86=E6=96=B0=E5=A2=9E=E5=8F=82=E6=95=B0=EF=BC=9A?=
=?UTF-8?q?=20server.beian=5Ficp=5Fnum=20server.beian=5Fga=5Fnum=20?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=20=E5=8F=82=E6=95=B0=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2=E6=94=AF=E6=8C=81=E5=A4=87=E6=B3=A8=E6=9F=A5=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/security/controller/LoginController.java | 2 ++
.../modules/sys/controller/SysParamsController.java | 2 +-
.../modules/sys/service/impl/SysParamsServiceImpl.java | 4 +++-
.../src/main/resources/db/changelog/202505182232.sql | 3 +++
.../main/resources/db/changelog/db.changelog-master.yaml | 7 +++++++
5 files changed, 16 insertions(+), 2 deletions(-)
create mode 100644 main/manager-api/src/main/resources/db/changelog/202505182232.sql
diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java
index d0d84e66..e792fc0f 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java
@@ -203,6 +203,8 @@ public class LoginController {
config.put("allowUserRegister", sysUserService.getAllowUserRegister());
List list = sysDictDataService.getDictDataByType("MOBILE_AREA");
config.put("mobileAreaList", list);
+ config.put("beianIcpNum", sysParamsService.getValue("beian_icp_num", true));
+ config.put("beianGaNum", sysParamsService.getValue("beian_ga_num", true));
return new Result