From 29f3a095dc58860849cdaa0b057b9fab495e5f6d Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Wed, 07 Jan 2026 14:04:07 +0800
Subject: [PATCH] 1

---
 src/page/newUser/setup.vue |  144 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 136 insertions(+), 8 deletions(-)

diff --git a/src/page/newUser/setup.vue b/src/page/newUser/setup.vue
index e433da5..7c010ad 100644
--- a/src/page/newUser/setup.vue
+++ b/src/page/newUser/setup.vue
@@ -6,24 +6,44 @@
             </div>
         </div>
         <ul class="ulk">
-            <li><span style="line-height: 1.1748rem;"> {{ $t('jy354') }}</span><img src="~@/assets/imgRed/touxiang.png"
-                    class="heasd" /></li>
+            <li>
+                <span style="line-height: 1.1748rem;"> {{ $t('jy354') }}</span>
+                <div style="position: relative; margin-right: 0.3204rem;" v-if="userInfo.id">
+                    <el-upload :with-credentials="true" class="avatar-uploader" :action="admin + '/user/upload.do'"
+                        list-type="picture-card" name="upload_file" :show-file-list="false"
+                        :on-success="handleAvatarSuccess" :on-error="handleError" :before-upload="beforeAvatarUpload"
+                        :headers="headers">
+                        <img v-if="avatarUrl" :src="avatarUrl" class="heasd" />
+                        <i v-else class="iconfont icon-zhaopian"></i>
+                        <span v-if="!avatarUrl && !imgStatus" class="btn-title">{{ $t('hj197') }}</span>
+                        <span v-if="imgStatus" class="btn-title">{{ $t('hj198') }}</span>
+                    </el-upload>
+                </div>
+            </li>
             <li><span> {{ $t('jy523') }}</span><a>{{ userInfo.phone ? userInfo.phone : userInfo.phone }}</a></li>
-            <li @click="handleOutLoginClick()"><span> {{ $t('hj148') }}</span><img
+            <!-- <li @click="handleOutLoginClick()"><span> {{ $t('hj148') }}</span><img
                     src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAjVJREFUWEfll7+LE1EQx7+zEcMhBOFKRXG1sLFIZjcaRcxp652lP2oLz0JEsRFBOBubKxS8K87CRhBSKAfiIXKVJshm9j/wam0EiyhZyI5MSCCGCDHydgW32OLt2zefN+8782YIAMIwPJmm6QMANQBzNubg+a6qTSK6JyIfh+tTpVI5TUTvAOx2YHTSkonneQtRFDXtIwVB0FRV23lCRGuq+tkFiKruJ6JlAAUA2yJyrg/AzF3bvaq+iOP4sgvjwzWDINhU1UUAX0VkfgiggwnrInLdJQAzPwdwBcA3Edn7XwKsArgF4JOIHMncA7Vaba7b7S4VCoUoiqKdzAEm6cuiwJkImfkRgEVVvR3H8cs8AMzNhwD0ANwQkbVxCNceOAbgDYB9A8MrInJ/FMIpgBkql8sHPc/bAnB0YHjD9/3lRqNhXulnQmcaGO60Wq3O93q91wCO25iqbhaLxUutVuvHzAD1en1Xp9M5MG3mTNN0D4BnACqDf94nSbI0MwAzbwNYmBbgN/MkVwAi2poZ4G+PwHRQKpUuzgzwJ64fF6Fpwff9qxYJzgEmhOGqiNyxYHAehsw8mojM4F0ReZhZImLm0VR8TUSeZp2KHwO4oKo3c7mMphGqcxGOQlhBkiTJec/zJJeChJmHJdmOiBx2HgXjR/DPVsWZNSbM/MqiYrwxaQE4Ya2Zqj4hoi/TqHeGOVYVWePza2sWhuGZNE3fZtmcEtHZdrv9oS9CewVBcEpVV/Joz38CIWVsSJNAjP0AAAAASUVORK5CYII="
-                    class="tui"></li>
+                    class="tui">
+            </li> -->
         </ul>
     </div>
 </template>
 <script>
 import * as api from "@/axios/api";
+import { MessageBox, Toast } from 'mint-ui';
+import APIUrl from "@/axios/api.url";
 
-import { MessageBox } from 'mint-ui'
 export default {
     name: 'setup',
     data() {
         return {
-            userInfo: []
+            userInfo: {},
+            avatarUrl: require('@/assets/imgRed/touxiang.png'),
+            imgStatus: false,
+            admin: APIUrl.baseURL,
+            headers: {
+                USERTOKEN: localStorage.getItem("USERTOKEN")
+            }
         }
     },
     mounted() {
@@ -38,9 +58,78 @@
                 this.$store.commit('dialogVisible', false);
                 this.$store.state.userInfo = data.data;
                 this.userInfo = data.data;
+                // 设置头像URL
+                if (data.data.photoUrl) {
+                    this.avatarUrl = data.data.photoUrl;
+                }
             } else {
                 this.$store.commit('dialogVisible', true);
             }
+        },
+        // 上传前验证
+        beforeAvatarUpload(file) {
+            this.imgStatus = true;
+            const isLt10M = file.size / 1024 / 1024 < 10;
+            if (!isLt10M) {
+                Toast(this.$t('hj205'));
+                this.imgStatus = false;
+                return false;
+            }
+            return true;
+        },
+        // 上传成功
+        async handleAvatarSuccess(res, file) {
+            this.imgStatus = false;
+            if (res.status === 0 && res.data && res.data.url) {
+                // 上传成功,更新头像URL
+                const photoUrl = res.data.url;
+                this.avatarUrl = photoUrl;
+
+                // 调用头像设置接口
+                if (this.userInfo && this.userInfo.id) {
+                    try {
+                        const updateRes = await api.updatePhoto({
+                            photoUrl: photoUrl,
+                            userId: this.userInfo.id
+                        });
+
+                        if (updateRes.status === 0) {
+                            // 更新用户信息中的头像
+                            this.userInfo.avatar = photoUrl;
+                            this.userInfo.headImg = photoUrl;
+                            Toast(this.$t('hj220'));
+                        } else {
+                            Toast(updateRes.msg || this.$t('hj200'));
+                            // 恢复默认头像
+                            this.avatarUrl = require('@/assets/imgRed/touxiang.png');
+                        }
+                    } catch (updateError) {
+                        console.error('设置头像失败:', updateError);
+                        Toast(this.$t('hj200'));
+                        // 恢复默认头像
+                        this.avatarUrl = require('@/assets/imgRed/touxiang.png');
+                    }
+                }
+                // else {
+                //     // 如果没有 userId,仍然更新本地显示
+                //     if (this.userInfo) {
+                //         this.userInfo.avatar = photoUrl;
+                //         this.userInfo.headImg = photoUrl;
+                //     }
+                //     Toast(this.$t('hj220'));
+                // }
+            } else {
+                Toast(res.msg || this.$t('hj200'));
+                // 恢复默认头像
+                this.avatarUrl = require('@/assets/imgRed/touxiang.png');
+            }
+        },
+        // 上传失败
+        handleError() {
+            this.imgStatus = false;
+            Toast(this.$t('hj200'));
+            // 恢复默认头像
+            this.avatarUrl = require('@/assets/imgRed/touxiang.png');
         },
         handleOutLoginClick() {
             // 退出登录
@@ -71,7 +160,7 @@
 }
 
 </script>
-<style scoped>
+<style lang="less" scoped>
 .bijnm {
     background: #fff;
     min-height: 100vh;
@@ -137,10 +226,49 @@
 }
 
 .ulk li .heasd {
-    margin-right: 0.3204rem;
+    // margin-right: 0.3204rem;
     width: 1.1748rem;
     height: 1.1748rem;
     border-radius: 50%;
+    object-fit: cover;
+}
+
+.avatar-uploader {
+    overflow: hidden;
+}
+
+.avatar-uploader ::v-deep .el-upload {
+    width: 1.1748rem;
+    height: 1.1748rem;
+}
+
+.avatar-uploader ::v-deep .el-upload__input {
+    opacity: 0 !important;
+}
+
+.avatar-uploader ::v-deep .el-upload--picture-card {
+    width: 1.1748rem;
+    height: 1.1748rem;
+    border-radius: 50%;
+    border: none;
+    background: transparent;
+}
+
+.avatar-uploader ::v-deep .el-upload--picture-card .el-upload__input {
+    opacity: 0;
+}
+
+.btn-title {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    text-align: center;
+    color: #fff;
+    font-size: 0.24rem;
+    background: rgba(0, 0, 0, 0.5);
+    border-radius: 0 0 50% 50%;
+    padding: 0.1rem 0;
 }
 
 .ulk li a {

--
Gitblit v1.9.3