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 @@
+
+
+
+
+
+
+