Эх сурвалжийг харах

!1873 修复 获取用户拥有按钮权限集合 返回多个 null
Merge pull request !1873 from 夜鹰/dev

zuohuaijun 8 сар өмнө
parent
commit
c760002bbc

+ 22 - 22
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -14,15 +14,15 @@
 
 
   <ItemGroup>
   <ItemGroup>
     <PackageReference Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="4.0.0" />
     <PackageReference Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="4.0.0" />
-    <PackageReference Include="AlipaySDKNet.Standard" Version="4.9.627" />
+    <PackageReference Include="AlipaySDKNet.Standard" Version="4.9.712" />
     <PackageReference Include="AngleSharp" Version="1.3.0" />
     <PackageReference Include="AngleSharp" Version="1.3.0" />
     <PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
     <PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
-    <PackageReference Include="Elastic.Clients.Elasticsearch" Version="9.0.7" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.105" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.105" />
-    <PackageReference Include="Furion.Pure" Version="4.9.7.105" />
-	<PackageReference Include="Hardware.Info" Version="101.0.1.1" />
+    <PackageReference Include="Elastic.Clients.Elasticsearch" Version="9.1.0" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.108" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.108" />
+    <PackageReference Include="Furion.Pure" Version="4.9.7.108" />
+    <PackageReference Include="Hardware.Info" Version="101.0.1.1" />
     <PackageReference Include="Hashids.net" Version="1.7.0" />
     <PackageReference Include="Hashids.net" Version="1.7.0" />
     <PackageReference Include="IPTools.China" Version="1.6.0" />
     <PackageReference Include="IPTools.China" Version="1.6.0" />
     <PackageReference Include="IPTools.International" Version="1.6.0" />
     <PackageReference Include="IPTools.International" Version="1.6.0" />
@@ -33,45 +33,45 @@
     <PackageReference Include="MailKit" Version="4.13.0" />
     <PackageReference Include="MailKit" Version="4.13.0" />
     <PackageReference Include="MiniExcel" Version="1.41.3" />
     <PackageReference Include="MiniExcel" Version="1.41.3" />
     <PackageReference Include="MiniWord" Version="0.9.2" />
     <PackageReference Include="MiniWord" Version="0.9.2" />
-    <PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
+    <PackageReference Include="NewLife.Redis" Version="6.3.2025.801" />
     <PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="4.0.0" />
     <PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="4.0.0" />
-	<PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.2.0" />
+    <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.2.0" />
     <PackageReference Include="QRCoder" Version="1.6.0" />
     <PackageReference Include="QRCoder" Version="1.6.0" />
     <PackageReference Include="RabbitMQ.Client" Version="7.1.2" />
     <PackageReference Include="RabbitMQ.Client" Version="7.1.2" />
     <PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.5" />
     <PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.5" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.11.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.11.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.13.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.13.0" />
-    <PackageReference Include="SqlSugar.MongoDbCore" Version="5.1.4.232" />
-    <PackageReference Include="SqlSugarCore" Version="5.1.4.198" />
+    <PackageReference Include="SqlSugar.MongoDbCore" Version="5.1.4.247" />
+    <PackageReference Include="SqlSugarCore" Version="5.1.4.199" />
     <PackageReference Include="SSH.NET" Version="2025.0.0" />
     <PackageReference Include="SSH.NET" Version="2025.0.0" />
-    <PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.6" />
+    <PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.7" />
     <PackageReference Include="System.Net.Http" Version="4.3.4" />
     <PackageReference Include="System.Net.Http" Version="4.3.4" />
     <PackageReference Include="System.Private.Uri" Version="4.3.2" />
     <PackageReference Include="System.Private.Uri" Version="4.3.2" />
     <PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1273" />
     <PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1273" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
-    <PackageReference Include="BouncyCastle.Cryptography" Version="2.6.1" Aliases="BouncyCastleV2" />
+    <PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" Aliases="BouncyCastleV2" />
   </ItemGroup>
   </ItemGroup>
 
 
   <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
   <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
     <PackageReference Include="AspNet.Security.OAuth.Gitee" Version="8.3.0" />
     <PackageReference Include="AspNet.Security.OAuth.Gitee" Version="8.3.0" />
     <PackageReference Include="AspNet.Security.OAuth.Weixin" Version="8.3.0" />
     <PackageReference Include="AspNet.Security.OAuth.Weixin" Version="8.3.0" />
-    <PackageReference Include="Lazy.Captcha.Core" Version="2.2.0" />
-    <PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.11" />
-    <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="8.0.11" />
-    <PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="8.0.11" />
-	<PackageReference Include="Microsoft.PowerShell.SDK" Version="7.4.11" />  
+    <PackageReference Include="Lazy.Captcha.Core" Version="2.2.2" />
+    <PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.19" />
+    <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="8.0.19" />
+    <PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="8.0.19" />
+    <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.4.11" />
   </ItemGroup>
   </ItemGroup>
 
 
   <ItemGroup Condition=" '$(TargetFramework)' == 'net9.0' ">
   <ItemGroup Condition=" '$(TargetFramework)' == 'net9.0' ">
     <PackageReference Include="AspNet.Security.OAuth.Gitee" Version="9.4.0" />
     <PackageReference Include="AspNet.Security.OAuth.Gitee" Version="9.4.0" />
     <PackageReference Include="AspNet.Security.OAuth.Weixin" Version="9.4.0" />
     <PackageReference Include="AspNet.Security.OAuth.Weixin" Version="9.4.0" />
     <PackageReference Include="Lazy.Captcha.Core" Version="2.1.0" />
     <PackageReference Include="Lazy.Captcha.Core" Version="2.1.0" />
-    <PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="9.0.7" />
-    <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="9.0.7" />
-    <PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="9.0.7" />
-	<PackageReference Include="Microsoft.PowerShell.SDK" Version="7.5.2" />
-	<PackageReference Include="XiHan.Framework.Utils" Version="0.11.6" />
+    <PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="9.0.8" />
+    <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="9.0.8" />
+    <PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="9.0.8" />
+    <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.5.2" />
+    <PackageReference Include="XiHan.Framework.Utils" Version="0.11.7" />
   </ItemGroup>
   </ItemGroup>
 
 
 </Project>
 </Project>

+ 3 - 2
Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs

@@ -241,9 +241,10 @@ public class SysMenuService : IDynamicApiController, ITransient
 
 
         var menuIdList = _userManager.SuperAdmin || _userManager.SysAdmin ? new() : await GetMenuIdList();
         var menuIdList = _userManager.SuperAdmin || _userManager.SysAdmin ? new() : await GetMenuIdList();
 
 
-        permissions = await _sysMenuRep.AsQueryable().Where(u => u.Type == MenuTypeEnum.Btn)
-            .WhereIF(menuIdList.Count > 0, u => menuIdList.Contains(u.Id))
+        permissions = await _sysMenuRep.AsQueryable()
             .InnerJoinIF<SysTenantMenu>(!_userManager.SuperAdmin, (u, t) => t.TenantId == _userManager.TenantId && u.Id == t.MenuId)
             .InnerJoinIF<SysTenantMenu>(!_userManager.SuperAdmin, (u, t) => t.TenantId == _userManager.TenantId && u.Id == t.MenuId)
+            .Where(u => u.Type == MenuTypeEnum.Btn)
+            .WhereIF(menuIdList.Count > 0, u => menuIdList.Contains(u.Id))
             .Select(u => u.Permission).ToListAsync();
             .Select(u => u.Permission).ToListAsync();
 
 
         _sysCacheService.Set(CacheConst.KeyUserButton + userId, permissions, TimeSpan.FromDays(7));
         _sysCacheService.Set(CacheConst.KeyUserButton + userId, permissions, TimeSpan.FromDays(7));

+ 22 - 22
Admin.NET/Admin.NET.Test/Admin.NET.Test.csproj

@@ -1,26 +1,26 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
-    <PropertyGroup>
-        <TargetFrameworks>net8.0;net9.0</TargetFrameworks>
-        <NoWarn>1701;1702;1591;8632</NoWarn>
-        <DocumentationFile></DocumentationFile>
-        <ImplicitUsings>enable</ImplicitUsings>
-        <PreserveCompilationContext>true</PreserveCompilationContext>
-        <Nullable>disable</Nullable>
-        <GenerateDocumentationFile>True</GenerateDocumentationFile>
-        <Copyright>Admin.NET</Copyright>
-        <Description>Admin.NET 通用权限开发平台</Description>
-    </PropertyGroup>
+  <PropertyGroup>
+    <TargetFrameworks>net8.0;net9.0</TargetFrameworks>
+    <NoWarn>1701;1702;1591;8632</NoWarn>
+    <DocumentationFile></DocumentationFile>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <PreserveCompilationContext>true</PreserveCompilationContext>
+    <Nullable>disable</Nullable>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+    <Copyright>Admin.NET</Copyright>
+    <Description>Admin.NET 通用权限开发平台</Description>
+  </PropertyGroup>
 
 
-    <ItemGroup>
-      <PackageReference Include="Furion.Xunit" Version="4.9.7.105" />
-      <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
-      <PackageReference Include="Selenium.Support" Version="4.34.0" />
-      <PackageReference Include="Selenium.WebDriver" Version="4.34.0" />
-      <PackageReference Include="Selenium.WebDriver.MSEdgeDriver" Version="138.0.3351.95" />
-      <PackageReference Include="xunit.assert" Version="2.9.3" />
-    </ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="Furion.Xunit" Version="4.9.7.108" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
+    <PackageReference Include="Selenium.Support" Version="4.34.0" />
+    <PackageReference Include="Selenium.WebDriver" Version="4.34.0" />
+    <PackageReference Include="Selenium.WebDriver.MSEdgeDriver" Version="138.0.3351.121" />
+    <PackageReference Include="xunit.assert" Version="2.9.3" />
+  </ItemGroup>
 
 
-    <ItemGroup>
-        <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
-    </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
+  </ItemGroup>
 </Project>
 </Project>

+ 1 - 1
Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj

@@ -11,7 +11,7 @@
 
 
   <ItemGroup>
   <ItemGroup>
     <PackageReference Include="IGeekFan.AspNetCore.Knife4jUI" Version="0.0.16" />
     <PackageReference Include="IGeekFan.AspNetCore.Knife4jUI" Version="0.0.16" />
-    <PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.7" />
+    <PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.8" />
   </ItemGroup>
   </ItemGroup>
 
 
   <ItemGroup>
   <ItemGroup>

+ 1 - 1
Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj

@@ -53,7 +53,7 @@
       <CopyToOutputDirectory>Never</CopyToOutputDirectory>
       <CopyToOutputDirectory>Never</CopyToOutputDirectory>
     </EmbeddedResource>
     </EmbeddedResource>
   </ItemGroup>
   </ItemGroup>
-	
+
   <ItemGroup>
   <ItemGroup>
     <Content Update="wwwroot\upload\logo.png">
     <Content Update="wwwroot\upload\logo.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

+ 1 - 1
Admin.NET/Plugins/Admin.NET.Plugin.ApprovalFlow/Admin.NET.Plugin.ApprovalFlow.csproj

@@ -22,5 +22,5 @@
   <ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\Admin.NET.Core\Admin.NET.Core.csproj" />
     <ProjectReference Include="..\..\Admin.NET.Core\Admin.NET.Core.csproj" />
   </ItemGroup>
   </ItemGroup>
-	
+
 </Project>
 </Project>

+ 1 - 1
Admin.NET/Plugins/Admin.NET.Plugin.ReZero/Admin.NET.Plugin.ReZero.csproj

@@ -26,7 +26,7 @@
   <ItemGroup>
   <ItemGroup>
     <PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
     <PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
     <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.14.0" />
     <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.14.0" />
-    <PackageReference Include="Rezero.Api" Version="1.8.24" />
+    <PackageReference Include="Rezero.Api" Version="1.8.25" />
   </ItemGroup>
   </ItemGroup>
 
 
   <ItemGroup>
   <ItemGroup>

+ 136 - 118
Web/src/components/table/search.vue

@@ -1,106 +1,112 @@
 <template>
 <template>
-	<div class="table-search-container" v-if="props.search.length > 0">
-		<el-form ref="tableSearchRef" :model="state.innerModelValue" label-width="100px" class="table-form">
-			<el-row :gutter="20">
-				<!-- <el-col :xs="12" :sm="8" :md="8" :lg="6" :xl="4" class="mb20"></el-col> -->
-				<el-col :xs="12" :sm="5" :md="5" :lg="6" :xl="4" v-for="(val, key) in search" :key="key" v-show="key < 3 || state.isToggle">
-					<template v-if="val.type">
-						<el-form-item
-							label-width="auto"
-							:label="val.label"
-							:prop="val.prop"
-							:rules="[{ required: val.required, message: `${val.label}不能为空`, trigger: val.type === 'input' ? 'blur' : 'change' }]"
-						>
-							<el-input
-								v-model="state.innerModelValue[val.prop]"
-								v-bind="val.comProps"
-								:placeholder="val.placeholder"
-								:clearable="!val.required"
-								v-if="val.type === 'input'"
-								@keyup.enter="onSearch(tableSearchRef)"
-								@change="val.change"
-								class="w100"
-							/>
-							<el-date-picker
-								v-model="state.innerModelValue[val.prop]"
-								v-bind="val.comProps"
-								type="date"
-								:placeholder="val.placeholder"
-								:clearable="!val.required"
-								v-else-if="val.type === 'date'"
-								@change="val.change"
-								class="w100"
-							/>
-							<el-date-picker
-								v-model="state.innerModelValue[val.prop]"
-								v-bind="val.comProps"
-								type="monthrange"
-								value-format="YYYY/MM/DD"
-								:placeholder="val.placeholder"
-								:clearable="!val.required"
-								v-else-if="val.type === 'monthrange'"
-								@change="val.change"
-								class="w100"
-							/>
-							<el-date-picker
-								v-model="state.innerModelValue[val.prop]"
-								v-bind="val.comProps"
-								type="daterange"
-								value-format="YYYY/MM/DD"
-								range-separator="至"
-								start-placeholder="开始日期"
-								end-placeholder="结束日期"
-								:clearable="!val.required"
-								:shortcuts="shortcuts"
-								:default-time="defaultTime"
-								v-else-if="val.type === 'daterange'"
-								@change="val.change"
-								class="w100"
-							/>
-							<el-select
-								v-model="state.innerModelValue[val.prop]"
-								v-bind="val.comProps"
-								:clearable="!val.required"
-								:placeholder="val.placeholder"
-								v-else-if="val.type === 'select'"
-								@change="val.change"
-								class="w100"
-							>
-								<el-option v-for="item in getSelectOptions(val)" :key="item.value" :label="item.label" :value="item.value" />
-							</el-select>
-							<el-cascader
-								v-else-if="val.type === 'cascader' && val.cascaderData"
-								:options="val.cascaderData"
-								:clearable="!val.required"
-								filterable
-								:props="val.cascaderProps ? val.cascaderProps : state.cascaderProps"
-								:placeholder="val.placeholder"
-								@change="val.change"
-								class="w100"
-								v-bind="val.comProps"
-								v-model="state.innerModelValue[val.prop]"
-							>
-							</el-cascader>
-						</el-form-item>
-					</template>
-				</el-col>
-				<el-col :xs="12" :sm="9" :md="9" :lg="6" :xl="4">
-					<el-form-item class="table-form-btn" label-width="auto">
-						<div>
-							<!-- 使用el-button-group会导致具有type属性的按钮的右边框无法显示 -->
-							<!-- <el-button-group> -->
-							<el-button plain type="primary" icon="ele-Search" @click="onSearch(tableSearchRef)"> 查询 </el-button>
-							<el-button icon="ele-Refresh" @click="onReset(tableSearchRef)" style="margin-left: 12px"> 重置 </el-button>
-							<!-- </el-button-group> -->
-						</div>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-divider style="margin-top: 5px" v-if="search.length > 3">
-				<el-button :icon="state.isToggle ? 'ele-ArrowUpBold' : 'ele-ArrowDownBold'" class="divider-btn" @click="state.isToggle = !state.isToggle"> </el-button>
-			</el-divider>
-		</el-form>
-	</div>
+	<div style="display: flex;">
+        <!-- <div class="table-search-container"> -->
+        <div :class="['table-search-container', { 'table-search-flex': search.length > defaultShowCount }]">
+            <el-form ref="tableSearchRef" :model="state.innerModelValue" :inline="true" label-width="100px">
+                <span v-for="(val, key) in search" :key="key" v-show="key < defaultShowCount || state.isToggle">
+                    <template v-if="val.type">
+                        <el-form-item
+                                label-width="auto"
+                                :label="val.label"
+                                :prop="val.prop"
+                                :rules="[{ required: val.required, message: `${val.label}不能为空`, trigger: val.type === 'input' ? 'blur' : 'change' }]"
+                            >
+                                <el-input
+                                    v-model="state.innerModelValue[val.prop]"
+                                    v-bind="val.comProps"
+                                    :placeholder="val.placeholder"
+                                    :clearable="!val.required"
+                                    v-if="val.type === 'input'"
+                                    @keyup.enter="onSearch(tableSearchRef)"
+                                    @change="val.change"
+                                />
+                                <el-date-picker
+                                    v-model="state.innerModelValue[val.prop]"
+                                    v-bind="val.comProps"
+                                    type="date"
+                                    :placeholder="val.placeholder"
+                                    :clearable="!val.required"
+                                    v-else-if="val.type === 'date'"
+                                    @change="val.change"
+                                />
+                                <el-date-picker
+                                    v-model="state.innerModelValue[val.prop]"
+                                    v-bind="val.comProps"
+                                    type="monthrange"
+                                    value-format="YYYY/MM/DD"
+                                    :placeholder="val.placeholder"
+                                    :clearable="!val.required"
+                                    v-else-if="val.type === 'monthrange'"
+                                    @change="val.change"
+                                />
+                                <el-date-picker
+                                    v-model="state.innerModelValue[val.prop]"
+                                    v-bind="val.comProps"
+                                    type="daterange"
+                                    value-format="YYYY/MM/DD"
+                                    range-separator="至"
+                                    start-placeholder="开始日期"
+                                    end-placeholder="结束日期"
+                                    :clearable="!val.required"
+                                    :shortcuts="shortcuts"
+                                    :default-time="defaultTime"
+                                    v-else-if="val.type === 'daterange'"
+                                    @change="val.change"
+                                />
+                                <el-select
+                                    v-model="state.innerModelValue[val.prop]"
+                                    v-bind="val.comProps"
+                                    :clearable="!val.required"
+                                    :placeholder="val.placeholder"
+                                    v-else-if="val.type === 'select'"
+                                    @change="val.change"
+                                >
+                                    <el-option v-for="item in getSelectOptions(val)" :key="item.value" :label="item.label" :value="item.value" />
+                                </el-select>
+                                <el-cascader
+                                    v-else-if="val.type === 'cascader' && val.cascaderData"
+                                    :options="val.cascaderData"
+                                    :clearable="!val.required"
+                                    filterable
+                                    :props="val.cascaderProps ? val.cascaderProps : state.cascaderProps"
+                                    :placeholder="val.placeholder"
+                                    @change="val.change"
+                                    v-bind="val.comProps"
+                                    v-model="state.innerModelValue[val.prop]"
+                                >
+                                </el-cascader>
+                        </el-form-item>
+                    </template>
+                </span>
+            </el-form>
+        </div>
+        <div v-if="search.length > defaultShowCount" class="table-search-more">
+            <el-form :inline="true">
+                <el-form-item>
+                    <el-button text @click="state.isToggle = !state.isToggle"
+                    >更多查询
+                        <el-icon class="el-icon--right">
+                            <ele-ArrowUpBold v-if="state.isToggle" />
+                            <ele-ArrowDownBold v-else />
+                        </el-icon>
+                </el-button>
+                    
+                    
+                </el-form-item>
+            </el-form>
+        </div>
+        <div class="table-search-btn">
+            <el-form :inline="true">
+                <el-form-item>
+                    <!-- 使用el-button-group会导致具有type属性的按钮的右边框无法显示 -->
+                    <!-- <el-button-group> -->
+                    <el-button plain type="primary" icon="ele-Search" @click="onSearch(tableSearchRef)"> 查询 </el-button>
+                    <el-button icon="ele-Refresh" @click="onReset(tableSearchRef)" style="margin-left: 12px"> 重置 </el-button>
+                    <!-- </el-button-group> -->
+                </el-form-item>
+            </el-form>
+        </div>
+    </div>
 </template>
 </template>
 
 
 <script setup lang="ts" name="makeTableDemoSearch">
 <script setup lang="ts" name="makeTableDemoSearch">
@@ -121,6 +127,11 @@ const props = defineProps({
 		type: Object,
 		type: Object,
 		default: () => ({}),
 		default: () => ({}),
 	},
 	},
+    // 默认显示几个查询条件,超过则隐藏,点击更多展开
+    defaultShowCount: {
+        type: Number,
+        default: 5,
+    },
 });
 });
 
 
 // 定义子组件向父组件传值/事件
 // 定义子组件向父组件传值/事件
@@ -209,24 +220,31 @@ const shortcuts = [
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
+.table-search-flex {
+    flex: 1;
+}
+
 .table-search-container {
 .table-search-container {
-	display: flex;
-
-	.table-form {
-		flex: 1;
-
-		.table-form-btn-toggle {
-			white-space: nowrap;
-			user-select: none;
-			display: flex;
-			align-items: center;
-			color: var(--el-color-primary);
-		}
-	}
+    //flex: 1;
+
+    :deep(.el-form-item--small .el-form-item__label) {
+        padding: 0 8px 0 0;
+    }
 }
 }
 
 
-.divider-btn {
-	height: 20px;
-	border-radius: 10px;
+.table-search-more {
+	border-right: 1px solid var(--el-card-border-color);
+}
+
+.table-search-btn {
+    width: 184px;
+
+    // 右侧查询重置按钮随展开垂直居中
+    // .el-form--inline {
+    //     height: 100%;
+	// 	.el-form-item--small.el-form-item,.el-form-item:last-of-type {
+    //         height: calc(100% - 10px);
+    //     }
+	// }
 }
 }
 </style>
 </style>

+ 1 - 1
Web/src/main.ts

@@ -22,7 +22,7 @@ import VForm3 from 'vform3-builds';
 import 'vform3-builds/dist/designer.style.css';
 import 'vform3-builds/dist/designer.style.css';
 // 关闭自动打印
 // 关闭自动打印
 import { disAutoConnect } from 'vue-plugin-hiprint';
 import { disAutoConnect } from 'vue-plugin-hiprint';
-import sysDict from "/src/components/sysDict/sysDict.vue";
+import sysDict from "/@/components/sysDict/sysDict.vue";
 disAutoConnect();
 disAutoConnect();
 
 
 const app = createApp(App);
 const app = createApp(App);

+ 2 - 2
Web/src/views/system/template/index.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
 	<div class="sys-config-container">
 	<div class="sys-config-container">
-		<el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+		<el-card shadow="hover" :body-style="{ paddingBottom: 5 }">
 			<TableSearch :search="tb.tableData.search" @search="onSearch" />
 			<TableSearch :search="tb.tableData.search" @search="onSearch" />
 		</el-card>
 		</el-card>
 		<el-card class="full-table" shadow="hover" style="margin-top: 5px">
 		<el-card class="full-table" shadow="hover" style="margin-top: 5px">
@@ -70,7 +70,7 @@ const tb = reactive<TableDemoState>({
 		},
 		},
 		// 搜索表单,动态生成(传空数组时,将不显示搜索,type有3种类型:input,date,select)
 		// 搜索表单,动态生成(传空数组时,将不显示搜索,type有3种类型:input,date,select)
 		search: [
 		search: [
-			{ label: '名称', prop: 'name', placeholder: '搜索模板名称', required: false, type: 'input' },
+            { label: '名称', prop: 'name', placeholder: '搜索模板名称', required: false, type: 'input' },
 			{ label: '编码', prop: 'code', placeholder: '搜索模板编码', required: false, type: 'input' },
 			{ label: '编码', prop: 'code', placeholder: '搜索模板编码', required: false, type: 'input' },
 			{ label: '类型', prop: 'type', placeholder: '搜索模板类型', required: false, type: 'select', dictCode: 'TemplateTypeEnum' },
 			{ label: '类型', prop: 'type', placeholder: '搜索模板类型', required: false, type: 'select', dictCode: 'TemplateTypeEnum' },
 		],
 		],