mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-28 01:53:53 +08:00
update:优化已存在的Group注解
This commit is contained in:
@@ -1,13 +0,0 @@
|
|||||||
package xiaozhi.common.annotation;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
public @interface CreateGroup {
|
|
||||||
// 可以定义一些元数据或者参数
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package xiaozhi.common.annotation;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
public @interface UpdateGroup {
|
|
||||||
// 可以定义一些元数据或者参数
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@ public interface Constant {
|
|||||||
/**
|
/**
|
||||||
* 版本号
|
* 版本号
|
||||||
*/
|
*/
|
||||||
public static final String VERSION = "0.4.3";
|
public static final String VERSION = "0.4.4";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 无效固件URL
|
* 无效固件URL
|
||||||
|
|||||||
@@ -47,6 +47,12 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T> implements Bas
|
|||||||
* @param params 分页查询参数
|
* @param params 分页查询参数
|
||||||
* @param defaultOrderField 默认排序字段
|
* @param defaultOrderField 默认排序字段
|
||||||
* @param isAsc 排序方式
|
* @param isAsc 排序方式
|
||||||
|
* @see xiaozhi.common.constant.Constant
|
||||||
|
* params.put(Constant.PAGE, "1");
|
||||||
|
* params.put(Constant.LIMIT, "10");
|
||||||
|
* params.put(Constant.ORDER_FIELD, "field"); // 单个字段
|
||||||
|
* params.put(Constant.ORDER_FIELD, List.of("field1", "field2")); // 多个字段
|
||||||
|
* params.put(Constant.ORDER, "asc");
|
||||||
*/
|
*/
|
||||||
protected IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {
|
protected IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {
|
||||||
// 分页参数
|
// 分页参数
|
||||||
@@ -66,81 +72,34 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T> implements Bas
|
|||||||
// 分页参数
|
// 分页参数
|
||||||
params.put(Constant.PAGE, page);
|
params.put(Constant.PAGE, page);
|
||||||
|
|
||||||
// 排序字段
|
|
||||||
String orderField = (String) params.get(Constant.ORDER_FIELD);
|
|
||||||
String order = (String) params.get(Constant.ORDER);
|
|
||||||
|
|
||||||
// 前端字段排序
|
|
||||||
if (StringUtils.isNotBlank(orderField) && StringUtils.isNotBlank(order)) {
|
|
||||||
if (Constant.ASC.equalsIgnoreCase(order)) {
|
|
||||||
return page.addOrder(OrderItem.asc(orderField));
|
|
||||||
} else {
|
|
||||||
return page.addOrder(OrderItem.desc(orderField));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 没有排序字段,则不排序
|
|
||||||
if (StringUtils.isBlank(defaultOrderField)) {
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 默认排序
|
|
||||||
if (isAsc) {
|
|
||||||
page.addOrder(OrderItem.asc(defaultOrderField));
|
|
||||||
} else {
|
|
||||||
page.addOrder(OrderItem.desc(defaultOrderField));
|
|
||||||
}
|
|
||||||
|
|
||||||
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<T> getPage(Map<String, Object> 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<T> page = new Page<>(curPage, limit);
|
|
||||||
|
|
||||||
// 分页参数
|
|
||||||
params.put(Constant.PAGE, page);
|
|
||||||
|
|
||||||
// 排序字段
|
// 排序字段
|
||||||
Object orderField = params.get(Constant.ORDER_FIELD);
|
Object orderField = params.get(Constant.ORDER_FIELD);
|
||||||
|
String order = (String) params.get(Constant.ORDER);
|
||||||
|
|
||||||
List<String> orderFields = new ArrayList<>();
|
List<String> orderFields = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理排序字段
|
||||||
if (orderField instanceof String) {
|
if (orderField instanceof String) {
|
||||||
orderFields.add((String) orderField);
|
orderFields.add((String) orderField);
|
||||||
} else if (orderField instanceof List) {
|
} else if (orderField instanceof List) {
|
||||||
orderFields.addAll( (List<String>) orderField);
|
orderFields.addAll((List<String>) orderField);
|
||||||
}
|
}
|
||||||
String order = (String) params.get(Constant.ORDER);
|
|
||||||
|
|
||||||
// 有排序字段则排序,默认降序
|
// 有排序字段则排序
|
||||||
if (CollectionUtils.isNotEmpty(orderFields)) {
|
if (CollectionUtils.isNotEmpty(orderFields)) {
|
||||||
if (StringUtils.isNotBlank(order) && Constant.ASC.equalsIgnoreCase(order)) {
|
if (StringUtils.isNotBlank(order) && Constant.ASC.equalsIgnoreCase(order)) {
|
||||||
return page.addOrder(OrderItem.ascs(orderFields.toArray(new String[orderFields.size()])));
|
return page.addOrder(OrderItem.ascs(orderFields.toArray(new String[0])));
|
||||||
} else {
|
} else {
|
||||||
return page.addOrder(OrderItem.descs(orderFields.toArray(new String[orderFields.size()])));
|
return page.addOrder(OrderItem.descs(orderFields.toArray(new String[0])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 没有排序字段,使用默认排序
|
||||||
|
if (StringUtils.isNotBlank(defaultOrderField)) {
|
||||||
|
if (isAsc) {
|
||||||
|
page.addOrder(OrderItem.asc(defaultOrderField));
|
||||||
|
} else {
|
||||||
|
page.addOrder(OrderItem.desc(defaultOrderField));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -16,9 +16,9 @@ import io.swagger.v3.oas.annotations.Operation;
|
|||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import xiaozhi.common.annotation.UpdateGroup;
|
|
||||||
import xiaozhi.common.page.PageData;
|
import xiaozhi.common.page.PageData;
|
||||||
import xiaozhi.common.utils.Result;
|
import xiaozhi.common.utils.Result;
|
||||||
|
import xiaozhi.common.validator.group.UpdateGroup;
|
||||||
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
||||||
import xiaozhi.modules.model.service.ModelProviderService;
|
import xiaozhi.modules.model.service.ModelProviderService;
|
||||||
|
|
||||||
@@ -34,8 +34,8 @@ public class ModelProviderController {
|
|||||||
@Operation(summary = "获取模型供应器列表")
|
@Operation(summary = "获取模型供应器列表")
|
||||||
@RequiresPermissions("sys:role:superAdmin")
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
public Result<PageData<ModelProviderDTO>> getListPage(ModelProviderDTO modelProviderDTO,
|
public Result<PageData<ModelProviderDTO>> getListPage(ModelProviderDTO modelProviderDTO,
|
||||||
@RequestParam(required = true, defaultValue = "0") String page,
|
@RequestParam(required = true, defaultValue = "0") String page,
|
||||||
@RequestParam(required = true, defaultValue = "10") String limit) {
|
@RequestParam(required = true, defaultValue = "10") String limit) {
|
||||||
return new Result<PageData<ModelProviderDTO>>()
|
return new Result<PageData<ModelProviderDTO>>()
|
||||||
.ok(modelProviderService.getListPage(modelProviderDTO, page, limit));
|
.ok(modelProviderService.getListPage(modelProviderDTO, page, limit));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import xiaozhi.common.annotation.UpdateGroup;
|
import xiaozhi.common.validator.group.UpdateGroup;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "模型供应器/商")
|
@Schema(description = "模型供应器/商")
|
||||||
|
|||||||
+1
-1
@@ -50,7 +50,7 @@ public class ModelProviderServiceImpl extends BaseServiceImpl<ModelProviderDao,
|
|||||||
params.put(Constant.ORDER_FIELD, List.of("model_type", "sort"));
|
params.put(Constant.ORDER_FIELD, List.of("model_type", "sort"));
|
||||||
params.put(Constant.ORDER, "asc");
|
params.put(Constant.ORDER, "asc");
|
||||||
|
|
||||||
IPage<ModelProviderEntity> pageParam = getPage(params);
|
IPage<ModelProviderEntity> pageParam = getPage(params, null, true);
|
||||||
|
|
||||||
QueryWrapper<ModelProviderEntity> wrapper = new QueryWrapper<ModelProviderEntity>();
|
QueryWrapper<ModelProviderEntity> wrapper = new QueryWrapper<ModelProviderEntity>();
|
||||||
|
|
||||||
|
|||||||
@@ -215,15 +215,12 @@ export default {
|
|||||||
RequestService.sendRequest()
|
RequestService.sendRequest()
|
||||||
.url(`${getServiceUrl()}/models/provider?${queryParams.toString()}`)
|
.url(`${getServiceUrl()}/models/provider?${queryParams.toString()}`)
|
||||||
.method('GET')
|
.method('GET')
|
||||||
// 如果需要额外设置 header,可以在这里添加
|
|
||||||
// .headers({ 'X-Custom-Header': 'xxx' })
|
|
||||||
.success((res) => {
|
.success((res) => {
|
||||||
RequestService.clearRequestTime();
|
RequestService.clearRequestTime();
|
||||||
callback(res);
|
callback(res);
|
||||||
})
|
})
|
||||||
.fail((err) => {
|
.fail((err) => {
|
||||||
console.error('获取供应器列表失败:', err);
|
this.$message.error(err.msg || '获取供应器列表失败');
|
||||||
this.$message.error('获取供应器列表失败');
|
|
||||||
RequestService.reAjaxFun(() => {
|
RequestService.reAjaxFun(() => {
|
||||||
this.getModelProviders(params, callback);
|
this.getModelProviders(params, callback);
|
||||||
});
|
});
|
||||||
@@ -249,17 +246,15 @@ export default {
|
|||||||
.method('POST')
|
.method('POST')
|
||||||
.data(postData)
|
.data(postData)
|
||||||
.success((res) => {
|
.success((res) => {
|
||||||
console.log('新增模型供应器成功:', res);
|
|
||||||
RequestService.clearRequestTime();
|
RequestService.clearRequestTime();
|
||||||
// this.$message.success('新增模型供应器成功');
|
|
||||||
callback(res);
|
callback(res);
|
||||||
})
|
})
|
||||||
.fail((err) => {
|
.fail((err) => {
|
||||||
console.error('新增模型供应器失败:', err);
|
console.error('新增模型供应器失败:', err)
|
||||||
// this.$message.error(err.msg || '新增模型供应器失败');
|
this.$message.error(err.msg || '新增模型供应器失败')
|
||||||
// RequestService.reAjaxFun(() => {
|
RequestService.reAjaxFun(() => {
|
||||||
// this.addModelProvider(params, callback);
|
this.addModelProvider(params, callback);
|
||||||
// });
|
});
|
||||||
}).send();
|
}).send();
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -287,7 +282,7 @@ export default {
|
|||||||
callback(res);
|
callback(res);
|
||||||
})
|
})
|
||||||
.fail((err) => {
|
.fail((err) => {
|
||||||
console.error('更新模型供应器失败:', err);
|
this.$message.error(err.msg || '更新模型供应器失败')
|
||||||
RequestService.reAjaxFun(() => {
|
RequestService.reAjaxFun(() => {
|
||||||
this.updateModelProvider(params, callback);
|
this.updateModelProvider(params, callback);
|
||||||
});
|
});
|
||||||
@@ -304,9 +299,9 @@ export default {
|
|||||||
callback(res);
|
callback(res);
|
||||||
})
|
})
|
||||||
.fail((err) => {
|
.fail((err) => {
|
||||||
console.error('删除参数失败:', err)
|
this.$message.error(err.msg || '删除模型供应器失败')
|
||||||
RequestService.reAjaxFun(() => {
|
RequestService.reAjaxFun(() => {
|
||||||
this.deleteParam(ids, callback)
|
this.deleteModelProviderByIds(ids, callback)
|
||||||
})
|
})
|
||||||
}).send()
|
}).send()
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog :visible="visible" @update:visible="handleVisibleChange" width="57%" center custom-class="custom-dialog" :show-close="false" class="center-dialog">
|
<el-dialog :visible="visible" @update:visible="handleVisibleChange" width="57%" center custom-class="custom-dialog"
|
||||||
|
:show-close="false" class="center-dialog">
|
||||||
|
|
||||||
<div style="margin: 0 18px; text-align: left; padding: 10px; border-radius: 10px;">
|
<div style="margin: 0 18px; text-align: left; padding: 10px; border-radius: 10px;">
|
||||||
<div style="font-size: 30px; color: #3d4566; margin-top: -15px; margin-bottom: 20px; text-align: center;">
|
<div style="font-size: 30px; color: #3d4566; margin-top: -15px; margin-bottom: 20px; text-align: center;">
|
||||||
@@ -27,20 +28,24 @@
|
|||||||
<el-input v-model="form.name" placeholder="请输入供应器名称" class="custom-input-bg"></el-input>
|
<el-input v-model="form.name" placeholder="请输入供应器名称" class="custom-input-bg"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="排序" prop="sort" style="flex: 1;">
|
<el-form-item label="排序" prop="sort" style="flex: 1;">
|
||||||
<el-input-number v-model="form.sort" :min="0" controls-position="right" class="custom-input-bg" style="width: 100%;"></el-input-number>
|
<el-input-number v-model="form.sort" :min="0" controls-position="right" class="custom-input-bg"
|
||||||
|
style="width: 100%;"></el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="font-size: 20px; font-weight: bold; color: #3d4566; margin-bottom: 15px;">
|
<div style="font-size: 20px; font-weight: bold; color: #3d4566; margin-bottom: 15px;">
|
||||||
字段配置
|
字段配置
|
||||||
<div style="display: inline-block; float: right;">
|
<div style="display: inline-block; float: right;">
|
||||||
<el-button type="primary" @click="addField" size="small" style="background: #5bc98c; border: none;" :disabled="hasIncompleteFields">
|
<el-button type="primary" @click="addField" size="small" style="background: #5bc98c; border: none;"
|
||||||
|
:disabled="hasIncompleteFields">
|
||||||
添加
|
添加
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="primary" @click="toggleSelectAllFields" size="small" style="background: #5f70f3; border: none; margin-left: 10px;">
|
<el-button type="primary" @click="toggleSelectAllFields" size="small"
|
||||||
|
style="background: #5f70f3; border: none; margin-left: 10px;">
|
||||||
{{ isAllFieldsSelected ? '取消全选' : '全选' }}
|
{{ isAllFieldsSelected ? '取消全选' : '全选' }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="danger" @click="batchRemoveFields" size="small" style="background: red; border: none; margin-left: 10px;">
|
<el-button type="danger" @click="batchRemoveFields" size="small"
|
||||||
|
style="background: red; border: none; margin-left: 10px;">
|
||||||
批量删除
|
批量删除
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -135,9 +140,9 @@ export default {
|
|||||||
return {
|
return {
|
||||||
saving: false,
|
saving: false,
|
||||||
rules: {
|
rules: {
|
||||||
modelType: [{required: true, message: '请选择类别', trigger: 'change'}],
|
modelType: [{ required: true, message: '请选择类别', trigger: 'change' }],
|
||||||
providerCode: [{required: true, message: '请输入供应器编码', trigger: 'blur'}],
|
providerCode: [{ required: true, message: '请输入供应器编码', trigger: 'blur' }],
|
||||||
name: [{required: true, message: '请输入供应器名称', trigger: 'blur'}]
|
name: [{ required: true, message: '请输入供应器名称', trigger: 'blur' }]
|
||||||
},
|
},
|
||||||
isAllFieldsSelected: false,
|
isAllFieldsSelected: false,
|
||||||
tableKey: 0 // 用于强制表格重新渲染
|
tableKey: 0 // 用于强制表格重新渲染
|
||||||
@@ -419,11 +424,12 @@ export default {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-table th, .el-table td {
|
.el-table th,
|
||||||
|
.el-table td {
|
||||||
padding: 8px 0;
|
padding: 8px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-button.is-circle{
|
.el-button.is-circle {
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
Reference in New Issue
Block a user