diff --git a/apps/web-antd/src/locales/langs/en-US/page.json b/apps/web-antd/src/locales/langs/en-US/page.json index 409137ee3..40a19ac6b 100644 --- a/apps/web-antd/src/locales/langs/en-US/page.json +++ b/apps/web-antd/src/locales/langs/en-US/page.json @@ -4,7 +4,8 @@ "register": "Register", "codeLogin": "Code Login", "qrcodeLogin": "Qr Code Login", - "forgetPassword": "Forget Password" + "forgetPassword": "Forget Password", + "profile": "Profile" }, "dashboard": { "title": "Dashboard", diff --git a/apps/web-antd/src/locales/langs/zh-CN/page.json b/apps/web-antd/src/locales/langs/zh-CN/page.json index f56160a6a..5d1c246e1 100644 --- a/apps/web-antd/src/locales/langs/zh-CN/page.json +++ b/apps/web-antd/src/locales/langs/zh-CN/page.json @@ -4,7 +4,8 @@ "register": "注册", "codeLogin": "验证码登录", "qrcodeLogin": "二维码登录", - "forgetPassword": "忘记密码" + "forgetPassword": "忘记密码", + "profile": "个人中心" }, "dashboard": { "title": "概览", diff --git a/apps/web-antd/src/views/_core/profile/base-setting.vue b/apps/web-antd/src/views/_core/profile/base-setting.vue new file mode 100644 index 000000000..aa8a4c260 --- /dev/null +++ b/apps/web-antd/src/views/_core/profile/base-setting.vue @@ -0,0 +1,65 @@ + + diff --git a/apps/web-antd/src/views/_core/profile/notification-setting.vue b/apps/web-antd/src/views/_core/profile/notification-setting.vue new file mode 100644 index 000000000..324a4b393 --- /dev/null +++ b/apps/web-antd/src/views/_core/profile/notification-setting.vue @@ -0,0 +1,31 @@ + + diff --git a/apps/web-antd/src/views/_core/profile/password-setting.vue b/apps/web-antd/src/views/_core/profile/password-setting.vue new file mode 100644 index 000000000..b246bc37e --- /dev/null +++ b/apps/web-antd/src/views/_core/profile/password-setting.vue @@ -0,0 +1,66 @@ + + diff --git a/apps/web-antd/src/views/_core/profile/security-setting.vue b/apps/web-antd/src/views/_core/profile/security-setting.vue new file mode 100644 index 000000000..be30db58e --- /dev/null +++ b/apps/web-antd/src/views/_core/profile/security-setting.vue @@ -0,0 +1,43 @@ + + diff --git a/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue index 02f509123..6ff52086f 100644 --- a/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue +++ b/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue @@ -24,7 +24,7 @@ onMounted(() => { { name: '定制', value: 310 }, { name: '技术支持', value: 274 }, { name: '远程', value: 400 }, - ].sort((a, b) => { + ].toSorted((a, b) => { return a.value - b.value; }), name: '商业占比', diff --git a/apps/web-ele/src/locales/langs/en-US/page.json b/apps/web-ele/src/locales/langs/en-US/page.json index 00a8c90b2..130cb88ac 100644 --- a/apps/web-ele/src/locales/langs/en-US/page.json +++ b/apps/web-ele/src/locales/langs/en-US/page.json @@ -4,7 +4,8 @@ "register": "Register", "codeLogin": "Code Login", "qrcodeLogin": "Qr Code Login", - "forgetPassword": "Forget Password" + "forgetPassword": "Forget Password", + "profile": "Profile" }, "dashboard": { "title": "Dashboard", diff --git a/apps/web-ele/src/locales/langs/zh-CN/page.json b/apps/web-ele/src/locales/langs/zh-CN/page.json index 30180ddf8..8a30c0c7e 100644 --- a/apps/web-ele/src/locales/langs/zh-CN/page.json +++ b/apps/web-ele/src/locales/langs/zh-CN/page.json @@ -4,7 +4,8 @@ "register": "注册", "codeLogin": "验证码登录", "qrcodeLogin": "二维码登录", - "forgetPassword": "忘记密码" + "forgetPassword": "忘记密码", + "profile": "个人中心" }, "dashboard": { "title": "概览", diff --git a/apps/web-ele/src/views/_core/profile/base-setting.vue b/apps/web-ele/src/views/_core/profile/base-setting.vue new file mode 100644 index 000000000..aa8a4c260 --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/base-setting.vue @@ -0,0 +1,65 @@ + + diff --git a/apps/web-ele/src/views/_core/profile/notification-setting.vue b/apps/web-ele/src/views/_core/profile/notification-setting.vue new file mode 100644 index 000000000..324a4b393 --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/notification-setting.vue @@ -0,0 +1,31 @@ + + diff --git a/apps/web-ele/src/views/_core/profile/password-setting.vue b/apps/web-ele/src/views/_core/profile/password-setting.vue new file mode 100644 index 000000000..4d80d74c6 --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/password-setting.vue @@ -0,0 +1,66 @@ + + diff --git a/apps/web-ele/src/views/_core/profile/security-setting.vue b/apps/web-ele/src/views/_core/profile/security-setting.vue new file mode 100644 index 000000000..be30db58e --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/security-setting.vue @@ -0,0 +1,43 @@ + + diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue index 02f509123..6ff52086f 100644 --- a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue +++ b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue @@ -24,7 +24,7 @@ onMounted(() => { { name: '定制', value: 310 }, { name: '技术支持', value: 274 }, { name: '远程', value: 400 }, - ].sort((a, b) => { + ].toSorted((a, b) => { return a.value - b.value; }), name: '商业占比', diff --git a/apps/web-naive/src/locales/langs/en-US/page.json b/apps/web-naive/src/locales/langs/en-US/page.json index 00a8c90b2..130cb88ac 100644 --- a/apps/web-naive/src/locales/langs/en-US/page.json +++ b/apps/web-naive/src/locales/langs/en-US/page.json @@ -4,7 +4,8 @@ "register": "Register", "codeLogin": "Code Login", "qrcodeLogin": "Qr Code Login", - "forgetPassword": "Forget Password" + "forgetPassword": "Forget Password", + "profile": "Profile" }, "dashboard": { "title": "Dashboard", diff --git a/apps/web-naive/src/locales/langs/zh-CN/page.json b/apps/web-naive/src/locales/langs/zh-CN/page.json index eefc4924b..d2af3b1eb 100644 --- a/apps/web-naive/src/locales/langs/zh-CN/page.json +++ b/apps/web-naive/src/locales/langs/zh-CN/page.json @@ -4,7 +4,8 @@ "register": "注册", "codeLogin": "验证码登录", "qrcodeLogin": "二维码登录", - "forgetPassword": "忘记密码" + "forgetPassword": "忘记密码", + "profile": "个人中心" }, "dashboard": { "title": "概览", diff --git a/apps/web-naive/src/views/_core/profile/base-setting.vue b/apps/web-naive/src/views/_core/profile/base-setting.vue new file mode 100644 index 000000000..aa8a4c260 --- /dev/null +++ b/apps/web-naive/src/views/_core/profile/base-setting.vue @@ -0,0 +1,65 @@ + + diff --git a/apps/web-naive/src/views/_core/profile/index.vue b/apps/web-naive/src/views/_core/profile/index.vue new file mode 100644 index 000000000..8740894e3 --- /dev/null +++ b/apps/web-naive/src/views/_core/profile/index.vue @@ -0,0 +1,49 @@ + + diff --git a/apps/web-naive/src/views/_core/profile/notification-setting.vue b/apps/web-naive/src/views/_core/profile/notification-setting.vue new file mode 100644 index 000000000..324a4b393 --- /dev/null +++ b/apps/web-naive/src/views/_core/profile/notification-setting.vue @@ -0,0 +1,31 @@ + + diff --git a/apps/web-naive/src/views/_core/profile/password-setting.vue b/apps/web-naive/src/views/_core/profile/password-setting.vue new file mode 100644 index 000000000..1132a51fb --- /dev/null +++ b/apps/web-naive/src/views/_core/profile/password-setting.vue @@ -0,0 +1,66 @@ + + diff --git a/apps/web-naive/src/views/_core/profile/security-setting.vue b/apps/web-naive/src/views/_core/profile/security-setting.vue new file mode 100644 index 000000000..be30db58e --- /dev/null +++ b/apps/web-naive/src/views/_core/profile/security-setting.vue @@ -0,0 +1,43 @@ + + diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue index 02f509123..6ff52086f 100644 --- a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue +++ b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue @@ -24,7 +24,7 @@ onMounted(() => { { name: '定制', value: 310 }, { name: '技术支持', value: 274 }, { name: '远程', value: 400 }, - ].sort((a, b) => { + ].toSorted((a, b) => { return a.value - b.value; }), name: '商业占比', diff --git a/apps/web-tdesign/package.json b/apps/web-tdesign/package.json index 6386cce56..c84b35a10 100644 --- a/apps/web-tdesign/package.json +++ b/apps/web-tdesign/package.json @@ -44,14 +44,11 @@ "@vueuse/core": "catalog:", "cropperjs": "catalog:", "dayjs": "catalog:", - "lodash-es": "^4.17.21", + "es-toolkit": "catalog:", "pinia": "catalog:", - "tdesign-vue-next": "^1.17.1", + "tdesign-vue-next": "catalog:", "tinymce": "catalog:", "vue": "catalog:", "vue-router": "catalog:" - }, - "devDependencies": { - "@types/lodash-es": "^4.17.12" } } diff --git a/apps/web-tdesign/src/app.vue b/apps/web-tdesign/src/app.vue index 57d5951cc..f37688b67 100644 --- a/apps/web-tdesign/src/app.vue +++ b/apps/web-tdesign/src/app.vue @@ -5,7 +5,7 @@ import { onMounted } from 'vue'; import { usePreferences } from '@vben/preferences'; -import { merge } from 'lodash-es'; +import { merge } from 'es-toolkit/compat'; import { ConfigProvider } from 'tdesign-vue-next'; import zhConfig from 'tdesign-vue-next/es/locale/zh_CN'; diff --git a/apps/web-tdesign/src/bootstrap.ts b/apps/web-tdesign/src/bootstrap.ts index edcccea4c..732030e1a 100644 --- a/apps/web-tdesign/src/bootstrap.ts +++ b/apps/web-tdesign/src/bootstrap.ts @@ -5,7 +5,6 @@ import { registerLoadingDirective } from '@vben/common-ui/es/loading'; import { preferences } from '@vben/preferences'; import { initStores } from '@vben/stores'; import '@vben/styles'; -import '@vben/styles/antd'; import { useTitle } from '@vueuse/core'; @@ -16,7 +15,9 @@ import { initSetupVbenForm } from './adapter/form'; import App from './app.vue'; import { router } from './router'; +// import '@vben/styles/antd'; // 引入组件库的少量全局样式变量 +import 'tdesign-vue-next/es/style/index.css'; async function bootstrap(namespace: string) { // 初始化组件适配器 diff --git a/apps/web-tdesign/src/layouts/basic.vue b/apps/web-tdesign/src/layouts/basic.vue index 805b8a73d..2226c68a2 100644 --- a/apps/web-tdesign/src/layouts/basic.vue +++ b/apps/web-tdesign/src/layouts/basic.vue @@ -2,6 +2,7 @@ import type { NotificationItem } from '@vben/layouts'; import { computed, ref, watch } from 'vue'; +import { useRouter } from 'vue-router'; import { AuthenticationLoginExpiredModal } from '@vben/common-ui'; import { VBEN_DOC_URL, VBEN_GITHUB_URL } from '@vben/constants'; @@ -23,6 +24,7 @@ import LoginForm from '#/views/_core/authentication/login.vue'; const notifications = ref([ { + id: 1, avatar: 'https://avatar.vercel.sh/vercel.svg?text=VB', date: '3小时前', isRead: true, @@ -30,6 +32,7 @@ const notifications = ref([ title: '收到了 14 份新周报', }, { + id: 2, avatar: 'https://avatar.vercel.sh/1', date: '刚刚', isRead: false, @@ -37,6 +40,7 @@ const notifications = ref([ title: '朱偏右 回复了你', }, { + id: 3, avatar: 'https://avatar.vercel.sh/1', date: '2024-01-01', isRead: false, @@ -44,14 +48,34 @@ const notifications = ref([ title: '曲丽丽 评论了你', }, { + id: 4, avatar: 'https://avatar.vercel.sh/satori', date: '1天前', isRead: false, message: '描述信息描述信息描述信息', title: '代办提醒', }, + { + id: 5, + avatar: 'https://avatar.vercel.sh/satori', + date: '1天前', + isRead: false, + message: '描述信息描述信息描述信息', + title: '跳转Workspace示例', + link: '/workspace', + }, + { + id: 6, + avatar: 'https://avatar.vercel.sh/satori', + date: '1天前', + isRead: false, + message: '描述信息描述信息描述信息', + title: '跳转外部链接示例', + link: 'https://doc.vben.pro', + }, ]); +const router = useRouter(); const userStore = useUserStore(); const authStore = useAuthStore(); const accessStore = useAccessStore(); @@ -61,6 +85,13 @@ const showDot = computed(() => ); const menus = computed(() => [ + { + handler: () => { + router.push({ name: 'Profile' }); + }, + icon: 'lucide:user', + text: $t('page.auth.profile'), + }, { handler: () => { openWindow(VBEN_DOC_URL, { @@ -102,6 +133,17 @@ function handleNoticeClear() { notifications.value = []; } +function markRead(id: number | string) { + const item = notifications.value.find((item) => item.id === id); + if (item) { + item.isRead = true; + } +} + +function remove(id: number | string) { + notifications.value = notifications.value.filter((item) => item.id !== id); +} + function handleMakeAll() { notifications.value.forEach((item) => (item.isRead = true)); } @@ -144,6 +186,8 @@ watch( :dot="showDot" :notifications="notifications" @clear="handleNoticeClear" + @read="(item) => item.id && markRead(item.id)" + @remove="(item) => item.id && remove(item.id)" @make-all="handleMakeAll" /> diff --git a/apps/web-tdesign/src/locales/langs/en-US/page.json b/apps/web-tdesign/src/locales/langs/en-US/page.json index 00a8c90b2..130cb88ac 100644 --- a/apps/web-tdesign/src/locales/langs/en-US/page.json +++ b/apps/web-tdesign/src/locales/langs/en-US/page.json @@ -4,7 +4,8 @@ "register": "Register", "codeLogin": "Code Login", "qrcodeLogin": "Qr Code Login", - "forgetPassword": "Forget Password" + "forgetPassword": "Forget Password", + "profile": "Profile" }, "dashboard": { "title": "Dashboard", diff --git a/apps/web-tdesign/src/locales/langs/zh-CN/page.json b/apps/web-tdesign/src/locales/langs/zh-CN/page.json index eefc4924b..d2af3b1eb 100644 --- a/apps/web-tdesign/src/locales/langs/zh-CN/page.json +++ b/apps/web-tdesign/src/locales/langs/zh-CN/page.json @@ -4,7 +4,8 @@ "register": "注册", "codeLogin": "验证码登录", "qrcodeLogin": "二维码登录", - "forgetPassword": "忘记密码" + "forgetPassword": "忘记密码", + "profile": "个人中心" }, "dashboard": { "title": "概览", diff --git a/apps/web-tdesign/src/views/_core/profile/base-setting.vue b/apps/web-tdesign/src/views/_core/profile/base-setting.vue new file mode 100644 index 000000000..aa8a4c260 --- /dev/null +++ b/apps/web-tdesign/src/views/_core/profile/base-setting.vue @@ -0,0 +1,65 @@ + + diff --git a/apps/web-tdesign/src/views/_core/profile/notification-setting.vue b/apps/web-tdesign/src/views/_core/profile/notification-setting.vue new file mode 100644 index 000000000..324a4b393 --- /dev/null +++ b/apps/web-tdesign/src/views/_core/profile/notification-setting.vue @@ -0,0 +1,31 @@ + + diff --git a/apps/web-tdesign/src/views/_core/profile/password-setting.vue b/apps/web-tdesign/src/views/_core/profile/password-setting.vue new file mode 100644 index 000000000..7e1c0f082 --- /dev/null +++ b/apps/web-tdesign/src/views/_core/profile/password-setting.vue @@ -0,0 +1,66 @@ + + diff --git a/apps/web-tdesign/src/views/_core/profile/security-setting.vue b/apps/web-tdesign/src/views/_core/profile/security-setting.vue new file mode 100644 index 000000000..be30db58e --- /dev/null +++ b/apps/web-tdesign/src/views/_core/profile/security-setting.vue @@ -0,0 +1,43 @@ + + diff --git a/apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue index 02f509123..6ff52086f 100644 --- a/apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue +++ b/apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue @@ -24,7 +24,7 @@ onMounted(() => { { name: '定制', value: 310 }, { name: '技术支持', value: 274 }, { name: '远程', value: 400 }, - ].sort((a, b) => { + ].toSorted((a, b) => { return a.value - b.value; }), name: '商业占比', diff --git a/cspell.json b/cspell.json index ce570510f..9bacfa30e 100644 --- a/cspell.json +++ b/cspell.json @@ -54,6 +54,7 @@ "styl", "taze", "Tinymce", + "tdesign", "ui-kit", "uicons", "unplugin", diff --git a/docs/.vitepress/components/demo-preview.vue b/docs/.vitepress/components/demo-preview.vue index 4c8829f88..983a95062 100644 --- a/docs/.vitepress/components/demo-preview.vue +++ b/docs/.vitepress/components/demo-preview.vue @@ -19,15 +19,15 @@ const parsedFiles = computed(() => {