update:优化已存在的Group注解

This commit is contained in:
hrz
2025-05-17 23:54:25 +08:00
parent 29216768e1
commit 624b1cce74
9 changed files with 52 additions and 118 deletions
@@ -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));
} }
} }
@@ -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 = "模型供应器/商")
@@ -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>();
+9 -14
View File
@@ -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>