From 8d4378ad7f6535161c8384fe648c9f5a93c9fddc Mon Sep 17 00:00:00 2001 From: dap <15891557205@163.com> Date: Thu, 26 Sep 2024 10:06:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/views/system/user/info.tsx | 127 ++++++++++++++++++ .../src/views/system/user/user-info-modal.vue | 56 ++++++++ 2 files changed, 183 insertions(+) create mode 100644 apps/web-antd/src/views/system/user/info.tsx create mode 100644 apps/web-antd/src/views/system/user/user-info-modal.vue diff --git a/apps/web-antd/src/views/system/user/info.tsx b/apps/web-antd/src/views/system/user/info.tsx new file mode 100644 index 00000000..68009601 --- /dev/null +++ b/apps/web-antd/src/views/system/user/info.tsx @@ -0,0 +1,127 @@ +import type { DescItem } from '#/components/description'; + +import { DictEnum } from '@vben/constants'; + +import { Tag } from 'ant-design-vue'; +import dayjs from 'dayjs'; +import duration from 'dayjs/plugin/duration'; + +import { renderDict } from '#/utils/render'; + +dayjs.extend(duration); + +function renderTags(list: string[]) { + return ( +
+ {list.map((item) => ( + {item} + ))} +
+ ); +} + +export const descSchema: DescItem[] = [ + { + field: 'userId', + label: '用户ID', + }, + { + field: 'status', + label: '用户状态', + render(value) { + return renderDict(value, DictEnum.SYS_NORMAL_DISABLE); + }, + }, + { + field: 'nickName', + label: '用户信息', + render(_, data) { + const { deptName = '暂无部门信息', nickName, userName } = data; + // 为了兼容新版本和旧版本 + let currentDept = deptName; + if (data.dept && data.dept.deptName) { + currentDept = data.dept.deptName; + } + return `${userName} / ${nickName} / ${currentDept}`; + }, + }, + { + field: 'phonenumber', + label: '手机号', + render(value) { + return value || '未设置手机号码'; + }, + }, + { + field: 'email', + label: '邮箱', + render(value) { + return value || '未设置邮箱地址'; + }, + }, + { + field: 'postNames', + label: '岗位', + render(value) { + if (Array.isArray(value) && value.length === 0) { + return '暂无信息'; + } + return renderTags(value); + }, + }, + { + field: 'roleNames', + label: '权限', + render(value) { + if (Array.isArray(value) && value.length === 0) { + return '暂无信息'; + } + return renderTags(value); + }, + }, + { + field: 'createTime', + label: '创建时间', + }, + { + field: 'loginIp', + label: '上次登录IP', + render(value) { + return value || 从未登录过; + }, + }, + { + field: 'loginDate', + label: '上次登录时间', + render(value) { + if (!value) { + return 从未登录过; + } + // 默认en显示 + dayjs.locale('zh-cn'); + // 计算相差秒数 + const diffSeconds = dayjs(new Date()).diff(dayjs(value), 'second'); + /** + * 转为时间显示(x月 x天) + * https://dayjs.fenxianglu.cn/category/duration.html#%E4%BA%BA%E6%80%A7%E5%8C%96 + * + */ + const diffText = dayjs.duration(diffSeconds, 'seconds').humanize(); + return ( +
+ {value} + + {diffText}前 + +
+ ); + }, + }, + { + field: 'remark', + label: '备注', + render(value) { + return value || '无'; + }, + }, +]; diff --git a/apps/web-antd/src/views/system/user/user-info-modal.vue b/apps/web-antd/src/views/system/user/user-info-modal.vue new file mode 100644 index 00000000..63491e42 --- /dev/null +++ b/apps/web-antd/src/views/system/user/user-info-modal.vue @@ -0,0 +1,56 @@ + + +