From 9e04a15e9c05d92648c6085c8c9a2be4881d012b Mon Sep 17 00:00:00 2001 From: 362270511 <362270511@qq.com> Date: Tue, 13 Aug 2024 17:05:37 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Admin.NET/Admin.NET.Co?= =?UTF-8?q?re/Entity/SysFile.cs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加是否公开字段,如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 文件添加数据权限,用于进行私有附件处理 --- Admin.NET/Admin.NET.Core/Entity/SysFile.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Admin.NET/Admin.NET.Core/Entity/SysFile.cs b/Admin.NET/Admin.NET.Core/Entity/SysFile.cs index ccb1c103..aec7f774 100644 --- a/Admin.NET/Admin.NET.Core/Entity/SysFile.cs +++ b/Admin.NET/Admin.NET.Core/Entity/SysFile.cs @@ -12,7 +12,7 @@ namespace Admin.NET.Core; [SugarTable(null, "系统文件表")] [SysTable] [SugarIndex("index_{table}_F", nameof(FileName), OrderByType.Asc)] -public partial class SysFile : EntityBase +public partial class SysFile : EntityBaseData { /// /// 提供者 @@ -101,4 +101,11 @@ public partial class SysFile : EntityBase [SugarColumn(ColumnDescription = "文件类别", Length = 128)] [MaxLength(128)] public string? FileType { get; set; } + + /// + /// 是否公开 + /// 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 + /// + [SugarColumn(ColumnDescription = "是否公开", DefaultValue = "false")] + public bool IsPublic { get; set; } = false; } \ No newline at end of file From b899c47e5cdd14634506c0842a33f4f9f093633f Mon Sep 17 00:00:00 2001 From: 362270511 <362270511@qq.com> Date: Tue, 13 Aug 2024 17:06:26 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Admin.NET/Admin.NET.Co?= =?UTF-8?q?re/Service/File/SysFileService.cs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 文件管理功能添加是否公开附件功能 --- .../Service/File/SysFileService.cs | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs index 0b902a26..ddb028f1 100644 --- a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs +++ b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs @@ -44,12 +44,16 @@ public class SysFileService : IDynamicApiController, ITransient [DisplayName("获取文件分页列表")] public async Task> Page(PageFileInput input) { - return await _sysFileRep.AsQueryable() - .WhereIF(!string.IsNullOrWhiteSpace(input.FileName), u => u.FileName.Contains(input.FileName.Trim())) - .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()) && !string.IsNullOrWhiteSpace(input.EndTime.ToString()), - u => u.CreateTime >= input.StartTime && u.CreateTime <= input.EndTime) - .OrderBy(u => u.CreateTime, OrderByType.Desc) - .ToPagedListAsync(input.Page, input.PageSize); + //获取所有公开附件 + var publicList = _sysFileRep.AsQueryable().ClearFilter().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.StartTime.ToString()) && !string.IsNullOrWhiteSpace(input.EndTime.ToString()), + u => u.CreateTime >= input.StartTime && u.CreateTime <= input.EndTime) + .OrderBy(u => u.CreateTime, OrderByType.Desc) + .ToPagedListAsync(input.Page, input.PageSize); } /// @@ -60,7 +64,7 @@ public class SysFileService : IDynamicApiController, ITransient [DisplayName("上传文件")] public async Task UploadFile([FromForm] FileUploadInput input) { - return await HandleUploadFile(input.File, input.Path, fileType: input.FileType); + return await HandleUploadFile(input.File, input.Path, fileType: input.FileType, isPublic: input.IsPublic); } /// @@ -84,7 +88,7 @@ public class SysFileService : IDynamicApiController, ITransient Headers = new HeaderDictionary(), ContentType = input.ContentType }; - return await UploadFile(new FileUploadInput { File = formFile, Path = input.Path, FileType = input.FileType }); + return await UploadFile(new FileUploadInput { File = formFile, Path = input.Path, FileType = input.FileType, IsPublic = input.IsPublic }); } /// @@ -267,7 +271,7 @@ public class SysFileService : IDynamicApiController, ITransient var isExist = await _sysFileRep.IsAnyAsync(u => u.Id == input.Id); if (!isExist) throw Oops.Oh(ErrorCodeEnum.D8000); - await _sysFileRep.UpdateAsync(u => new SysFile() { FileName = input.FileName, FileType = input.FileType }, u => u.Id == input.Id); + await _sysFileRep.UpdateAsync(u => new SysFile() { FileName = input.FileName, FileType = input.FileType, IsPublic = input.IsPublic }, u => u.Id == input.Id); } /// @@ -289,8 +293,9 @@ public class SysFileService : IDynamicApiController, ITransient /// 路径 /// 允许格式:.jpg.png.gif.tif.bmp /// 类型 + /// 是否公开 /// - private async Task HandleUploadFile(IFormFile file, string savePath, string allowSuffix = "", string fileType = "") + private async Task HandleUploadFile(IFormFile file, string savePath, string allowSuffix = "", string fileType = "", bool isPublic = false) { if (file == null) throw Oops.Oh(ErrorCodeEnum.D8000); @@ -354,7 +359,8 @@ public class SysFileService : IDynamicApiController, ITransient SizeKb = sizeKb, FilePath = path, FileMd5 = fileMd5, - FileType = fileType + FileType = fileType, + IsPublic = isPublic, }; var finalName = newFile.Id + suffix; // 文件最终名称 From 61b5bef016b06e6739d49f2728bce374b784eef1 Mon Sep 17 00:00:00 2001 From: 362270511 <362270511@qq.com> Date: Tue, 13 Aug 2024 17:07:13 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Admin.NET/Admin.NET.Co?= =?UTF-8?q?re/Service/File/Dto/FileInput.cs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 文件管理功能添加是否公开附件功能 --- .../Service/File/Dto/FileInput.cs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs b/Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs index 04e10193..93933b7f 100644 --- a/Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs +++ b/Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs @@ -18,6 +18,12 @@ public class FileInput : BaseIdInput /// public string FileType { get; set; } + /// + /// 是否公开 + /// 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 + /// + public bool IsPublic { get; set; } + /// /// 文件Url /// @@ -72,6 +78,12 @@ public class UploadFileFromBase64Input /// 文件类型 /// public string FileType { get; set; } + + /// + /// 是否公开 + /// 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 + /// + public bool IsPublic { get; set; } } /// @@ -90,6 +102,12 @@ public class FileUploadInput /// public string FileType { get; set; } + /// + /// 是否公开 + /// 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 + /// + public bool IsPublic { get; set; } + /// /// 文件路径 /// @@ -168,6 +186,12 @@ public class FileOutput /// public string FileType { get; set; } + /// + /// 是否公开 + /// 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 + /// + public bool IsPublic { get; set; } + /// /// 上传人 /// From a78b0ef713b31f2312e516d299ddbe210a5fe1dd Mon Sep 17 00:00:00 2001 From: 362270511 <362270511@qq.com> Date: Tue, 13 Aug 2024 17:08:14 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Web/src/api-services/a?= =?UTF-8?q?pis/sys-file-api.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 文件管理功能添加是否公开附件功能 --- Web/src/api-services/apis/sys-file-api.ts | 44 +++++++++++++++-------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/Web/src/api-services/apis/sys-file-api.ts b/Web/src/api-services/apis/sys-file-api.ts index d1077a0f..c0054725 100644 --- a/Web/src/api-services/apis/sys-file-api.ts +++ b/Web/src/api-services/apis/sys-file-api.ts @@ -183,11 +183,12 @@ export const SysFileApiAxiosParamCreator = function (configuration?: Configurati * @param {number} id 主键Id * @param {string} [fileName] 文件名称 * @param {string} [fileType] 文件类型 + * @param {boolean} [isPublic] 是否公开 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 * @param {string} [url] 文件Url * @param {*} [options] Override http request option. * @throws {RequiredError} */ - apiSysFileFileGet: async (id: number, fileName?: string, fileType?: string, url?: string, options: AxiosRequestConfig = {}): Promise => { + apiSysFileFileGet: async (id: number, fileName?: string, fileType?: string, isPublic?: boolean, url?: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined if (id === null || id === undefined) { throw new RequiredError('id','Required parameter id was null or undefined when calling apiSysFileFileGet.'); @@ -220,6 +221,10 @@ export const SysFileApiAxiosParamCreator = function (configuration?: Configurati localVarQueryParameter['FileType'] = fileType; } + if (isPublic !== undefined) { + localVarQueryParameter['IsPublic'] = isPublic; + } + if (url !== undefined) { localVarQueryParameter['Url'] = url; } @@ -557,11 +562,12 @@ export const SysFileApiAxiosParamCreator = function (configuration?: Configurati * @summary 上传文件 🔖 * @param {Blob} [file] * @param {string} [fileType] + * @param {boolean} [isPublic] * @param {string} [path] * @param {*} [options] Override http request option. * @throws {RequiredError} */ - apiSysFileUploadFilePostForm: async (file?: Blob, fileType?: string, path?: string, options: AxiosRequestConfig = {}): Promise => { + apiSysFileUploadFilePostForm: async (file?: Blob, fileType?: string, isPublic?: boolean, path?: string, options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/api/sysFile/uploadFile`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, 'https://example.com'); @@ -592,6 +598,10 @@ export const SysFileApiAxiosParamCreator = function (configuration?: Configurati localVarFormParams.append('FileType', fileType as any); } + if (isPublic !== undefined) { + localVarFormParams.append('IsPublic', isPublic as any); + } + if (path !== undefined) { localVarFormParams.append('Path', path as any); } @@ -776,12 +786,13 @@ export const SysFileApiFp = function(configuration?: Configuration) { * @param {number} id 主键Id * @param {string} [fileName] 文件名称 * @param {string} [fileType] 文件类型 + * @param {boolean} [isPublic] 是否公开 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 * @param {string} [url] 文件Url * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async apiSysFileFileGet(id: number, fileName?: string, fileType?: string, url?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { - const localVarAxiosArgs = await SysFileApiAxiosParamCreator(configuration).apiSysFileFileGet(id, fileName, fileType, url, options); + async apiSysFileFileGet(id: number, fileName?: string, fileType?: string, isPublic?: boolean, url?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysFileApiAxiosParamCreator(configuration).apiSysFileFileGet(id, fileName, fileType, isPublic, url, options); return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; return axios.request(axiosRequestArgs); @@ -879,12 +890,13 @@ export const SysFileApiFp = function(configuration?: Configuration) { * @summary 上传文件 🔖 * @param {Blob} [file] * @param {string} [fileType] + * @param {boolean} [isPublic] * @param {string} [path] * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, path?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { - const localVarAxiosArgs = await SysFileApiAxiosParamCreator(configuration).apiSysFileUploadFilePostForm(file, fileType, path, options); + async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, isPublic?: boolean, path?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysFileApiAxiosParamCreator(configuration).apiSysFileUploadFilePostForm(file, fileType, isPublic, path, options); return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; return axios.request(axiosRequestArgs); @@ -963,12 +975,13 @@ export const SysFileApiFactory = function (configuration?: Configuration, basePa * @param {number} id 主键Id * @param {string} [fileName] 文件名称 * @param {string} [fileType] 文件类型 + * @param {boolean} [isPublic] 是否公开 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 * @param {string} [url] 文件Url * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async apiSysFileFileGet(id: number, fileName?: string, fileType?: string, url?: string, options?: AxiosRequestConfig): Promise> { - return SysFileApiFp(configuration).apiSysFileFileGet(id, fileName, fileType, url, options).then((request) => request(axios, basePath)); + async apiSysFileFileGet(id: number, fileName?: string, fileType?: string, isPublic?: boolean, url?: string, options?: AxiosRequestConfig): Promise> { + return SysFileApiFp(configuration).apiSysFileFileGet(id, fileName, fileType, isPublic, url, options).then((request) => request(axios, basePath)); }, /** * @@ -1038,12 +1051,13 @@ export const SysFileApiFactory = function (configuration?: Configuration, basePa * @summary 上传文件 🔖 * @param {Blob} [file] * @param {string} [fileType] + * @param {boolean} [isPublic] * @param {string} [path] * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, path?: string, options?: AxiosRequestConfig): Promise> { - return SysFileApiFp(configuration).apiSysFileUploadFilePostForm(file, fileType, path, options).then((request) => request(axios, basePath)); + async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, isPublic?: boolean, path?: string, options?: AxiosRequestConfig): Promise> { + return SysFileApiFp(configuration).apiSysFileUploadFilePostForm(file, fileType, isPublic, path, options).then((request) => request(axios, basePath)); }, /** * @@ -1114,13 +1128,14 @@ export class SysFileApi extends BaseAPI { * @param {number} id 主键Id * @param {string} [fileName] 文件名称 * @param {string} [fileType] 文件类型 + * @param {boolean} [isPublic] 是否公开 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 * @param {string} [url] 文件Url * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof SysFileApi */ - public async apiSysFileFileGet(id: number, fileName?: string, fileType?: string, url?: string, options?: AxiosRequestConfig) : Promise> { - return SysFileApiFp(this.configuration).apiSysFileFileGet(id, fileName, fileType, url, options).then((request) => request(this.axios, this.basePath)); + public async apiSysFileFileGet(id: number, fileName?: string, fileType?: string, isPublic?: boolean, url?: string, options?: AxiosRequestConfig) : Promise> { + return SysFileApiFp(this.configuration).apiSysFileFileGet(id, fileName, fileType, isPublic, url, options).then((request) => request(this.axios, this.basePath)); } /** * @@ -1196,13 +1211,14 @@ export class SysFileApi extends BaseAPI { * @summary 上传文件 🔖 * @param {Blob} [file] * @param {string} [fileType] + * @param {boolean} [isPublic] * @param {string} [path] * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof SysFileApi */ - public async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, path?: string, options?: AxiosRequestConfig) : Promise> { - return SysFileApiFp(this.configuration).apiSysFileUploadFilePostForm(file, fileType, path, options).then((request) => request(this.axios, this.basePath)); + public async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, isPublic?: boolean, path?: string, options?: AxiosRequestConfig) : Promise> { + return SysFileApiFp(this.configuration).apiSysFileUploadFilePostForm(file, fileType, isPublic, path, options).then((request) => request(this.axios, this.basePath)); } /** * From 43be46338d9a7ac0d55d304508f190fd76f4e41d Mon Sep 17 00:00:00 2001 From: 362270511 <362270511@qq.com> Date: Tue, 13 Aug 2024 17:08:49 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Web/src/api-services/m?= =?UTF-8?q?odels/file-input.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 文件管理功能添加是否公开附件功能 --- Web/src/api-services/models/file-input.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Web/src/api-services/models/file-input.ts b/Web/src/api-services/models/file-input.ts index 68161eac..13792ff4 100644 --- a/Web/src/api-services/models/file-input.ts +++ b/Web/src/api-services/models/file-input.ts @@ -44,6 +44,14 @@ export interface FileInput { */ fileType?: string | null; + /** + * 是否公开 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 + * + * @type {boolean} + * @memberof FileInput + */ + isPublic?: boolean; + /** * 文件Url * From 3fb475c8825297b31db2cdee108203a1c24e1412 Mon Sep 17 00:00:00 2001 From: 362270511 <362270511@qq.com> Date: Tue, 13 Aug 2024 17:09:16 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Web/src/api-services/m?= =?UTF-8?q?odels/file-output.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 文件管理功能添加是否公开附件功能 --- Web/src/api-services/models/file-output.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Web/src/api-services/models/file-output.ts b/Web/src/api-services/models/file-output.ts index fb5459c4..9ac52c85 100644 --- a/Web/src/api-services/models/file-output.ts +++ b/Web/src/api-services/models/file-output.ts @@ -76,6 +76,14 @@ export interface FileOutput { */ fileType?: string | null; + /** + * 是否公开 如果设置true,所有人都可以查看,默认只有自己或有权限的人可以查看 + * + * @type {boolean} + * @memberof FileOutput + */ + isPublic?: boolean; + /** * 上传人 * From 62eee58b5a5641be39c235ac713ce5f492e3879a Mon Sep 17 00:00:00 2001 From: 362270511 <362270511@qq.com> Date: Tue, 13 Aug 2024 17:09:46 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Web/src/views/system/f?= =?UTF-8?q?ile/index.vue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 文件管理功能添加是否公开附件功能 --- Web/src/views/system/file/index.vue | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Web/src/views/system/file/index.vue b/Web/src/views/system/file/index.vue index 1c051e4f..c60ab2ae 100644 --- a/Web/src/views/system/file/index.vue +++ b/Web/src/views/system/file/index.vue @@ -45,6 +45,10 @@ +