chenyc
2025-10-14 a6f64303f88508d1c4d6ce53ff46be6b745cfb93
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<template>
    <div class="croppers-container layout-pd">
        <el-card shadow="hover" header="cropper 图片裁剪">
            <el-alert
                title="感谢优秀的 `cropperjs`,项目地址:https://github.com/fengyuanchen/cropperjs"
                type="success"
                :closable="false"
                class="mb15"
            ></el-alert>
            <div class="cropper-img-warp">
                <div class="mb15 mt15">
                    <img class="cropper-img" :src="state.cropperImg" />
                </div>
                <el-button type="primary" size="default" @click="onCropperDialogOpen">
                    <el-icon>
                        <ele-Crop />
                    </el-icon>
                    更换头像
                </el-button>
            </div>
        </el-card>
        <CropperDialog ref="cropperDialogRef" />
    </div>
</template>
 
<script setup lang="ts" name="funCropper">
import { defineAsyncComponent, ref, reactive } from 'vue';
 
// 引入组件
const CropperDialog = defineAsyncComponent(() => import('/@/components/cropper/index.vue'));
 
// 定义变量内容
const cropperDialogRef = ref();
const state = reactive({
    cropperImg: 'https://img2.baidu.com/it/u=1978192862,2048448374&fm=253&fmt=auto&app=138&f=JPEG?w=504&h=500',
});
 
// 打开裁剪弹窗
const onCropperDialogOpen = () => {
    cropperDialogRef.value.openDialog(state.cropperImg);
};
</script>
 
<style scoped lang="scss">
.croppers-container {
    .cropper-img-warp {
        text-align: center;
        .cropper-img {
            margin: auto;
            width: 150px;
            height: 150px;
            border-radius: 100%;
        }
    }
}
</style>