diff --git a/packages/ui/certd-client/src/locales/langs/en-US/authentication.ts b/packages/ui/certd-client/src/locales/langs/en-US/authentication.ts index d133bf28..33b150b3 100644 --- a/packages/ui/certd-client/src/locales/langs/en-US/authentication.ts +++ b/packages/ui/certd-client/src/locales/langs/en-US/authentication.ts @@ -81,4 +81,5 @@ export default { nickName: "Nickname", phoneNumber: "Phone Number", changePassword: "Change Password", + updateProfile: "Update Profile", }; diff --git a/packages/ui/certd-client/src/locales/langs/en-US/common.ts b/packages/ui/certd-client/src/locales/langs/en-US/common.ts index d461d909..34777d30 100644 --- a/packages/ui/certd-client/src/locales/langs/en-US/common.ts +++ b/packages/ui/certd-client/src/locales/langs/en-US/common.ts @@ -19,4 +19,5 @@ export default { create: "Create", yes: "Yes", no: "No", + handle: "Handle", }; diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/authentication.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/authentication.ts index 2bd39d05..c71bb400 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/authentication.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/authentication.ts @@ -82,4 +82,5 @@ export default { nickName: "昵称", phoneNumber: "手机号", changePassword: "修改密码", + updateProfile: "修改个人信息", }; diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/common.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/common.ts index e9ba4012..9cec01a9 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/common.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/common.ts @@ -19,4 +19,5 @@ export default { create: "新增", yes: "是", no: "否", + handle: "操作", }; diff --git a/packages/ui/certd-client/src/views/certd/mine/api.ts b/packages/ui/certd-client/src/views/certd/mine/api.ts index 7b1805c9..aa996cf5 100644 --- a/packages/ui/certd-client/src/views/certd/mine/api.ts +++ b/packages/ui/certd-client/src/views/certd/mine/api.ts @@ -14,3 +14,11 @@ export async function changePassword(form: any) { data: form, }); } + +export async function UpdateProfile(form: any) { + return await request({ + url: "/mine/updateProfile", + method: "POST", + data: form, + }); +} diff --git a/packages/ui/certd-client/src/views/certd/mine/use.tsx b/packages/ui/certd-client/src/views/certd/mine/use.tsx new file mode 100644 index 00000000..bebefc2d --- /dev/null +++ b/packages/ui/certd-client/src/views/certd/mine/use.tsx @@ -0,0 +1,110 @@ +// useUserProfile, 获取 openEditProfileDialog ,参考 useTemplate方法 +import { useFormWrapper } from "@fast-crud/fast-crud"; +import { ref } from "vue"; +import { cloneDeep, merge } from "lodash-es"; + +// 假设的 API 导入 +import * as userProfileApi from "./api"; +import { useUserStore } from "/@/store/user"; +import { useI18n } from "/src/locales"; + +/** + * 获取用户资料编辑相关功能 + * @returns {{openEditProfileDialog: openEditProfileDialog}} + */ +export function useUserProfile() { + const { openCrudFormDialog } = useFormWrapper(); + const wrapperRef = ref(); + async function openEditProfileDialog(req: { onUpdated?: (ctx: any) => void }) { + const detail = await userProfileApi.getMineInfo(); + if (!detail) { + throw new Error("用户资料不存在"); + } + + const { t } = useI18n(); + + const userStore = useUserStore(); + const userProfileFormRef = ref(); + async function doSubmit(opts: { form: any }) { + const form = opts.form; + const { id } = await userProfileApi.UpdateProfile(form); + if (req.onUpdated) { + req.onUpdated({ id }); + } + } + + const crudOptions: any = { + form: { + doSubmit, + wrapper: { + title: `编辑用户资料`, + width: 1100, + onOpened(opts: { form: any }) { + merge(opts.form, detail); + }, + }, + }, + columns: { + nickName: { + title: t("certd.nickName"), + type: "text", + form: { + component: { + placeholder: t("certd.nickName"), + }, + rules: [{ required: true, message: t("certd.nickName") }], + }, + }, + avatar: { + title: t("certd.avatar"), + type: "cropper-uploader", + column: { + width: 70, + component: { + 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; + }, + }, + }, + }, + }, + }; + + const wrapper = await openCrudFormDialog({ crudOptions }); + wrapperRef.value = wrapper; + } + + return { + openEditProfileDialog, + }; +} diff --git a/packages/ui/certd-client/src/views/certd/mine/user-profile.vue b/packages/ui/certd-client/src/views/certd/mine/user-profile.vue index 0e2d29ee..bd3ecb60 100644 --- a/packages/ui/certd-client/src/views/certd/mine/user-profile.vue +++ b/packages/ui/certd-client/src/views/certd/mine/user-profile.vue @@ -4,19 +4,21 @@