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:
commit
4030299f0e
@ -59,7 +59,7 @@ public class SysCodeGenTemplateSeedData : ISqlSugarEntitySeedData<SysCodeGenTemp
|
|||||||
""Type"": 1,
|
""Type"": 1,
|
||||||
""SysFlag"": 1,
|
""SysFlag"": 1,
|
||||||
""IsDefault"": true,
|
""IsDefault"": true,
|
||||||
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/{TableNameLower}List.vue"",
|
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/list.vue"",
|
||||||
""Describe"": ""(WEB)表格组件"",
|
""Describe"": ""(WEB)表格组件"",
|
||||||
""OrderNo"": 100,
|
""OrderNo"": 100,
|
||||||
""CreateTime"": ""1900-01-01 00:00:00"",
|
""CreateTime"": ""1900-01-01 00:00:00"",
|
||||||
@ -76,7 +76,7 @@ public class SysCodeGenTemplateSeedData : ISqlSugarEntitySeedData<SysCodeGenTemp
|
|||||||
""Type"": 1,
|
""Type"": 1,
|
||||||
""SysFlag"": 1,
|
""SysFlag"": 1,
|
||||||
""IsDefault"": true,
|
""IsDefault"": true,
|
||||||
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/editDialog.vue"",
|
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/edit.vue"",
|
||||||
""Describe"": ""(WEB)编辑对话框"",
|
""Describe"": ""(WEB)编辑对话框"",
|
||||||
""OrderNo"": 100,
|
""OrderNo"": 100,
|
||||||
""CreateTime"": ""1900-01-01 00:00:00"",
|
""CreateTime"": ""1900-01-01 00:00:00"",
|
||||||
|
|||||||
@ -82,7 +82,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[ApiDescriptionSettings(Name = "page", Description = "分页查询", Order = 1000), HttpPost]
|
[ApiDescriptionSettings(Name = "Page", Description = "分页查询", Order = 1000), HttpPost]
|
||||||
[DisplayName("分页查询@(@Model.BusName)")]
|
[DisplayName("分页查询@(@Model.BusName)")]
|
||||||
public async Task<SqlSugarPagedList<@(@Model.ClassName)Output>> Page(Page@(@Model.ClassName)Input input)
|
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>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[ApiDescriptionSettings(Name = "add", Description = "增加@(@Model.BusName)", Order = 990), HttpPost]
|
[ApiDescriptionSettings(Name = "Add", Description = "增加@(@Model.BusName)", Order = 990), HttpPost]
|
||||||
[DisplayName("增加@(@Model.BusName)")]
|
[DisplayName("增加@(@Model.BusName)")]
|
||||||
public async Task<object> Add(Add@(@Model.ClassName)Input input)
|
public async Task<object> Add(Add@(@Model.ClassName)Input input)
|
||||||
{
|
{
|
||||||
@ -120,7 +120,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[ApiDescriptionSettings(Name = "delete", Description = "删除(@Model.BusName)", Order = 980), HttpPost]
|
[ApiDescriptionSettings(Name = "Delete", Description = "删除(@Model.BusName)", Order = 980), HttpPost]
|
||||||
[DisplayName("删除@(@Model.BusName)")]
|
[DisplayName("删除@(@Model.BusName)")]
|
||||||
public async Task Delete(Delete@(@Model.ClassName)Input input)
|
public async Task Delete(Delete@(@Model.ClassName)Input input)
|
||||||
{
|
{
|
||||||
@ -138,7 +138,7 @@ if (@column.ColumnKey == "True"){
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[ApiDescriptionSettings(Name = "update", Description = "更新@(@Model.BusName)", Order = 970), HttpPost]
|
[ApiDescriptionSettings(Name = "Update", Description = "更新@(@Model.BusName)", Order = 970), HttpPost]
|
||||||
[DisplayName("更新@(@Model.BusName)")]
|
[DisplayName("更新@(@Model.BusName)")]
|
||||||
public async Task Update(Update@(@Model.ClassName)Input input)
|
public async Task Update(Update@(@Model.ClassName)Input input)
|
||||||
{
|
{
|
||||||
@ -160,7 +160,7 @@ if (@column.ColumnKey == "True"){
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[ApiDescriptionSettings(Name = "detail", Description = "获取@(@Model.BusName)", Order = 960), HttpGet]
|
[ApiDescriptionSettings(Name = "Detail", Description = "获取@(@Model.BusName)", Order = 960), HttpGet]
|
||||||
[DisplayName("获取@(@Model.BusName)")]
|
[DisplayName("获取@(@Model.BusName)")]
|
||||||
public async Task<@(@Model.ClassName)> Detail([FromQuery] QueryById@(@Model.ClassName)Input input)
|
public async Task<@(@Model.ClassName)> Detail([FromQuery] QueryById@(@Model.ClassName)Input input)
|
||||||
{
|
{
|
||||||
@ -170,7 +170,7 @@ if (@column.ColumnKey == "True"){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*HJ:不要,有分页了,列表多余的
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取@(@Model.BusName)列表
|
/// 获取@(@Model.BusName)列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -182,7 +182,9 @@ if (@column.ColumnKey == "True"){
|
|||||||
{
|
{
|
||||||
return await @(@Model.ClassName)Mid.GetQuery(_@(@Model.LowerClassName)Rep, input).OrderBuilder(input).ToListAsync();
|
return await @(@Model.ClassName)Mid.GetQuery(_@(@Model.LowerClassName)Rep, input).OrderBuilder(input).ToListAsync();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*HJ:不要这应该在视图里,或者用ReZero里用
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取@(@Model.BusName)
|
/// 获取@(@Model.BusName)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -216,7 +218,9 @@ if (@column.ColumnKey == "True"){
|
|||||||
});
|
});
|
||||||
return await querystats.ToListAsync();
|
return await querystats.ToListAsync();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*HJ:不要危险度大,容易SQL注入,且不符合规范
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据输入参数获取@(@Model.BusName)统计
|
/// 根据输入参数获取@(@Model.BusName)统计
|
||||||
/// 支持双模式聚合配置:
|
/// 支持双模式聚合配置:
|
||||||
@ -299,6 +303,8 @@ if (@column.ColumnKey == "True"){
|
|||||||
@:return await query.ToListAsync();
|
@:return await query.ToListAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
@foreach (var column in Model.TableField){
|
@foreach (var column in Model.TableField){
|
||||||
if(@column.EffectType == "ForeignKey" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
|
if(@column.EffectType == "ForeignKey" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
|
||||||
@ -328,7 +334,7 @@ if(@column.EffectType == "Upload"){
|
|||||||
@:/// </summary>
|
@:/// </summary>
|
||||||
@:/// <param name="file"></param>
|
@:/// <param name="file"></param>
|
||||||
@:/// <returns></returns>
|
@:/// <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)")]
|
@:[DisplayName("上传@(@column.ColumnComment)")]
|
||||||
@:public async Task<SysFile> Upload@(@column.PropertyName)([Required] IFormFile file)
|
@:public async Task<SysFile> Upload@(@column.PropertyName)([Required] IFormFile file)
|
||||||
@:{
|
@:{
|
||||||
@ -346,11 +352,66 @@ if(@column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("@(@co
|
|||||||
@:/// </summary>
|
@:/// </summary>
|
||||||
@:/// <param name="input"></param>
|
@:/// <param name="input"></param>
|
||||||
@:/// <returns></returns>
|
@:/// <returns></returns>
|
||||||
@:[ApiDescriptionSettings(Name = "GetTreeList", Description = "获取@(@Model.BusName)树列表", Order = 960), HttpPost]
|
@:[ApiDescriptionSettings(Name = "Tree", Description = "获取@(@Model.BusName)树列表", Order = 960), HttpPost]
|
||||||
@:[DisplayName("获取@(@Model.BusName)树列表")]
|
@:[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);
|
||||||
|
|
||||||
@:}
|
@:}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -206,7 +206,7 @@ import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
|
|||||||
import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook';
|
import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook';
|
||||||
import { Local } from '/@@/utils/storage';
|
import { Local } from '/@@/utils/storage';
|
||||||
import { auth } from '/@@/utils/authFunction';
|
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';
|
import ModifyRecord from '/@@/components/table/modifyRecord.vue';
|
||||||
|
|
||||||
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
|
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
|
||||||
|
|||||||
@ -52,7 +52,7 @@
|
|||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb5" v-if="state.showAdvanceQueryUI">
|
<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-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-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-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</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-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-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-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-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -210,7 +210,7 @@ import { useUserInfo } from '/@@/stores/userInfo';
|
|||||||
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
|
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
|
||||||
import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook';
|
import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook';
|
||||||
import { Local } from '/@@/utils/storage';
|
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';
|
import ModifyRecord from '/@@/components/table/modifyRecord.vue';
|
||||||
|
|
||||||
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
|
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
|
||||||
@ -368,7 +368,7 @@ onMounted(() => {
|
|||||||
const handleQueryApi = async () => {
|
const handleQueryApi = async () => {
|
||||||
const params = Object.assign(state.queryParams);
|
const params = Object.assign(state.queryParams);
|
||||||
@if (@Model.IsApiService) {
|
@if (@Model.IsApiService) {
|
||||||
@:return getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)GetTreeListPost(params);
|
@:return getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)TreePost(params);
|
||||||
} else {
|
} else {
|
||||||
@:return treelist@(@Model.ClassName)(params);
|
@:return treelist@(@Model.ClassName)(params);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -417,7 +417,7 @@ if(@column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("defin
|
|||||||
@{definedObjects.Add("define_get@(@column.FkEntityName)TreeData", 1);}
|
@{definedObjects.Add("define_get@(@column.FkEntityName)TreeData", 1);}
|
||||||
@:const @LowerFirstLetter(@column.FkEntityName)TreeData = ref<any>([]);
|
@:const @LowerFirstLetter(@column.FkEntityName)TreeData = ref<any>([]);
|
||||||
@:const get@(@column.FkEntityName)TreeData = async () => {
|
@: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 ?? [];
|
@:@LowerFirstLetter(@column.FkEntityName)TreeData.value = list.data.result ?? [];
|
||||||
@:};
|
@:};
|
||||||
@:get@(@column.FkEntityName)TreeData();
|
@:get@(@column.FkEntityName)TreeData();
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup name="@(@Model.LowerClassName)">
|
<script lang="ts" setup name="@(@Model.LowerClassName)">
|
||||||
import { onMounted, reactive, ref } from 'vue';
|
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 indexListRef = ref<InstanceType<typeof IndexList>>();
|
||||||
// 变量初始化
|
// 变量初始化
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user