From 661293c189a3abf3cdc953b5225192372f57930d Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 27 Oct 2024 00:52:26 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=B4=E5=83=8F=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/system/basic/service/file-service.ts | 3 +- .../src/plugin/fast-crud/index.tsx | 11 +++---- .../src/views/sys/authority/user/crud.tsx | 32 +++++++++++++++++++ .../sys/authority/service/user-service.ts | 14 +++++++- 4 files changed, 51 insertions(+), 9 deletions(-) diff --git a/packages/libs/lib-server/src/system/basic/service/file-service.ts b/packages/libs/lib-server/src/system/basic/service/file-service.ts index e6343bb7..c60d30e7 100644 --- a/packages/libs/lib-server/src/system/basic/service/file-service.ts +++ b/packages/libs/lib-server/src/system/basic/service/file-service.ts @@ -1,4 +1,4 @@ -import { Provide } from '@midwayjs/core'; +import { Provide, Scope, ScopeEnum } from '@midwayjs/core'; import dayjs from 'dayjs'; import path from 'path'; import fs from 'fs'; @@ -14,6 +14,7 @@ export const uploadTmpFileCacheKey = 'tmpfile_key_'; /** */ @Provide() +@Scope(ScopeEnum.Singleton) export class FileService { async saveFile(userId: number, tmpCacheKey: any, permission: 'public' | 'private') { if (tmpCacheKey.startsWith(`/${permission}`)) { diff --git a/packages/ui/certd-client/src/plugin/fast-crud/index.tsx b/packages/ui/certd-client/src/plugin/fast-crud/index.tsx index a838f2aa..d7b7cd38 100644 --- a/packages/ui/certd-client/src/plugin/fast-crud/index.tsx +++ b/packages/ui/certd-client/src/plugin/fast-crud/index.tsx @@ -185,7 +185,8 @@ function install(app: App, options: any = {}) { defaultType: "form", form: { keepName: true, - action: "http://www.docmirror.cn:7070/api/upload/form/upload", + type: "form", + action: "/basic/file/upload", name: "file", withCredentials: false, uploadRequest: async ({ action, file, onProgress }: any) => { @@ -205,12 +206,8 @@ function install(app: App, options: any = {}) { } }); }, - successHandle(ret: any) { - // 上传完成后的结果处理, 此处应返回格式为{url:xxx} - return { - url: "http://www.docmirror.cn:7070" + ret, - key: ret.replace("/api/upload/form/download?key=", "") - }; + successHandle(res: any) { + return res; } } }); diff --git a/packages/ui/certd-client/src/views/sys/authority/user/crud.tsx b/packages/ui/certd-client/src/views/sys/authority/user/crud.tsx index 99a37397..25ca3db4 100644 --- a/packages/ui/certd-client/src/views/sys/authority/user/crud.tsx +++ b/packages/ui/certd-client/src/views/sys/authority/user/crud.tsx @@ -1,5 +1,6 @@ import * as api from "./api"; import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; +import { useUserStore } from "/@/store/modules/user"; export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { const pageRequest = async (query: UserPageQuery): Promise => { @@ -17,6 +18,8 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti return await api.AddObj(form); }; + const userStore = useUserStore(); + return { crudOptions: { request: { @@ -114,6 +117,35 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti style: { height: "30px", width: "auto" + }, + buildUrl(key: string) { + return `/api/basic/file/download?&key=` + key; + } + } + }, + form: { + component: { + vModel: "modelValue", + valueType: "key", + cropper: { + aspectRatio: 1, + autoCropArea: 1, + viewMode: 0 + }, + onReady: null, + uploader: { + type: "form", + action: "/basic/file/upload", + name: "file", + headers: { + Authorization: "Bearer " + userStore.getToken + }, + successHandle(res: any) { + return res; + } + }, + buildUrl(key: string) { + return `/api/basic/file/download?&key=` + key; } } } diff --git a/packages/ui/certd-server/src/modules/sys/authority/service/user-service.ts b/packages/ui/certd-server/src/modules/sys/authority/service/user-service.ts index ab6a7435..a6a0d27b 100644 --- a/packages/ui/certd-server/src/modules/sys/authority/service/user-service.ts +++ b/packages/ui/certd-server/src/modules/sys/authority/service/user-service.ts @@ -4,7 +4,7 @@ import { Repository } from 'typeorm'; import { UserEntity } from '../entity/user.js'; import * as _ from 'lodash-es'; import md5 from 'md5'; -import { CommonException } from '@certd/lib-server'; +import { CommonException, FileService } from '@certd/lib-server'; import { BaseService } from '@certd/lib-server'; import { RoleService } from './role-service.js'; import { PermissionService } from './permission-service.js'; @@ -34,6 +34,9 @@ export class UserService extends BaseService { @Inject() sysSettingsService: SysSettingsService; + @Inject() + fileService: FileService; + //@ts-ignore getRepository() { return this.repository; @@ -68,6 +71,11 @@ export class UserService extends BaseService { const plainPassword = param.password ?? RandomUtil.randomStr(6); param.passwordVersion = 2; param.password = await this.genPassword(plainPassword, param.passwordVersion); // 默认密码 建议未改密码不能登陆 + + if (param.avatar) { + param.avatar = await this.fileService.saveFile(0, param.avatar, 'public'); + } + await super.add(param); //添加角色 if (param.roles && param.roles.length > 0) { @@ -98,6 +106,10 @@ export class UserService extends BaseService { } else { delete param.password; } + + if (param.avatar) { + param.avatar = await this.fileService.saveFile(userInfo.id, param.avatar, 'public'); + } await super.update(param); await this.roleService.updateRoles(param.id, param.roles); }