ソースを参照

Merge branch 'master' of http://git.izouma.com/xiongzhu/9th

panhui 4 年 前
コミット
17f0c8ff8a

+ 1 - 0
src/main/pc-space/package.json

@@ -18,6 +18,7 @@
         "qs": "^6.10.1",
         "swiper": "5.x",
         "vue": "^2.6.11",
+        "vue-avatar-cropper": "^5.0.2",
         "vue-awesome-swiper": "^4.1.1",
         "vue-clipboard2": "^0.3.3",
         "vue-router": "^3.2.0",

+ 4 - 2
src/main/pc-space/src/components/AddressInfo.vue

@@ -109,7 +109,7 @@ export default {
                 color: #ffffff;
                 font-size: 13px;
                 text-align: center;
-                line-height: 36px;
+                line-height: 38px;
                 margin-left: 20px;
             }
         }
@@ -117,8 +117,10 @@ export default {
     /deep/ .el-button {
         width: 130px;
         height: 36px;
-        background: linear-gradient(133deg, #00ffcb 0%, #006eff 100%);
+        background: linear-gradient(133deg, @prim 0%, @warn 100%);
         border-radius: 4px;
+        line-height: 6px;
+        border: 0;
     }
     /deep/ .el-form-item__label {
         margin-left: 75px;

+ 1 - 2
src/main/pc-space/src/components/CollectionInfo.vue

@@ -69,7 +69,6 @@ export default {
                         liked: true,
                         likes: this.info.likes + 1
                     });
-                    this.$forceUpdate();
                     this.$message.success('收藏成功');
                 });
             } else {
@@ -79,10 +78,10 @@ export default {
                         liked: false,
                         likes: this.info.likes - 1
                     });
-                    this.$forceUpdate();
                     this.$message.success('取消收藏');
                 });
             }
+            this.$emit('init');
         }
     }
 };

+ 134 - 0
src/main/pc-space/src/components/CropUpload.vue

@@ -0,0 +1,134 @@
+<template>
+    <div>
+        <div id="upload-wrapper" class="upload-wrapper">
+            <img v-if="src" :src="src" />
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            <div v-if="loading" class="loading"><i class="el-icon-loading"></i></div>
+        </div>
+        <avatar-cropper
+            ref="cropper"
+            @submit="loading = true"
+            @uploaded="handleUploaded"
+            trigger="#upload-wrapper"
+            :cropper-options="cropperOptions"
+            :output-options="outputOptions"
+            :upload-url="uploadUrl"
+            :labels="{ submit: '确定', cancel: '取消' }"
+            :upload-headers="headers"
+        />
+    </div>
+</template>
+<script>
+import resolveUrl from 'resolve-url';
+import AvatarCropper from 'vue-avatar-cropper';
+
+export default {
+    props: {
+        value: {},
+        width: {
+            type: Number,
+            default: 350
+        },
+        height: {
+            type: Number,
+            default: 350
+        }
+    },
+    created() {
+        this.uploadUrl = resolveUrl(this.$baseUrl, 'upload/file');
+        if (this.value) {
+            this.src = this.value;
+        }
+    },
+    mounted() {
+        document.body.appendChild(this.$refs.cropper.$el);
+    },
+    beforeDestroy() {
+        document.body.removeChild(this.$refs.cropper.$el);
+    },
+    data() {
+        return {
+            uploadUrl: '',
+            src: '',
+            cropperOptions: {
+                aspectRatio: 1
+            },
+            loading: false,
+            headers: {
+                Authorization: 'Bearer ' + localStorage.getItem('webToken')
+            }
+        };
+    },
+    computed: {
+        outputOptions() {
+            return { width: this.width, height: this.height };
+        }
+    },
+    watch: {
+        value() {
+            if (this.value) {
+                this.src = this.value;
+            }
+        }
+    },
+    methods: {
+        handleUploaded(res) {
+            this.loading = false;
+            this.src = res;
+            this.$emit('input', res);
+        }
+    },
+    components: {
+        AvatarCropper
+    }
+};
+</script>
+<style lang="less" scoped>
+.upload-wrapper {
+    width: 148px;
+    height: 148px;
+    display: block;
+    border: 1px dashed #d9d9d9;
+    border-radius: 50%;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+
+    img {
+        width: 100%;
+        height: 100%;
+    }
+
+    &:hover {
+        border-color: @prim;
+    }
+}
+
+.avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 148px;
+    height: 148px;
+    line-height: 148px;
+    text-align: center;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+    background-color: #fbfdff;
+}
+
+.loading {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    margin: auto;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background: rgba(255, 255, 255, 0.6);
+    color: #333;
+    font-size: 24px;
+}
+</style>

+ 42 - 24
src/main/pc-space/src/components/FansInfo.vue

@@ -3,31 +3,31 @@
         <div class="border"></div>
         <div class="content">
             <div class="box">
-                <router-link :to="{ path: '/castingDetail?id=' + info.id }">
+                <router-link :to="{ path: '/castingDetail?id=' + list.id }">
                     <div class="text">
-                        <img class="text1" :src="info.avatar" alt="" />
+                        <img class="text1" :src="list.avatar" alt="" />
                         <div class="box2">
                             <div class="name">
-                                <div class="name1">{{ info.nickname }}</div>
+                                <div class="name1">{{ list.nickname }}</div>
                                 <img class="name2" src="../assets/img/renzheng_icon@3x.png" alt="" />
                             </div>
                             <div class="text2">暂无</div>
                             <div class="box3">
                                 <div class="box4">
                                     <div class="text4">
-                                        粉丝 <span>{{ info.follows }}</span>
+                                        粉丝 <span>{{ list.follows }}</span>
                                     </div>
                                     <div class="text4">
-                                        已售 <span>{{ info.sales }}</span>
+                                        已售 <span>{{ list.sales }}</span>
                                     </div>
                                 </div>
-                                <div class="follow" :class="{ followed: info.follow }" @click.prevent="like(info)">
-                                    {{ info.follow ? '已关注' : '关注' }}
-                                </div>
+                                <el-button plain round :class="{ prim: !list.follow }" size="mini" @click="fans(list)">
+                                    {{ list.follow ? '已关注' : '关注' }}
+                                </el-button>
                             </div>
                         </div>
                         <div class="imgBox">
-                            <img class="imgBox1" :src="info.bg" alt="" />
+                            <img class="imgBox1" :src="list.bg" alt="" />
                         </div>
                     </div>
                 </router-link>
@@ -41,7 +41,7 @@ import pageableTable from '../mixins/pageableTable';
 export default {
     mixins: [user, pageableTable],
     props: {
-        info: {
+        list: {
             type: Object,
             default: () => {
                 return {};
@@ -52,10 +52,12 @@ export default {
         return {};
     },
     computed: {},
-    mounted() {
-        console.log(this.info);
-    },
-    methods: {}
+    methods: {
+        fans(list) {
+            this.like(list);
+            this.$emit('getDetail');
+        }
+    }
 };
 </script>
 <style lang="less" scoped>
@@ -116,7 +118,8 @@ export default {
                     }
                     .box3 {
                         display: flex;
-                        align-infos: center;
+                        align-content: center;
+                        // align-lists: center;
                         justify-content: space-between;
                         .box4 {
                             display: flex;
@@ -131,15 +134,30 @@ export default {
                                 color: #fff;
                             }
                         }
-                        .follow {
-                            width: 70px;
-                            height: 26px;
-                            color: @prim;
-                            font-size: 14px;
-                            border-radius: 16px;
-                            border: 1px solid;
-                            text-align: center;
-                            line-height: 26px;
+                        // .follow {
+                        //     width: 70px;
+                        //     height: 26px;
+                        //     color: @prim;
+                        //     font-size: 14px;
+                        //     border-radius: 16px;
+                        //     border: 1px solid;
+                        //     text-align: center;
+                        //     line-height: 26px;
+                        // }
+                        .el-button {
+                            background-color: transparent;
+                            min-width: 76px;
+                            height: 28px;
+
+                            &.prim {
+                                .line(@radius:28px);
+                                text-align: center;
+                                /deep/span {
+                                    color: @prim;
+                                    position: relative;
+                                    z-index: 1;
+                                }
+                            }
                         }
                     }
                 }

+ 2 - 0
src/main/pc-space/src/components/PageHeader.vue

@@ -128,6 +128,8 @@ export default {
         onCommand(command) {
             if (command === 'edit') {
                 this.$router.push('/accountdata');
+            } else if (command === 'nickname') {
+                this.$router.push('/accountdata');
             } else if (command === 'logout') {
                 localStorage.removeItem('webToken');
                 this.updateUserInfo(null);

+ 1 - 7
src/main/pc-space/src/components/SecurityPhone.vue

@@ -126,16 +126,10 @@ export default {
                 color: #ffffff;
                 font-size: 13px;
                 text-align: center;
-                line-height: 36px;
+                line-height: 38px;
                 margin-left: 20px;
             }
         }
     }
-    /deep/ .el-button {
-        width: 130px;
-        height: 36px;
-        background: linear-gradient(133deg, @prim 0%, @warn 100%);
-        border-radius: 4px;
-    }
 }
 </style>

+ 1 - 7
src/main/pc-space/src/components/TransactionPhone.vue

@@ -132,16 +132,10 @@ export default {
                 color: #ffffff;
                 font-size: 13px;
                 text-align: center;
-                line-height: 36px;
+                line-height: 38px;
                 margin-left: 20px;
             }
         }
     }
-    /deep/ .el-button {
-        width: 130px;
-        height: 36px;
-        background: linear-gradient(133deg, @prim 0%, @warn 100%);
-        border-radius: 4px;
-    }
 }
 </style>

+ 2 - 0
src/main/pc-space/src/main.js

@@ -8,6 +8,7 @@ import './styles/element/index.css';
 import common from './mixins/common';
 ElementUI.Dialog.props.closeOnClickModal.default = false;
 import SingleUpload from '@/components/SingleUpload';
+import CropUpload from '@/components/CropUpload';
 import './styles/font.less';
 import './styles/app.less';
 import eventBus from './eventBus';
@@ -21,6 +22,7 @@ Vue.use(ElementUI);
 Vue.use(http);
 Vue.mixin(common);
 Vue.component('single-upload', SingleUpload);
+Vue.component('crop-upload', CropUpload);
 Vue.prototype.$EventBus = eventBus;
 Vue.use(VueClipboard);
 

+ 17 - 5
src/main/pc-space/src/mixins/common.js

@@ -22,7 +22,9 @@ export default {
     },
     methods: {
         updateUser(info, sucess = true) {
+            console.log(info);
             if (info) {
+                console.log(info);
                 return this.$http
                     .post(
                         '/user/save',
@@ -39,21 +41,32 @@ export default {
                     })
                     .then(() => {
                         if (sucess) {
-                            this.$toast.success('更新成功');
+                            this.$message.success('更新成功');
                         }
                         return Promise.resolve();
                     })
                     .catch(e => {
                         if (e) {
-                            this.$toast(e.error);
+                            this.$message.error(e.error);
                         }
                         return Promise.reject();
                     });
             }
         },
-        updateFile(e) {
+        // updateFile(e) {
+        //     const formData = new FormData();
+        //     formData.append('file', e.name);
+        //     return http.axios.post('/upload/file', formData).then(res => {
+        //         return Promise.resolve(res.data);
+        //     });
+        // },
+        updateFile(e, size = 2000) {
+            console.log(e);
             const formData = new FormData();
-            formData.append('file', e.file, e.file.name);
+            formData.append('file', e, e.name);
+            formData.append('compress', true);
+            formData.append('width', size);
+            formData.append('height', size);
             return http.axios.post('/upload/file', formData).then(res => {
                 return Promise.resolve(res.data);
             });
@@ -104,6 +117,5 @@ export default {
         wait() {
             this.$message.warning('敬请期待');
         }
-        
     }
 };

+ 1 - 2
src/main/pc-space/src/mixins/user.js

@@ -15,7 +15,6 @@ export default {
                             follow: true,
                             followers: info.followers + 1
                         });
-                        // this.$forceUpdate();
                     });
                 } else {
                     this.$http.get(`/user/${info.id}/unfollow`).then(() => {
@@ -25,7 +24,6 @@ export default {
                             follow: false,
                             followers: info.followers - 1
                         });
-                        // this.$forceUpdate();
                     });
                 }
             });
@@ -41,6 +39,7 @@ export default {
                 });
 
                 this.list = list;
+                this.$store.dispatch('getUserInfo');
             } else {
                 this.getDetail();
             }

+ 3 - 3
src/main/pc-space/src/router/index.js

@@ -116,9 +116,9 @@ const routes = [
                         }
                     },
                     {
-                        path: '/mylikes',
-                        name: 'mylikes',
-                        component: () => import('../views/user/MyLikes.vue'),
+                        path: '/collectionorder',
+                        name: 'collectionorder',
+                        component: () => import('../views/user/CollectionOrder.vue'),
                         meta: {
                             title: '藏品订单',
                             checkLogin: true

+ 34 - 19
src/main/pc-space/src/views/user/AccountData.vue

@@ -1,7 +1,9 @@
 <template>
     <div class="container">
-        <div class="top"></div>
-        <!-- <img class="top" :src="userInfo.avatar" alt="" /> -->
+        <el-upload class="top" :action="uploadUrl" :show-file-list="false" :before-upload="beforeAvatarUpload2">
+            <img v-if="userInfo.bg" class="top" :src="userInfo.bg" alt="" />
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+        </el-upload>
         <div class="top1">
             <div class="title">
                 <div class="text">
@@ -18,11 +20,15 @@
                     </div>
                 </div>
             </div>
-            <img class="img2" :src="userInfo.avatar" alt="" />
+
+            <el-upload :action="uploadUrl" :show-file-list="false" :before-upload="beforeAvatarUpload">
+                <img v-if="userInfo.avatar" class="img2" :src="userInfo.avatar" alt="" />
+                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
         </div>
         <div v-if="active === '关注' || active === '粉丝'">
             <div v-for="item in list" :key="item.id">
-                <fans-info :info="item"></fans-info>
+                <fans-info :list="item" @getDetail="tab"></fans-info>
             </div>
         </div>
         <div v-if="empty">
@@ -30,7 +36,7 @@
             <el-empty description="还没有哦~"></el-empty>
         </div>
 
-        <div class="content" v-if="active !== '关注' && active !== '粉丝'">
+        <div class="content" v-if="!empty && active !== '关注' && active !== '粉丝'">
             <div class="name">基本信息</div>
             <div class="box">
                 <div class="text">
@@ -52,18 +58,6 @@
                 </div>
                 <div class="text4">复制</div>
             </div>
-            <!-- <div class="box">
-                <div class="text">
-                    <div class="text1">
-                        <span class="el-icon-document"></span>
-                    </div>
-                    <div class="text2">简介</div>
-                    <div class="text3 text5">
-                        广州小云互娱科技有限公司成立于2017年,作为广东省游戏产业协会成员,是一家集游戏研发、运营和发行领域的综合性游戏公司。广州小云互娱科技有限公司成立于2017年,作为广东省游戏产业协会成员,是一家集游戏研发、运营和发行领域的综合性游戏公司。广州小云互娱科技有限公司成立于2017年,作为广东省游戏产业协会成员,是一家集游戏研发、运营和发行领域的综合性游戏公…
-                    </div>
-                </div>
-                <div class="text4">修改</div>
-            </div> -->
             <div class="box">
                 <div class="text">
                     <div class="text1">
@@ -123,8 +117,12 @@
 </template>
 <script>
 import { mapState } from 'vuex';
+import resolveUrl from 'resolve-url';
 import FansInfo from '../../components/FansInfo.vue';
 export default {
+    created() {
+        this.uploadUrl = resolveUrl(this.$baseUrl, 'upload/file');
+    },
     components: { FansInfo },
     data() {
         return {
@@ -156,12 +154,28 @@ export default {
             }
         }
     },
+
     methods: {
+        beforeAvatarUpload(file) {
+            this.updateFile(file, 100).then(img => {
+                this.updateUser({ avatar: img }).then(res => {
+                    // console.log(res);
+                });
+            });
+        },
+        beforeAvatarUpload2(file) {
+            this.updateFile(file, 1080).then(img => {
+                this.updateUser({ bg: img }).then(res => {
+                    // console.log(res);
+                });
+            });
+        },
         tab(e) {
             this.active = e;
             if (e === '关注') {
                 this.$http.get('/user/myFollows').then(res => {
                     this.list = res;
+                    this.$store.dispatch('getUserInfo');
                     if (this.list.length === 0) {
                         this.empty = true;
                     } else {
@@ -171,6 +185,7 @@ export default {
             } else {
                 this.$http.get('/user/myFollowers').then(res => {
                     this.list = res;
+                    this.$store.dispatch('getUserInfo');
                     if (this.list.length === 0) {
                         this.empty = true;
                     } else {
@@ -223,8 +238,7 @@ export default {
     }
     .top {
         height: 146px;
-        width: 100%;
-        background: @prim;
+        width: 970px;
     }
     .top1 {
         display: flex;
@@ -262,6 +276,7 @@ export default {
             padding: 4px;
             background: #ffffff;
             top: -50px;
+            left: 431px;
         }
     }
     .content {

+ 2 - 2
src/main/pc-space/src/views/user/Address.vue

@@ -137,8 +137,8 @@ export default {
             cursor: pointer;
         }
         span {
-            width: 26px !important;
-            height: 26px !important;
+            // width: 26px !important;
+            // height: 26px !important;
             // font-size: 16px;
             color: #939599;
         }

+ 2 - 0
src/main/pc-space/src/views/user/Authentication.vue

@@ -103,7 +103,9 @@ export default {
                 background: linear-gradient(133deg, @prim 0%, @warn 100%);
                 border-radius: 4px;
                 margin-top: 60px;
+                line-height: 6px;
                 color: #ffffff;
+                border: 0;
             }
         }
     }

+ 13 - 13
src/main/pc-space/src/views/user/MyLikes.vue → src/main/pc-space/src/views/user/CollectionOrder.vue

@@ -93,19 +93,19 @@ export default {
     computed: {
         ...mapState(['userInfo'])
     },
-    // watch: {
-    //     type() {
-    //         this.$router
-    //             .replace({
-    //                 query: {
-    //                     userId: this.userInfo.id,
-    //                     type: this.type
-    //                 }
-    //             })
-    //             .catch(() => {});
-    //         this.getData();
-    //     }
-    // },
+    watch: {
+        type() {
+            this.$router
+                .replace({
+                    query: {
+                        userId: this.userInfo.id,
+                        type: this.type
+                    }
+                })
+                .catch(() => {});
+            this.getData();
+        }
+    },
     mounted() {
         this.getData();
     },

+ 3 - 1
src/main/pc-space/src/views/user/EnterpriseAuthentication.vue

@@ -213,6 +213,8 @@ export default {
         height: 36px;
         background: linear-gradient(133deg, @prim 0%, @warn 100%);
         border-radius: 4px;
+        line-height: 6px;
+        border: 0;
         margin: 0 !important;
     }
     .btn {
@@ -228,7 +230,7 @@ export default {
             color: #ffffff;
             font-size: 13px;
             text-align: center;
-            line-height: 36px;
+            line-height: 38px;
             margin-left: 20px;
         }
     }

+ 2 - 1
src/main/pc-space/src/views/user/Give.vue

@@ -24,6 +24,7 @@
 
         <div class="list" v-loading="fetchingData">
             <collection-info
+                @init="init"
                 v-for="(item, index) in showList"
                 :key="item.id"
                 :info.sync="showList[index]"
@@ -98,13 +99,13 @@ export default {
     watch: {},
     mounted() {
         this.init();
-        // this.getData();
     },
     methods: {
         init() {
             this.$http.get('/collection/myLikes').then(res => {
                 this.fetchingData = false;
                 this.list = res;
+                this.$forceUpdate();
             });
         }
         // beforeGetData() {

+ 3 - 1
src/main/pc-space/src/views/user/Modifypad.vue

@@ -121,7 +121,7 @@ export default {
             color: #ffffff;
             font-size: 13px;
             text-align: center;
-            line-height: 36px;
+            line-height: 38px;
             margin-left: 20px;
         }
     }
@@ -130,6 +130,8 @@ export default {
         height: 36px;
         background: linear-gradient(133deg, @prim 0%, @warn 100%);
         border-radius: 4px;
+        line-height: 6px;
+        border: 0;
     }
     /deep/ .el-form-item__error {
         margin-left: 174px;

+ 1 - 1
src/main/pc-space/src/views/user/Personal.vue

@@ -23,7 +23,7 @@
                         <img class="icon" src="../../assets/user/icon_jiaoyixinxi@3x.png" alt="" />
                         <span>交易信息</span>
                     </template>
-                    <el-menu-item index="/mylikes">藏品订单</el-menu-item>
+                    <el-menu-item index="/collectionorder">藏品订单</el-menu-item>
                     <el-menu-item index="/payrecord">支付记录</el-menu-item>
                     <el-menu-item index="/transactionordes">交易记录</el-menu-item>
                     <el-menu-item index="/ordervalue">价值证明</el-menu-item>

+ 3 - 1
src/main/pc-space/src/views/user/Security.vue

@@ -153,7 +153,7 @@ export default {
                 color: #ffffff;
                 font-size: 13px;
                 text-align: center;
-                line-height: 36px;
+                line-height: 38px;
                 margin-left: 20px;
             }
         }
@@ -163,6 +163,8 @@ export default {
         height: 36px;
         background: linear-gradient(133deg, @prim 0%, @warn 100%);
         border-radius: 4px;
+        line-height: 6px;
+        border: 0;
     }
     /deep/ .el-step__title {
         font-size: 13px;

+ 3 - 1
src/main/pc-space/src/views/user/Transaction.vue

@@ -153,7 +153,7 @@ export default {
                 color: #ffffff;
                 font-size: 13px;
                 text-align: center;
-                line-height: 36px;
+                line-height: 38px;
                 margin-left: 20px;
             }
         }
@@ -163,6 +163,8 @@ export default {
         height: 36px;
         background: linear-gradient(133deg, @prim 0%, @warn 100%);
         border-radius: 4px;
+        line-height: 6px;
+        border: 0;
     }
     /deep/ .el-step__title {
         font-size: 13px;

+ 3 - 1
src/main/pc-space/src/views/user/UserAuthentication.vue

@@ -212,7 +212,7 @@ export default {
             cursor: pointer;
             font-size: 13px;
             text-align: center;
-            line-height: 36px;
+            line-height: 38px;
             margin-left: 20px;
         }
     }
@@ -290,7 +290,9 @@ export default {
             background: linear-gradient(133deg, @prim 0%, @warn 100%);
             border-radius: 4px;
             margin-top: 60px;
+            line-height: 6px;
             color: #ffffff;
+            border: 0;
         }
     }
 }

+ 20 - 2
src/main/pc-space/yarn.lock

@@ -2502,8 +2502,8 @@ cli-width@^3.0.0:
 
 clipboard@^2.0.0, clipboard@^2.0.8:
   version "2.0.8"
-  resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba"
-  integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==
+  resolved "https://registry.nlark.com/clipboard/download/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba"
+  integrity sha1-/8bBA90pZ6gwBfP2GXaqRlWkzbo=
   dependencies:
     good-listener "^1.2.2"
     select "^1.1.2"
@@ -2846,6 +2846,11 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
+cropperjs@^1.5.12:
+  version "1.5.12"
+  resolved "https://registry.nlark.com/cropperjs/download/cropperjs-1.5.12.tgz#d9c0db2bfb8c0d769d51739e8f916bbc44e10f50"
+  integrity sha1-2cDbK/uMDXadUXOej5FrvEThD1A=
+
 cross-spawn@^5.0.1:
   version "5.1.0"
   resolved "https://registry.nlark.com/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@@ -5667,6 +5672,11 @@ mime@^2.4.4:
   resolved "https://registry.nlark.com/mime/download/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
   integrity sha1-bj3GzCuVEGQ4MOXxnVy3U9pe6r4=
 
+mime@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/mime/download/mime-3.0.0.tgz?cache=0&sync_timestamp=1635900750501&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime%2Fdownload%2Fmime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7"
+  integrity sha1-s3RVDco6DBhEOwyVCmpY8ZMc96c=
+
 mimic-fn@^1.0.0:
   version "1.2.0"
   resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1617823824094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
@@ -8501,6 +8511,14 @@ vm-browserify@^1.0.1:
   resolved "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
   integrity sha1-eGQcSIuObKkadfUR56OzKobl3aA=
 
+vue-avatar-cropper@^5.0.2:
+  version "5.0.2"
+  resolved "https://registry.npmmirror.com/vue-avatar-cropper/download/vue-avatar-cropper-5.0.2.tgz?cache=0&sync_timestamp=1636185543539&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fvue-avatar-cropper%2Fdownload%2Fvue-avatar-cropper-5.0.2.tgz#6b536fbc873a633a80ad341dddc17a82a5e45d3c"
+  integrity sha1-a1NvvIc6YzqArTQd3cF6gqXkXTw=
+  dependencies:
+    cropperjs "^1.5.12"
+    mime "^3.0.0"
+
 vue-awesome-swiper@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/vue-awesome-swiper/-/vue-awesome-swiper-4.1.1.tgz#8f7ab221ad003021d756b86aa618f429924900fe"