Merge pull request '1修改模板故障 2统一规范命名 3屏蔽服务接口,规范服务命名' (#380) from HJ20250722 into v2

Reviewed-on: https://code.adminnet.top/Admin.NET/Admin.NET.Pro/pulls/380
This commit is contained in:
zuohuaijun 2025-07-23 01:11:10 +08:00
commit 4030299f0e
6 changed files with 81 additions and 20 deletions

View File

@ -59,7 +59,7 @@ public class SysCodeGenTemplateSeedData : ISqlSugarEntitySeedData<SysCodeGenTemp
""Type"": 1,
""SysFlag"": 1,
""IsDefault"": true,
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/{TableNameLower}List.vue"",
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/list.vue"",
""Describe"": ""(WEB)"",
""OrderNo"": 100,
""CreateTime"": ""1900-01-01 00:00:00"",
@ -76,7 +76,7 @@ public class SysCodeGenTemplateSeedData : ISqlSugarEntitySeedData<SysCodeGenTemp
""Type"": 1,
""SysFlag"": 1,
""IsDefault"": true,
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/editDialog.vue"",
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/edit.vue"",
""Describe"": ""(WEB)"",
""OrderNo"": 100,
""CreateTime"": ""1900-01-01 00:00:00"",

View File

@ -82,7 +82,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "page", Description = "分页查询", Order = 1000), HttpPost]
[ApiDescriptionSettings(Name = "Page", Description = "分页查询", Order = 1000), HttpPost]
[DisplayName("分页查询@(@Model.BusName)")]
public async Task<SqlSugarPagedList<@(@Model.ClassName)Output>> Page(Page@(@Model.ClassName)Input input)
{
@ -98,7 +98,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "add", Description = "增加@(@Model.BusName)", Order = 990), HttpPost]
[ApiDescriptionSettings(Name = "Add", Description = "增加@(@Model.BusName)", Order = 990), HttpPost]
[DisplayName("增加@(@Model.BusName)")]
public async Task<object> Add(Add@(@Model.ClassName)Input input)
{
@ -120,7 +120,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "delete", Description = "删除(@Model.BusName)", Order = 980), HttpPost]
[ApiDescriptionSettings(Name = "Delete", Description = "删除(@Model.BusName)", Order = 980), HttpPost]
[DisplayName("删除@(@Model.BusName)")]
public async Task Delete(Delete@(@Model.ClassName)Input input)
{
@ -138,7 +138,7 @@ if (@column.ColumnKey == "True"){
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "update", Description = "更新@(@Model.BusName)", Order = 970), HttpPost]
[ApiDescriptionSettings(Name = "Update", Description = "更新@(@Model.BusName)", Order = 970), HttpPost]
[DisplayName("更新@(@Model.BusName)")]
public async Task Update(Update@(@Model.ClassName)Input input)
{
@ -160,7 +160,7 @@ if (@column.ColumnKey == "True"){
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "detail", Description = "获取@(@Model.BusName)", Order = 960), HttpGet]
[ApiDescriptionSettings(Name = "Detail", Description = "获取@(@Model.BusName)", Order = 960), HttpGet]
[DisplayName("获取@(@Model.BusName)")]
public async Task<@(@Model.ClassName)> Detail([FromQuery] QueryById@(@Model.ClassName)Input input)
{
@ -170,7 +170,7 @@ if (@column.ColumnKey == "True"){
}
}
}
/*HJ:不要,有分页了,列表多余的
/// <summary>
/// 获取@(@Model.BusName)列表
/// </summary>
@ -182,7 +182,9 @@ if (@column.ColumnKey == "True"){
{
return await @(@Model.ClassName)Mid.GetQuery(_@(@Model.LowerClassName)Rep, input).OrderBuilder(input).ToListAsync();
}
*/
/*HJ:不要这应该在视图里,或者用ReZero里用
/// <summary>
/// 获取@(@Model.BusName)
/// </summary>
@ -216,7 +218,9 @@ if (@column.ColumnKey == "True"){
});
return await querystats.ToListAsync();
}
*/
/*HJ:不要危险度大,容易SQL注入,且不符合规范
/// <summary>
/// 根据输入参数获取@(@Model.BusName)统计
/// 支持双模式聚合配置:
@ -300,6 +304,8 @@ if (@column.ColumnKey == "True"){
}
}
*/
@foreach (var column in Model.TableField){
if(@column.EffectType == "ForeignKey" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
@:/// <summary>
@ -328,7 +334,7 @@ if(@column.EffectType == "Upload"){
@:/// </summary>
@:/// <param name="file"></param>
@:/// <returns></returns>
@:[ApiDescriptionSettings(Name = "upload@(@column.PropertyName)", Description = "上传@(@column.ColumnComment)", Order = 930), HttpPost]
@:[ApiDescriptionSettings(Name = "Upload@(@column.PropertyName)", Description = "上传@(@column.ColumnComment)", Order = 930), HttpPost]
@:[DisplayName("上传@(@column.ColumnComment)")]
@:public async Task<SysFile> Upload@(@column.PropertyName)([Required] IFormFile file)
@:{
@ -346,11 +352,66 @@ if(@column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("@(@co
@:/// </summary>
@:/// <param name="input"></param>
@:/// <returns></returns>
@:[ApiDescriptionSettings(Name = "GetTreeList", Description = "获取@(@Model.BusName)树列表", Order = 960), HttpPost]
@:[ApiDescriptionSettings(Name = "Tree", Description = "获取@(@Model.BusName)树列表", Order = 960), HttpPost]
@:[DisplayName("获取@(@Model.BusName)树列表")]
@:public async Task<dynamic> GetTreeList()
@:public async Task<dynamic> Tree(Page@(@Model.ClassName)Input input)
@:{
@:return await _@(@Model.LowerClassName)Rep.AsQueryable().OrderBy(u => new { u.OrderNo, u.Id }).ToTreeAsync(u => u.Children, u => u.Pid, 0, u => u.Id);
@:// 有筛选条件时返回list列表防止构造不出树
@:var isSearch=false;
foreach (var columnTree in Model.TableField){
if (@columnTree.QueryWhether == "Y"){
if (@columnTree.NetType?.TrimEnd('?') == "string"){
@:if(!string.IsNullOrWhiteSpace(input.@columnTree.PropertyName))isSearch=true;
}else if((@columnTree.NetType?.TrimEnd('?') == "int" || @columnTree.NetType?.TrimEnd('?') == "long")){
@:if(input.@columnTree.PropertyName>0)isSearch=true;
}else if((@columnTree.NetType?.TrimEnd('?') == "DateTime" && @columnTree.QueryType == "~")){
@:if(input.@(@columnTree.PropertyName)Range != null)isSearch=true;
} }}
@:if (isSearch||!string.IsNullOrEmpty(input.SearchKey?.Trim()))
@:{
@:return await _@(@Model.LowerClassName)Rep.AsQueryable()
@{string conditionFlag = "";}
@if (haveLikeCdt) {
@:.WhereIF(!string.IsNullOrEmpty(input.SearchKey?.Trim()), u =>
@foreach (var columnTree in Model.TableField){
if (@columnTree.QueryWhether == "Y" && columnTree.QueryType == "like"){
@:@(conditionFlag)u.@(@columnTree.PropertyName).Contains(input.SearchKey.Trim())
conditionFlag="|| ";
}
}
@:)
}
foreach (var columnTree in Model.TableField){
if (@columnTree.QueryWhether == "Y"){if (@columnTree.NetType?.TrimEnd('?') == "string"){if(@columnTree.QueryType == "like"){
@:.WhereIF(!string.IsNullOrWhiteSpace(input.@columnTree.PropertyName), u => u.@(@columnTree.PropertyName).Contains(input.@(@columnTree.PropertyName).Trim()))
}else{
@:.WhereIF(!string.IsNullOrWhiteSpace(input.@columnTree.PropertyName), u => u.@(@columnTree.PropertyName) @columnTree.QueryType input.@(@columnTree.PropertyName))
}}else if(@columnTree.NetType?.TrimEnd('?') == "int" || @columnTree.NetType?.TrimEnd('?') == "long"){
@:.WhereIF(input.@columnTree.PropertyName>0, u => (int)u.@(@columnTree.PropertyName) @columnTree.QueryType input.@(@columnTree.PropertyName))
}else if(@columnTree.NetType?.TrimEnd('?') == "DateTime" && @columnTree.QueryType == "~"){
@:.WhereIF(input.@(@columnTree.PropertyName)Range != null && input.@(@columnTree.PropertyName)Range.Length == 2, u => u.@(@columnTree.PropertyName) >= input.@(@columnTree.PropertyName)Range[0] && u.@(@columnTree.PropertyName) <= input.@(@columnTree.PropertyName)Range[1])
}else if(@columnTree.NetType?.TrimEnd('?').EndsWith("Enum") == true) {
@:.WhereIF(input.@(@columnTree.PropertyName).HasValue, u => u.@(@columnTree.PropertyName) @columnTree.QueryType input.@(@columnTree.PropertyName))
}}}
//HJ @:.OrderBy(u => u.OrderNo)
@:.OrderByDescending(u => u.Id)
@:.Distinct().ToListAsync();
@:}
@:// 无筛选条件时返回树列表
@:return await _@(@Model.LowerClassName)Rep.AsQueryable()
//HJ @:.OrderBy(u => u.OrderNo)
@:.OrderByDescending(u => u.Id)
@:.ToTreeAsync(u => u.Children, u => u.Pid, 0, u => u.Id);
@:}
}
}

View File

@ -206,7 +206,7 @@ import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook';
import { Local } from '/@@/utils/storage';
import { auth } from '/@@/utils/authFunction';
import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/editDialog.vue';
import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/edit.vue';
import ModifyRecord from '/@@/components/table/modifyRecord.vue';
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){

View File

@ -52,7 +52,7 @@
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb5" v-if="state.showAdvanceQueryUI">
<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
<el-select v-model="state.queryParams.@(@column.LowerPropertyName)" filterable placeholder="请选择@(@column.ColumnComment)" clearable @@keyup.enter.native="handleQuery(true)" >
<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.code" :label="`${item.name||''} [${item.code}] ${item.value}`" />
<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.value" :label="`${item.label} [${item.code}] ${item.value}`" />
</el-select>
</el-form-item>
</el-col>
@ -60,7 +60,7 @@
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb5" v-if="state.showAdvanceQueryUI">
<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
<el-select v-model="state.queryParams.@(@column.LowerPropertyName)" filterable placeholder="请选择@(@column.ColumnComment)" clearable @@keyup.enter.native="handleQuery(true)" >
<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.value" :label="`${item.name} [${item.code}] ${item.value}`" />
<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.value" :label="`${item.label} [${item.code}] ${item.value}`" />
</el-select>
</el-form-item>
</el-col>
@ -210,7 +210,7 @@ import { useUserInfo } from '/@@/stores/userInfo';
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook';
import { Local } from '/@@/utils/storage';
import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/editDialog.vue';
import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/edit.vue';
import ModifyRecord from '/@@/components/table/modifyRecord.vue';
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
@ -368,7 +368,7 @@ onMounted(() => {
const handleQueryApi = async () => {
const params = Object.assign(state.queryParams);
@if (@Model.IsApiService) {
@:return getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)GetTreeListPost(params);
@:return getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)TreePost(params);
} else {
@:return treelist@(@Model.ClassName)(params);
}

View File

@ -417,7 +417,7 @@ if(@column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("defin
@{definedObjects.Add("define_get@(@column.FkEntityName)TreeData", 1);}
@:const @LowerFirstLetter(@column.FkEntityName)TreeData = ref<any>([]);
@:const get@(@column.FkEntityName)TreeData = async () => {
@:let list = await getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)GetTreeListPost();
@:let list = await getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)TreePost();
@:@LowerFirstLetter(@column.FkEntityName)TreeData.value = list.data.result ?? [];
@:};
@:get@(@column.FkEntityName)TreeData();

View File

@ -25,7 +25,7 @@
<script lang="ts" setup name="@(@Model.LowerClassName)">
import { onMounted, reactive, ref } from 'vue';
import IndexList from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/@(@Model.LowerClassName)List.vue';
import IndexList from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/list.vue';
const indexListRef = ref<InstanceType<typeof IndexList>>();
// 变量初始化
const state = reactive({