feat(views): 添加个人信息管理功能
- 新增个人信息管理页面,包括用户信息展示和编辑功能- 添加头像上传和裁剪功能 - 引入 vue-cropper 组件用于头像裁剪
This commit is contained in:
80
src/views/components/management/person/index.vue
Normal file
80
src/views/components/management/person/index.vue
Normal file
@ -0,0 +1,80 @@
|
||||
<template>
|
||||
<Container title="个人信息" class="container mt-24px">
|
||||
<a-table :columns="columns" :data="data" :pagination="false" class="mt-16px">
|
||||
<template #info="{ record }">
|
||||
<a-avatar :image-url="record.head_image" :size="32" />
|
||||
{{ record.name }}
|
||||
<icon-edit size="13" class="ml-8px" @click="openEditInfoModal" />
|
||||
</template>
|
||||
<template #mobile="{ record }">
|
||||
{{ record.mobile.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') }}
|
||||
<icon-edit size="13" class="ml-8px" />
|
||||
</template>
|
||||
</a-table>
|
||||
<Modal v-model:visible="infoVisible" title="修改用户信息">
|
||||
<a-form :model="userInfoForm" @submit="handleSubmitUserInfo">
|
||||
<a-form-item field="head_image" label="头像">
|
||||
<a-avatar :image-url="userInfoForm.head_image" :size="48" />
|
||||
<a-upload action="/" />
|
||||
<a-button @click="openEditImageModal"><icon-upload />上传新头像</a-button>
|
||||
</a-form-item>
|
||||
<a-form-item field="name" label="昵称">
|
||||
<a-input v-model="userInfoForm.name" placeholder="请输入昵称" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</Modal>
|
||||
<Modal v-model:visible="imageVisible" title="头像裁剪">
|
||||
<VueCropper></VueCropper>
|
||||
</Modal>
|
||||
</Container>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import Container from '@/components/container.vue';
|
||||
import Modal from '@/components/modal.vue';
|
||||
import { ref, reactive } from 'vue';
|
||||
import 'vue-cropper/dist/index.css';
|
||||
import { VueCropper } from 'vue-cropper';
|
||||
|
||||
const userInfo = reactive({
|
||||
id: 1,
|
||||
name: 'Jane Doe',
|
||||
head_image: '',
|
||||
mobile: '13600000000',
|
||||
});
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: '用户信息',
|
||||
slotName: 'info',
|
||||
},
|
||||
{
|
||||
title: '手机号',
|
||||
slotName: 'mobile',
|
||||
},
|
||||
];
|
||||
const data = reactive([userInfo]);
|
||||
const infoVisible = ref(true);
|
||||
const imageVisible = ref(false);
|
||||
|
||||
const userInfoForm = reactive({
|
||||
name: '',
|
||||
head_image: '',
|
||||
});
|
||||
|
||||
function openEditInfoModal() {
|
||||
infoVisible.value = true;
|
||||
}
|
||||
|
||||
function openEditImageModal() {
|
||||
imageVisible.value = true;
|
||||
}
|
||||
|
||||
function handleSubmitUserInfo() {
|
||||
console.log(123);
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
</style>
|
||||
Reference in New Issue
Block a user