😎1、优化文件管理树形点击联动查询 2、调整文件管理默认为多文件上传 3、优化菜单种子和默认管理员角色菜单种子

This commit is contained in:
zuohuaijun 2025-10-12 12:54:20 +08:00
parent adf3251895
commit ea173ac5b1
15 changed files with 364 additions and 71 deletions

View File

@ -55,7 +55,7 @@
<PackageReference Include="SqlSugar.MongoDbCore" Version="5.1.4.266" /> <PackageReference Include="SqlSugar.MongoDbCore" Version="5.1.4.266" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.205" /> <PackageReference Include="SqlSugarCore" Version="5.1.4.205" />
<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.8" /> <PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.9" />
<PackageReference Include="System.Net.Http" Version="4.3.4" /> <PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1328" /> <PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1328" />
<PackageReference Include="UAParser" Version="3.1.47" /> <PackageReference Include="UAParser" Version="3.1.47" />

View File

@ -151,6 +151,7 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
new SysMenu{ Id=1310000000394, Pid=1310000000391, Title="下载", Permission="sysFile/downloadFile", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000394, Pid=1310000000391, Title="下载", Permission="sysFile/downloadFile", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000395, Pid=1310000000391, Title="删除", Permission="sysFile/delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000395, Pid=1310000000391, Title="删除", Permission="sysFile/delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000396, Pid=1310000000391, Title="编辑", Permission="sysFile/update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2023-10-27 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000396, Pid=1310000000391, Title="编辑", Permission="sysFile/update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2023-10-27 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000397, Pid=1310000000391, Title="预览", Permission="sysFile/preview", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2023-10-27 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000401, Pid=1310000000301, Title="打印模板", Path="/platform/print", Name="sysPrint", Component="/system/print/index", Icon="ele-Printer", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=190 }, new SysMenu{ Id=1310000000401, Pid=1310000000301, Title="打印模板", Path="/platform/print", Name="sysPrint", Component="/system/print/index", Icon="ele-Printer", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=190 },
new SysMenu{ Id=1310000000402, Pid=1310000000401, Title="查询", Permission="sysPrint/page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000402, Pid=1310000000401, Title="查询", Permission="sysPrint/page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },

View File

@ -63,6 +63,8 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000000164, RoleId=roleList[0].Id, MenuId=1310000000154 }, new SysRoleMenu{ Id=1300000000164, RoleId=roleList[0].Id, MenuId=1310000000154 },
new SysRoleMenu{ Id=1300000000165, RoleId=roleList[0].Id, MenuId=1310000000155 }, new SysRoleMenu{ Id=1300000000165, RoleId=roleList[0].Id, MenuId=1310000000155 },
new SysRoleMenu{ Id=1300000000166, RoleId=roleList[0].Id, MenuId=1310000000156 }, new SysRoleMenu{ Id=1300000000166, RoleId=roleList[0].Id, MenuId=1310000000156 },
new SysRoleMenu{ Id=1300000000167, RoleId=roleList[0].Id, MenuId=1310000000157 },
new SysRoleMenu{ Id=1300000000168, RoleId=roleList[0].Id, MenuId=1310000000158 },
// 个人中心 // 个人中心
new SysRoleMenu{ Id=1300000000171, RoleId=roleList[0].Id, MenuId=1310000000161 }, new SysRoleMenu{ Id=1300000000171, RoleId=roleList[0].Id, MenuId=1310000000161 },
new SysRoleMenu{ Id=1300000000172, RoleId=roleList[0].Id, MenuId=1310000000162 }, new SysRoleMenu{ Id=1300000000172, RoleId=roleList[0].Id, MenuId=1310000000162 },
@ -138,6 +140,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000000294, RoleId=roleList[0].Id, MenuId=1310000000394 }, new SysRoleMenu{ Id=1300000000294, RoleId=roleList[0].Id, MenuId=1310000000394 },
new SysRoleMenu{ Id=1300000000295, RoleId=roleList[0].Id, MenuId=1310000000395 }, new SysRoleMenu{ Id=1300000000295, RoleId=roleList[0].Id, MenuId=1310000000395 },
new SysRoleMenu{ Id=1300000000296, RoleId=roleList[0].Id, MenuId=1310000000396 }, new SysRoleMenu{ Id=1300000000296, RoleId=roleList[0].Id, MenuId=1310000000396 },
new SysRoleMenu{ Id=1300000000297, RoleId=roleList[0].Id, MenuId=1310000000397 },
// 打印模板 // 打印模板
new SysRoleMenu{ Id=1300000001401, RoleId=roleList[0].Id, MenuId=1310000000401 }, new SysRoleMenu{ Id=1300000001401, RoleId=roleList[0].Id, MenuId=1310000000401 },
new SysRoleMenu{ Id=1300000001402, RoleId=roleList[0].Id, MenuId=1310000000402 }, new SysRoleMenu{ Id=1300000001402, RoleId=roleList[0].Id, MenuId=1310000000402 },
@ -167,6 +170,13 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000001446, RoleId=roleList[0].Id, MenuId=1310000000446 }, new SysRoleMenu{ Id=1300000001446, RoleId=roleList[0].Id, MenuId=1310000000446 },
// 更新日志 // 更新日志
new SysRoleMenu{ Id=1300000001451, RoleId=roleList[0].Id, MenuId=1310000000451 }, new SysRoleMenu{ Id=1300000001451, RoleId=roleList[0].Id, MenuId=1310000000451 },
// 流水序号
new SysRoleMenu{ Id=1300000001501, RoleId=roleList[0].Id, MenuId=1310000000471 },
new SysRoleMenu{ Id=1300000001502, RoleId=roleList[0].Id, MenuId=1310000000472 },
new SysRoleMenu{ Id=1300000001503, RoleId=roleList[0].Id, MenuId=1310000000473 },
new SysRoleMenu{ Id=1300000001504, RoleId=roleList[0].Id, MenuId=1310000000474 },
new SysRoleMenu{ Id=1300000001505, RoleId=roleList[0].Id, MenuId=1310000000475 },
new SysRoleMenu{ Id=1300000001506, RoleId=roleList[0].Id, MenuId=1310000000476 },
////// 日志管理 ////// 日志管理
new SysRoleMenu{ Id=1300000000301, RoleId=roleList[0].Id, MenuId=1310000000501 }, new SysRoleMenu{ Id=1300000000301, RoleId=roleList[0].Id, MenuId=1310000000501 },
new SysRoleMenu{ Id=1300000000311, RoleId=roleList[0].Id, MenuId=1310000000511 }, new SysRoleMenu{ Id=1300000000311, RoleId=roleList[0].Id, MenuId=1310000000511 },
@ -187,6 +197,23 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000000351, RoleId=roleList[0].Id, MenuId=1310000000551 }, new SysRoleMenu{ Id=1300000000351, RoleId=roleList[0].Id, MenuId=1310000000551 },
new SysRoleMenu{ Id=1300000000352, RoleId=roleList[0].Id, MenuId=1310000000552 }, new SysRoleMenu{ Id=1300000000352, RoleId=roleList[0].Id, MenuId=1310000000552 },
new SysRoleMenu{ Id=1300000000353, RoleId=roleList[0].Id, MenuId=1310000000553 }, new SysRoleMenu{ Id=1300000000353, RoleId=roleList[0].Id, MenuId=1310000000553 },
new SysRoleMenu{ Id=1300000000361, RoleId=roleList[0].Id, MenuId=1310000000561 },
new SysRoleMenu{ Id=1300000000362, RoleId=roleList[0].Id, MenuId=1310000000562 },
new SysRoleMenu{ Id=1300000000363, RoleId=roleList[0].Id, MenuId=1310000000563 },
////// 报表开发
new SysRoleMenu{ Id=1300000001601, RoleId=roleList[0].Id, MenuId=1310000000701 },
new SysRoleMenu{ Id=1300000001611, RoleId=roleList[0].Id, MenuId=1310000000711 },
new SysRoleMenu{ Id=1300000001612, RoleId=roleList[0].Id, MenuId=1310000000712 },
new SysRoleMenu{ Id=1300000001613, RoleId=roleList[0].Id, MenuId=1310000000713 },
new SysRoleMenu{ Id=1300000001614, RoleId=roleList[0].Id, MenuId=1310000000714 },
new SysRoleMenu{ Id=1300000001615, RoleId=roleList[0].Id, MenuId=1310000000715 },
new SysRoleMenu{ Id=1300000001616, RoleId=roleList[0].Id, MenuId=1310000000716 },
new SysRoleMenu{ Id=1300000001621, RoleId=roleList[0].Id, MenuId=1310000000721 },
new SysRoleMenu{ Id=1300000001622, RoleId=roleList[0].Id, MenuId=1310000000722 },
new SysRoleMenu{ Id=1300000001623, RoleId=roleList[0].Id, MenuId=1310000000723 },
new SysRoleMenu{ Id=1300000001624, RoleId=roleList[0].Id, MenuId=1310000000724 },
new SysRoleMenu{ Id=1300000001625, RoleId=roleList[0].Id, MenuId=1310000000725 },
new SysRoleMenu{ Id=1300000001631, RoleId=roleList[0].Id, MenuId=1310000000731 },
////// 帮助文档 ////// 帮助文档
new SysRoleMenu{ Id=1300000000401, RoleId=roleList[0].Id, MenuId=1320000000101 }, new SysRoleMenu{ Id=1300000000401, RoleId=roleList[0].Id, MenuId=1320000000101 },
new SysRoleMenu{ Id=1300000000402, RoleId=roleList[0].Id, MenuId=1320000000111 }, new SysRoleMenu{ Id=1300000000402, RoleId=roleList[0].Id, MenuId=1320000000111 },

View File

@ -31,53 +31,35 @@ public class PageFileInput : BasePageInput
/// 结束时间 /// 结束时间
/// </summary> /// </summary>
public DateTime? EndTime { get; set; } public DateTime? EndTime { get; set; }
/// <summary>
/// 文件路径
/// </summary>
public string FilePath { get; set; }
}
/// <summary>
/// 多文件上传
/// </summary>
public class UploadFilesInput : BaseUploadFileInput
{
/// <summary>
/// 文件集合
/// </summary>
[Required]
public IFormFileCollection Files { get; set; }
} }
/// <summary> /// <summary>
/// 上传文件 /// 上传文件
/// </summary> /// </summary>
public class UploadFileInput public class UploadFileInput : BaseUploadFileInput
{ {
/// <summary> /// <summary>
/// 文件 /// 文件
/// </summary> /// </summary>
[Required] [Required]
public IFormFile File { get; set; } public IFormFile File { get; set; }
/// <summary>
/// 文件类别
/// </summary>
/// <example></example>
public string FileType { get; set; }
/// <summary>
/// 文件别名
/// </summary>
/// <example></example>
public string FileAlias { get; set; }
/// <summary>
/// 是否公开
/// </summary>
public bool IsPublic { get; set; } = false;
/// <summary>
/// 允许格式:.jpeg.jpg.png.bmp.gif.tif
/// </summary>
/// <example></example>
public string AllowSuffix { get; set; }
/// <summary>
/// 业务数据Id
/// </summary>
public long DataId { get; set; }
/// <summary>
/// 上传用户Id解决跨租户上传时用户所属不一致问题
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public long UserId { get; set; }
} }
/// <summary> /// <summary>
@ -130,3 +112,41 @@ public class UploadFileFromBase64Input
[System.Text.Json.Serialization.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore]
public long UserId { get; set; } public long UserId { get; set; }
} }
public class BaseUploadFileInput
{
/// <summary>
/// 文件类别
/// </summary>
/// <example></example>
public string FileType { get; set; }
/// <summary>
/// 文件别名
/// </summary>
/// <example></example>
public string FileAlias { get; set; }
/// <summary>
/// 是否公开
/// </summary>
public bool IsPublic { get; set; } = false;
/// <summary>
/// 允许格式:.jpeg.jpg.png.bmp.gif.tif
/// </summary>
/// <example></example>
public string AllowSuffix { get; set; }
/// <summary>
/// 业务数据Id
/// </summary>
public long DataId { get; set; }
/// <summary>
/// 上传用户Id解决跨租户上传时用户所属不一致问题
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public long UserId { get; set; }
}

View File

@ -60,15 +60,11 @@ public class SysFileService : IDynamicApiController, ITransient
[DisplayName("获取文件分页列表")] [DisplayName("获取文件分页列表")]
public async Task<SqlSugarPagedList<SysFile>> Page(PageFileInput input) public async Task<SqlSugarPagedList<SysFile>> Page(PageFileInput input)
{ {
// 获取所有公开文件 return await _sysFileRep.AsQueryable()
var publicList = _sysFileRep.AsQueryable().ClearFilter<ITenantIdFilter>().Where(u => u.IsPublic == true);
// 获取私有文件
var privateList = _sysFileRep.AsQueryable().Where(u => u.IsPublic == false);
// 合并公开和私有并分页
return await _sysFileRep.Context.UnionAll(publicList, privateList)
.WhereIF(!string.IsNullOrWhiteSpace(input.FileName), u => u.FileName.Contains(input.FileName.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.FileName), u => u.FileName.Contains(input.FileName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()) && !string.IsNullOrWhiteSpace(input.EndTime.ToString()), .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()) && !string.IsNullOrWhiteSpace(input.EndTime.ToString()),
u => u.CreateTime >= input.StartTime && u.CreateTime <= input.EndTime) u => u.CreateTime >= input.StartTime && u.CreateTime <= input.EndTime)
.WhereIF(!string.IsNullOrWhiteSpace(input.FilePath), u => u.FilePath.Contains(input.FilePath.Trim()))
.OrderBy(u => u.CreateTime, OrderByType.Desc) .OrderBy(u => u.CreateTime, OrderByType.Desc)
.ToPagedListAsync(input.Page, input.PageSize); .ToPagedListAsync(input.Page, input.PageSize);
} }
@ -109,13 +105,32 @@ public class SysFileService : IDynamicApiController, ITransient
/// <param name="files"></param> /// <param name="files"></param>
/// <returns></returns> /// <returns></returns>
[DisplayName("上传多文件")] [DisplayName("上传多文件")]
public List<SysFile> UploadFiles([Required] List<IFormFile> files) public List<SysFile> UploadFileList([Required] List<IFormFile> files)
{ {
var fileList = new List<SysFile>(); var fileList = new List<SysFile>();
files.ForEach(file => fileList.Add(UploadFile(new UploadFileInput { File = file }).Result)); files.ForEach(file => fileList.Add(UploadFile(new UploadFileInput { File = file }).Result));
return fileList; return fileList;
} }
/// <summary>
/// 上传多文件 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("上传多文件")]
public async Task<List<SysFile>> UploadFiles([FromForm] UploadFilesInput input)
{
var fileList = new List<SysFile>();
foreach (var file in input.Files)
{
var uploadFileInput = input.Adapt<UploadFileInput>();
uploadFileInput.File = file;
var sysFile = await UploadFile(uploadFileInput);
fileList.Add(sysFile);
}
return fileList;
}
/// <summary> /// <summary>
/// 根据文件Id或Url下载 🔖 /// 根据文件Id或Url下载 🔖
/// </summary> /// </summary>

View File

@ -2,7 +2,7 @@
"name": "admin.net.pro", "name": "admin.net.pro",
"type": "module", "type": "module",
"version": "2.4.33", "version": "2.4.33",
"lastBuildTime": "2025.10.10", "lastBuildTime": "2025.10.12",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架", "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun", "author": "zuohuaijun",
"license": "MIT", "license": "MIT",
@ -62,7 +62,7 @@
"qs": "^6.14.0", "qs": "^6.14.0",
"relation-graph": "^2.2.11", "relation-graph": "^2.2.11",
"screenfull": "^6.0.2", "screenfull": "^6.0.2",
"sm-crypto-v2": "^1.14.0", "sm-crypto-v2": "^1.15.0",
"sortablejs": "^1.15.6", "sortablejs": "^1.15.6",
"splitpanes": "^4.0.4", "splitpanes": "^4.0.4",
"sql-formatter": "^15.6.10", "sql-formatter": "^15.6.10",
@ -81,7 +81,7 @@
"vue-router": "^4.5.1", "vue-router": "^4.5.1",
"vue-signature-pad": "^3.0.2", "vue-signature-pad": "^3.0.2",
"vue3-tree-org": "^4.2.2", "vue3-tree-org": "^4.2.2",
"vxe-pc-ui": "^4.9.41", "vxe-pc-ui": "^4.9.42",
"vxe-table": "^4.16.21", "vxe-table": "^4.16.21",
"xe-utils": "^3.7.9", "xe-utils": "^3.7.9",
"xlsx-js-style": "^1.2.0" "xlsx-js-style": "^1.2.0"

View File

@ -630,6 +630,59 @@ export const SysFileApiAxiosParamCreator = function (configuration?: Configurati
options: localVarRequestOptions, options: localVarRequestOptions,
}; };
}, },
/**
*
* @summary 🔖
* @param {Array<Blob>} [files]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysFileUploadFileListPostForm: async (files?: Array<Blob>, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysFile/uploadFileList`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
const localVarFormParams = new FormData();
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
if (files) {
files.forEach((element) => {
localVarFormParams.append('files', element as any);
})
}
localVarHeaderParameter['Content-Type'] = 'multipart/form-data';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
localVarRequestOptions.data = localVarFormParams;
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -716,10 +769,16 @@ export const SysFileApiAxiosParamCreator = function (configuration?: Configurati
* *
* @summary 🔖 * @summary 🔖
* @param {Array<Blob>} [files] * @param {Array<Blob>} [files]
* @param {string} [fileType]
* @param {string} [fileAlias]
* @param {boolean} [isPublic]
* @param {string} [allowSuffix]
* @param {number} [dataId]
* @param {number} [userId]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
apiSysFileUploadFilesPostForm: async (files?: Array<Blob>, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { apiSysFileUploadFilesPostForm: async (files?: Array<Blob>, fileType?: string, fileAlias?: string, isPublic?: boolean, allowSuffix?: string, dataId?: number, userId?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysFile/uploadFiles`; const localVarPath = `/api/sysFile/uploadFiles`;
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com'); const localVarUrlObj = new URL(localVarPath, 'https://example.com');
@ -743,10 +802,34 @@ export const SysFileApiAxiosParamCreator = function (configuration?: Configurati
if (files) { if (files) {
files.forEach((element) => { files.forEach((element) => {
localVarFormParams.append('files', element as any); localVarFormParams.append('Files', element as any);
}) })
} }
if (fileType !== undefined) {
localVarFormParams.append('FileType', fileType as any);
}
if (fileAlias !== undefined) {
localVarFormParams.append('FileAlias', fileAlias as any);
}
if (isPublic !== undefined) {
localVarFormParams.append('IsPublic', isPublic as any);
}
if (allowSuffix !== undefined) {
localVarFormParams.append('AllowSuffix', allowSuffix as any);
}
if (dataId !== undefined) {
localVarFormParams.append('DataId', dataId as any);
}
if (userId !== undefined) {
localVarFormParams.append('UserId', userId as any);
}
localVarHeaderParameter['Content-Type'] = 'multipart/form-data'; localVarHeaderParameter['Content-Type'] = 'multipart/form-data';
const query = new URLSearchParams(localVarUrlObj.search); const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) { for (const key in localVarQueryParameter) {
@ -1107,6 +1190,20 @@ export const SysFileApiFp = function(configuration?: Configuration) {
return axios.request(axiosRequestArgs); return axios.request(axiosRequestArgs);
}; };
}, },
/**
*
* @summary 🔖
* @param {Array<Blob>} [files]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysFileUploadFileListPostForm(files?: Array<Blob>, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultListSysFile>>> {
const localVarAxiosArgs = await SysFileApiAxiosParamCreator(configuration).apiSysFileUploadFileListPostForm(files, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -1131,11 +1228,17 @@ export const SysFileApiFp = function(configuration?: Configuration) {
* *
* @summary 🔖 * @summary 🔖
* @param {Array<Blob>} [files] * @param {Array<Blob>} [files]
* @param {string} [fileType]
* @param {string} [fileAlias]
* @param {boolean} [isPublic]
* @param {string} [allowSuffix]
* @param {number} [dataId]
* @param {number} [userId]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async apiSysFileUploadFilesPostForm(files?: Array<Blob>, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultListSysFile>>> { async apiSysFileUploadFilesPostForm(files?: Array<Blob>, fileType?: string, fileAlias?: string, isPublic?: boolean, allowSuffix?: string, dataId?: number, userId?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultListSysFile>>> {
const localVarAxiosArgs = await SysFileApiAxiosParamCreator(configuration).apiSysFileUploadFilesPostForm(files, options); const localVarAxiosArgs = await SysFileApiAxiosParamCreator(configuration).apiSysFileUploadFilesPostForm(files, fileType, fileAlias, isPublic, allowSuffix, dataId, userId, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs); return axios.request(axiosRequestArgs);
@ -1316,6 +1419,16 @@ export const SysFileApiFactory = function (configuration?: Configuration, basePa
async apiSysFileUploadFileFromBase64Post(body?: UploadFileFromBase64Input, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultSysFile>> { async apiSysFileUploadFileFromBase64Post(body?: UploadFileFromBase64Input, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultSysFile>> {
return SysFileApiFp(configuration).apiSysFileUploadFileFromBase64Post(body, options).then((request) => request(axios, basePath)); return SysFileApiFp(configuration).apiSysFileUploadFileFromBase64Post(body, options).then((request) => request(axios, basePath));
}, },
/**
*
* @summary 🔖
* @param {Array<Blob>} [files]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysFileUploadFileListPostForm(files?: Array<Blob>, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultListSysFile>> {
return SysFileApiFp(configuration).apiSysFileUploadFileListPostForm(files, options).then((request) => request(axios, basePath));
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -1336,11 +1449,17 @@ export const SysFileApiFactory = function (configuration?: Configuration, basePa
* *
* @summary 🔖 * @summary 🔖
* @param {Array<Blob>} [files] * @param {Array<Blob>} [files]
* @param {string} [fileType]
* @param {string} [fileAlias]
* @param {boolean} [isPublic]
* @param {string} [allowSuffix]
* @param {number} [dataId]
* @param {number} [userId]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async apiSysFileUploadFilesPostForm(files?: Array<Blob>, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultListSysFile>> { async apiSysFileUploadFilesPostForm(files?: Array<Blob>, fileType?: string, fileAlias?: string, isPublic?: boolean, allowSuffix?: string, dataId?: number, userId?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultListSysFile>> {
return SysFileApiFp(configuration).apiSysFileUploadFilesPostForm(files, options).then((request) => request(axios, basePath)); return SysFileApiFp(configuration).apiSysFileUploadFilesPostForm(files, fileType, fileAlias, isPublic, allowSuffix, dataId, userId, options).then((request) => request(axios, basePath));
}, },
/** /**
* *
@ -1518,6 +1637,17 @@ export class SysFileApi extends BaseAPI {
public async apiSysFileUploadFileFromBase64Post(body?: UploadFileFromBase64Input, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultSysFile>> { public async apiSysFileUploadFileFromBase64Post(body?: UploadFileFromBase64Input, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultSysFile>> {
return SysFileApiFp(this.configuration).apiSysFileUploadFileFromBase64Post(body, options).then((request) => request(this.axios, this.basePath)); return SysFileApiFp(this.configuration).apiSysFileUploadFileFromBase64Post(body, options).then((request) => request(this.axios, this.basePath));
} }
/**
*
* @summary 🔖
* @param {Array<Blob>} [files]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysFileApi
*/
public async apiSysFileUploadFileListPostForm(files?: Array<Blob>, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultListSysFile>> {
return SysFileApiFp(this.configuration).apiSysFileUploadFileListPostForm(files, options).then((request) => request(this.axios, this.basePath));
}
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -1539,12 +1669,18 @@ export class SysFileApi extends BaseAPI {
* *
* @summary 🔖 * @summary 🔖
* @param {Array<Blob>} [files] * @param {Array<Blob>} [files]
* @param {string} [fileType]
* @param {string} [fileAlias]
* @param {boolean} [isPublic]
* @param {string} [allowSuffix]
* @param {number} [dataId]
* @param {number} [userId]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof SysFileApi * @memberof SysFileApi
*/ */
public async apiSysFileUploadFilesPostForm(files?: Array<Blob>, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultListSysFile>> { public async apiSysFileUploadFilesPostForm(files?: Array<Blob>, fileType?: string, fileAlias?: string, isPublic?: boolean, allowSuffix?: string, dataId?: number, userId?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultListSysFile>> {
return SysFileApiFp(this.configuration).apiSysFileUploadFilesPostForm(files, options).then((request) => request(this.axios, this.basePath)); return SysFileApiFp(this.configuration).apiSysFileUploadFilesPostForm(files, fileType, fileAlias, isPublic, allowSuffix, dataId, userId, options).then((request) => request(this.axios, this.basePath));
} }
/** /**
* *

View File

@ -485,6 +485,7 @@ export * from './sys-dict-type';
export * from './sys-file'; export * from './sys-file';
export * from './sys-file-upload-avatar-body'; export * from './sys-file-upload-avatar-body';
export * from './sys-file-upload-file-body'; export * from './sys-file-upload-file-body';
export * from './sys-file-upload-file-list-body';
export * from './sys-file-upload-files-body'; export * from './sys-file-upload-files-body';
export * from './sys-file-upload-signature-body'; export * from './sys-file-upload-signature-body';
export * from './sys-info-input'; export * from './sys-info-input';

View File

@ -113,4 +113,12 @@ export interface PageFileInput {
* @memberof PageFileInput * @memberof PageFileInput
*/ */
endTime?: Date | null; endTime?: Date | null;
/**
*
*
* @type {string}
* @memberof PageFileInput
*/
filePath?: string | null;
} }

View File

@ -0,0 +1,28 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface SysFileUploadFileListBody
*/
export interface SysFileUploadFileListBody {
/**
* @type {Array<Blob>}
* @memberof SysFileUploadFileListBody
*/
files: Array<Blob>;
}

View File

@ -21,8 +21,58 @@
export interface SysFileUploadFilesBody { export interface SysFileUploadFilesBody {
/** /**
*
*
* @type {Array<Blob>} * @type {Array<Blob>}
* @memberof SysFileUploadFilesBody * @memberof SysFileUploadFilesBody
*/ */
files: Array<Blob>; files: Array<Blob>;
/**
*
*
* @type {string}
* @memberof SysFileUploadFilesBody
*/
fileType?: string;
/**
*
*
* @type {string}
* @memberof SysFileUploadFilesBody
*/
fileAlias?: string;
/**
*
*
* @type {boolean}
* @memberof SysFileUploadFilesBody
*/
isPublic?: boolean;
/**
* .jpeg.jpg.png.bmp.gif.tif
*
* @type {string}
* @memberof SysFileUploadFilesBody
*/
allowSuffix?: string;
/**
* Id
*
* @type {number}
* @memberof SysFileUploadFilesBody
*/
dataId?: number;
/**
* Id
*
* @type {number}
* @memberof SysFileUploadFilesBody
*/
userId?: number;
} }

View File

@ -75,12 +75,4 @@ export interface UploadFileFromBase64Input {
* @memberof UploadFileFromBase64Input * @memberof UploadFileFromBase64Input
*/ */
dataId?: number | null; dataId?: number | null;
/**
* Id
*
* @type {number}
* @memberof UploadFileFromBase64Input
*/
userId?: number;
} }

View File

@ -4,7 +4,7 @@
<div class="card-header"> <div class="card-header">
<div class="tree-h-flex"> <div class="tree-h-flex">
<div class="tree-h-left"> <div class="tree-h-left">
<el-input :prefix-icon="Search" v-model.lazy="filterText" clearable placeholder="文件名称" /> <el-input :prefix-icon="Search" v-model.lazy="filterText" clearable placeholder="文件路径" />
</div> </div>
<div class="tree-h-right"> <div class="tree-h-right">
<el-dropdown @command="handleCommand"> <el-dropdown @command="handleCommand">
@ -126,11 +126,22 @@ const handleCommand = async (command: string | number | object) => {
// //
const emits = defineEmits(['node-click']); const emits = defineEmits(['node-click']);
const nodeClick = (node: any) => { const nodeClick = (node: any, data: any) => {
emits('node-click', { id: node.id, name: node.name }); var path = node.name;
if (data.level == 4) {
//
var monthNode = treeRef.value!.getNode(node.pid);
var yearNode = treeRef.value!.getNode(monthNode.data.pid);
path = `${yearNode.data.name}/${monthNode.data.name}/${node.name}`;
} else if (data.level == 3) {
//
var yearNode = treeRef.value!.getNode(node.pid);
path = `${yearNode.data.name}/${node.name}`;
}
emits('node-click', { id: node.id, name: node.name, path: path });
}; };
// //
const setCurrentKey = (key?: TreeKey | undefined, shouldAutoExpandParent?: boolean | undefined) => { const setCurrentKey = (key?: TreeKey | undefined, shouldAutoExpandParent?: boolean | undefined) => {
treeRef.value?.setCurrentKey(key, shouldAutoExpandParent); treeRef.value?.setCurrentKey(key, shouldAutoExpandParent);
}; };

View File

@ -105,7 +105,7 @@
<el-radio :value="true"></el-radio> <el-radio :value="true"></el-radio>
</el-radio-group> </el-radio-group>
<el-upload ref="uploadRef" drag :auto-upload="false" :limit="1" :file-list="state.fileList" action :on-change="handleChange" accept=".jpg,.png,.bmp,.gif,.txt,.xml,.pdf,.xlsx,.docx"> <el-upload ref="uploadRef" drag :auto-upload="false" :file-list="state.fileList" action :on-change="handleChange" accept=".jpg,.png,.bmp,.gif,.txt,.xml,.pdf,.xlsx,.docx">
<el-icon class="el-icon--upload"> <el-icon class="el-icon--upload">
<ele-UploadFilled /> <ele-UploadFilled />
</el-icon> </el-icon>
@ -281,7 +281,11 @@ const handleChange = (file: any, fileList: []) => {
// //
const handleUpload = async () => { const handleUpload = async () => {
if (state.fileList.length < 1) return; if (state.fileList.length < 1) return;
await getAPI(SysFileApi).apiSysFileUploadFilePostForm(state.fileList[0].raw, state.fileType, '', state.isPublic); // //
// await getAPI(SysFileApi).apiSysFileUploadFilePostForm(state.fileList[0].raw, state.fileType, '', state.isPublic);
//
var files = state.fileList.map((file: any) => file.raw);
await getAPI(SysFileApi).apiSysFileUploadFilesPostForm(files, state.fileType, '', state.isPublic);
handleQuery(); handleQuery();
ElMessage.success('上传成功'); ElMessage.success('上传成功');
state.visible = false; state.visible = false;
@ -332,7 +336,7 @@ const gridEvents: VxeGridListeners<SysFile> = {
// //
const handleNodeChange = async (node: any) => { const handleNodeChange = async (node: any) => {
state.queryParams.fileName = undefined; state.queryParams.fileName = undefined;
state.queryParams.filePath = node.name; state.queryParams.filePath = node.path;
state.queryParams.startTime = undefined; state.queryParams.startTime = undefined;
state.queryParams.endTime = undefined; state.queryParams.endTime = undefined;
await handleQuery(); await handleQuery();

View File

@ -140,7 +140,7 @@ const nodeClick = (node: any) => {
emits('node-click', { id: node.id, name: node.name }); emits('node-click', { id: node.id, name: node.name });
}; };
// //
const setCurrentKey = (key?: TreeKey | undefined, shouldAutoExpandParent?: boolean | undefined) => { const setCurrentKey = (key?: TreeKey | undefined, shouldAutoExpandParent?: boolean | undefined) => {
treeRef.value?.setCurrentKey(key, shouldAutoExpandParent); treeRef.value?.setCurrentKey(key, shouldAutoExpandParent);
}; };