diff --git a/package.json b/package.json index af008d8f..9a977119 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "pinia": "3.0.1", "tailwind-merge": "3.0.2", "vue": "3.5.13", + "vue-advanced-cropper": "^2.8.9", "vue-draggable-plus": "0.6.0", "vue-i18n": "11.1.2", "vue-router": "4.5.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54fa0c6e..5c6bb7ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,6 +71,12 @@ importers: vue: specifier: 3.5.13 version: 3.5.13(typescript@5.8.2) + vue-advanced-cropper: + specifier: ^2.8.9 + version: 2.8.9(vue@3.5.13(typescript@5.8.2)) + vue-cropper: + specifier: ^0.6.5 + version: 0.6.5 vue-draggable-plus: specifier: 0.6.0 version: 0.6.0(@types/sortablejs@1.15.8) @@ -1568,6 +1574,9 @@ packages: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -1738,6 +1747,9 @@ packages: de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -1873,6 +1885,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + easy-bem@1.1.1: + resolution: {integrity: sha512-GJRqdiy2h+EXy6a8E6R+ubmqUM08BK0FWNq41k24fup6045biQ8NXxoXimiwegMQvFFV3t1emADdGNL1TlS61A==} + echarts@5.6.0: resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==} @@ -4061,6 +4076,15 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + vue-advanced-cropper@2.8.9: + resolution: {integrity: sha512-1jc5gO674kVGpJKekoaol6ZlwaF5VYDLSBwBOUpViW0IOrrRsyLw6XNszjEqgbavvqinlKNS6Kqlom3B5M72Tw==} + engines: {node: '>=8', npm: '>=5'} + peerDependencies: + vue: ^3.0.0 + + vue-cropper@0.6.5: + resolution: {integrity: sha512-lSvY6IpeA/Tv/iPZ/FOkMHVRBPSlm7t57nuHEZFBMRNOH8ElvfqVlnHGDOAMlvPhh9gHiddiQoASS+fY0MFX0g==} + vue-demi@0.13.11: resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} engines: {node: '>=12'} @@ -5541,6 +5565,8 @@ snapshots: isobject: 3.0.1 static-extend: 0.1.2 + classnames@2.5.1: {} + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -5701,6 +5727,8 @@ snapshots: de-indent@1.0.2: {} + debounce@1.2.1: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -5822,6 +5850,8 @@ snapshots: eastasianwidth@0.2.0: {} + easy-bem@1.1.1: {} + echarts@5.6.0: dependencies: tslib: 2.3.0 @@ -8341,6 +8371,15 @@ snapshots: vscode-uri@3.1.0: {} + vue-advanced-cropper@2.8.9(vue@3.5.13(typescript@5.8.2)): + dependencies: + classnames: 2.5.1 + debounce: 1.2.1 + easy-bem: 1.1.1 + vue: 3.5.13(typescript@5.8.2) + + vue-cropper@0.6.5: {} + vue-demi@0.13.11(vue@3.5.13(typescript@5.8.2)): dependencies: vue: 3.5.13(typescript@5.8.2) diff --git a/src/layouts/modules/global-header/components/user-avatar.vue b/src/layouts/modules/global-header/components/user-avatar.vue index 5766f345..3f339e5a 100644 --- a/src/layouts/modules/global-header/components/user-avatar.vue +++ b/src/layouts/modules/global-header/components/user-avatar.vue @@ -1,9 +1,10 @@ + + + + + + + + + + + {{ userInfo.user?.nickName }} + {{ userInfo.user?.userName }} + + + + {{ userInfo.user?.phonenumber }} + + + {{ userInfo.user?.email }} + + + {{ userInfo.user?.deptName }} + + + + + {{ role.roleName }} + + + + + {{ userInfo.user?.createTime }} + + + + + + + + + + + + + + + + + + + + + + 男 + 女 + + + + + + + + 保存 + + + + + + + + + + + + + + + + + + + + + 修改密码 + + + + + + + + + + + + + + + + + + diff --git a/src/views/_builtin/user-center/modules/online-table.vue b/src/views/_builtin/user-center/modules/online-table.vue new file mode 100644 index 00000000..fb17ff3d --- /dev/null +++ b/src/views/_builtin/user-center/modules/online-table.vue @@ -0,0 +1,88 @@ + + + + + + + diff --git a/src/views/_builtin/user-center/modules/social-card.vue b/src/views/_builtin/user-center/modules/social-card.vue new file mode 100644 index 00000000..5b270803 --- /dev/null +++ b/src/views/_builtin/user-center/modules/social-card.vue @@ -0,0 +1,117 @@ + + + + + + + + + + + + + {{ socialList.find(s => s.source === source.key)?.nickName }} + + + 绑定时间:{{ socialList.find(s => s.source === source.key)?.createTime }} + + + s.source === source.key)?.authId || '')" + > + 解绑 + + + + + + + {{ source.name }} + + 绑定 + + + + + + + + + + diff --git a/src/views/_builtin/user-center/modules/user-avatar.vue b/src/views/_builtin/user-center/modules/user-avatar.vue new file mode 100644 index 00000000..04ec165c --- /dev/null +++ b/src/views/_builtin/user-center/modules/user-avatar.vue @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + 选择图片 + + + 确认裁剪 + + + + + + + +