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
@@ -47,6 +47,12 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T> implements Bas
* @param params 分页查询参数
* @param defaultOrderField 默认排序字段
* @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) {
// 分页参数
@@ -66,81 +72,34 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T> implements Bas
// 分页参数
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);
String order = (String) params.get(Constant.ORDER);
List<String> orderFields = new ArrayList<>();
// 处理排序字段
if (orderField instanceof String) {
orderFields.add((String) orderField);
} 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 (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 {
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.tags.Tag;
import lombok.AllArgsConstructor;
import xiaozhi.common.annotation.UpdateGroup;
import xiaozhi.common.page.PageData;
import xiaozhi.common.utils.Result;
import xiaozhi.common.validator.group.UpdateGroup;
import xiaozhi.modules.model.dto.ModelProviderDTO;
import xiaozhi.modules.model.service.ModelProviderService;
@@ -34,8 +34,8 @@ public class ModelProviderController {
@Operation(summary = "获取模型供应器列表")
@RequiresPermissions("sys:role:superAdmin")
public Result<PageData<ModelProviderDTO>> getListPage(ModelProviderDTO modelProviderDTO,
@RequestParam(required = true, defaultValue = "0") String page,
@RequestParam(required = true, defaultValue = "10") String limit) {
@RequestParam(required = true, defaultValue = "0") String page,
@RequestParam(required = true, defaultValue = "10") String limit) {
return new Result<PageData<ModelProviderDTO>>()
.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.NotNull;
import lombok.Data;
import xiaozhi.common.annotation.UpdateGroup;
import xiaozhi.common.validator.group.UpdateGroup;
@Data
@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, "asc");
IPage<ModelProviderEntity> pageParam = getPage(params);
IPage<ModelProviderEntity> pageParam = getPage(params, null, true);
QueryWrapper<ModelProviderEntity> wrapper = new QueryWrapper<ModelProviderEntity>();
+9 -14
View File
@@ -215,15 +215,12 @@ export default {
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('获取供应器列表失败');
this.$message.error(err.msg || '获取供应器列表失败');
RequestService.reAjaxFun(() => {
this.getModelProviders(params, callback);
});
@@ -249,17 +246,15 @@ export default {
.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);
// });
console.error('新增模型供应器失败:', err)
this.$message.error(err.msg || '新增模型供应器失败')
RequestService.reAjaxFun(() => {
this.addModelProvider(params, callback);
});
}).send();
},
@@ -287,7 +282,7 @@ export default {
callback(res);
})
.fail((err) => {
console.error('更新模型供应器失败:', err);
this.$message.error(err.msg || '更新模型供应器失败')
RequestService.reAjaxFun(() => {
this.updateModelProvider(params, callback);
});
@@ -304,9 +299,9 @@ export default {
callback(res);
})
.fail((err) => {
console.error('删除参数失败:', err)
this.$message.error(err.msg || '删除模型供应器失败')
RequestService.reAjaxFun(() => {
this.deleteParam(ids, callback)
this.deleteModelProviderByIds(ids, callback)
})
}).send()
},
@@ -1,5 +1,6 @@
<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="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-form-item>
<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>
</div>
<div style="font-size: 20px; font-weight: bold; color: #3d4566; margin-bottom: 15px;">
字段配置
<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 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 ? '取消全选' : '全选' }}
</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>
</div>
@@ -135,9 +140,9 @@ export default {
return {
saving: false,
rules: {
modelType: [{required: true, message: '请选择类别', trigger: 'change'}],
providerCode: [{required: true, message: '请输入供应器编码', trigger: 'blur'}],
name: [{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,
tableKey: 0 // 用于强制表格重新渲染
@@ -419,11 +424,12 @@ export default {
display: none;
}
.el-table th, .el-table td {
.el-table th,
.el-table td {
padding: 8px 0;
}
.el-button.is-circle{
.el-button.is-circle {
border-radius: 2px;
}
</style>