yuanyuan před 3 roky
rodič
revize
caabb4d682
34 změnil soubory, kde provedl 1461 přidání a 72 odebrání
  1. 1 1
      .env.development
  2. binární
      src/assets/fenxiang-icon@3x.png
  3. binární
      src/assets/icon-bi@3x.png
  4. binární
      src/assets/icon-bianji@3x.png
  5. binární
      src/assets/icon-diqu@3x.png
  6. binární
      src/assets/icon-gongsi@3x.png
  7. binární
      src/assets/icon-guanbiyinsi@3x.png
  8. binární
      src/assets/icon-jianjie@3x.png
  9. binární
      src/assets/icon-kaiqiyinsi@3x.png
  10. binární
      src/assets/icon-kechakan@3x.png
  11. binární
      src/assets/icon-renzheng@3x.png
  12. binární
      src/assets/icon-shengri@3x.png
  13. binární
      src/assets/icon-weidianliang@3x.png
  14. binární
      src/assets/icon-xingbie@3x.png
  15. binární
      src/assets/icon-xingzuo@3x.png
  16. binární
      src/assets/icon-xuexiao@3x.png
  17. binární
      src/assets/icon-xuexing@3x.png
  18. binární
      src/assets/icon-yidianliang@3x.png
  19. binární
      src/assets/icon-yirenzheng@3x.png
  20. binární
      src/assets/icon-youxiang@3x.png
  21. binární
      src/assets/icon-zhiye@3x.png
  22. binární
      src/assets/icon_close@3x.png
  23. binární
      src/assets/icon_fanhui@3x.png
  24. binární
      src/assets/icon_fenxiang_close@3x.png
  25. binární
      src/assets/icon_inter@3x.png
  26. binární
      src/assets/icon_touxiang@3x (1).png
  27. binární
      src/assets/icon_touxiang@3x.png
  28. binární
      src/assets/png-bg@3x (1).png
  29. binární
      src/assets/png-bg@3x.png
  30. 12 1
      src/router/index.js
  31. 333 45
      src/views/Mine.vue
  32. 156 14
      src/views/account/ChangeText.vue
  33. 469 11
      src/views/account/Setting.vue
  34. 490 0
      src/views/account/SettingComplete.vue

+ 1 - 1
.env.development

@@ -1,4 +1,4 @@
-VUE_APP_BASE_URL=https://www.raex.vip/
+VUE_APP_BASE_URL=https://test.raex.vip/
 NODE_ENV=development
 VUE_APP_PUBLIC_PATH=/
 ASSETS_PATH=raex

binární
src/assets/fenxiang-icon@3x.png


binární
src/assets/icon-bi@3x.png


binární
src/assets/icon-bianji@3x.png


binární
src/assets/icon-diqu@3x.png


binární
src/assets/icon-gongsi@3x.png


binární
src/assets/icon-guanbiyinsi@3x.png


binární
src/assets/icon-jianjie@3x.png


binární
src/assets/icon-kaiqiyinsi@3x.png


binární
src/assets/icon-kechakan@3x.png


binární
src/assets/icon-renzheng@3x.png


binární
src/assets/icon-shengri@3x.png


binární
src/assets/icon-weidianliang@3x.png


binární
src/assets/icon-xingbie@3x.png


binární
src/assets/icon-xingzuo@3x.png


binární
src/assets/icon-xuexiao@3x.png


binární
src/assets/icon-xuexing@3x.png


binární
src/assets/icon-yidianliang@3x.png


binární
src/assets/icon-yirenzheng@3x.png


binární
src/assets/icon-youxiang@3x.png


binární
src/assets/icon-zhiye@3x.png


binární
src/assets/icon_close@3x.png


binární
src/assets/icon_fanhui@3x.png


binární
src/assets/icon_fenxiang_close@3x.png


binární
src/assets/icon_inter@3x.png


binární
src/assets/icon_touxiang@3x (1).png


binární
src/assets/icon_touxiang@3x.png


binární
src/assets/png-bg@3x (1).png


binární
src/assets/png-bg@3x.png


+ 12 - 1
src/router/index.js

@@ -234,7 +234,18 @@ const routes = [
     {
         path: '/setting',
         name: 'userSetting',
-        component: () => import('../views/account/Setting.vue')
+        component: () => import('../views/account/Setting.vue'),
+        meta: {
+            menuPage: true
+        }
+    },
+    {
+        path: '/SettingComplete',
+        name: 'userSettingComplete',
+        component: () => import('../views/account/SettingComplete.vue'),
+        meta: {
+            menuPage: true
+        }
     },
     {
         path: '/changeText',

+ 333 - 45
src/views/Mine.vue

@@ -10,25 +10,25 @@
             <van-image
                 width="100%"
                 height="52vw"
-                :src="userInfo.bg ? userInfo.bg + '?r=' + refreshFlag : require('@assets/creatorBg.png')"
+                :src="userInfo.bg ? userInfo.bg : require('@assets/creatorBg.png')"
                 loading-icon=""
                 fit="cover"
                 class="top-img"
             />
             <template v-if="publishShow">
-                <div class="yinsi" v-if="userInfo.isPublicShow" @click="changeShow(false)">
-                    <img src="@assets/icon-kaiqiyinsi.png" alt="" />
-                    <span>开启隐私</span>
+                <div class="yinsi" v-if="userInfo.isPublicShow" @click="turnPrivacy = true">
+                    <img src="@assets/icon-guanbiyinsi@3x.png" alt="" />
+                    <!-- <span>开启隐私</span> -->
                 </div>
-                <div class="yinsi not" v-else @click="changeShow(true)">
-                    <img src="@assets/icon-guanbiyinsi.png" alt="" />
-                    <span>关闭隐私</span>
+                <div class="yinsi" v-else @click="turnOffPrivacy = true">
+                    <img src="@assets/icon-kaiqiyinsi@3x.png" alt="" />
+                    <!-- <span>关闭隐私</span> -->
                 </div>
             </template>
 
             <div class="edit-btn" @click="$router.push('/setting')">
-                <img src="../assets/icon-bianji1.png" alt="" />
-                <span>编辑</span>
+                <img src="../assets/icon-bi@3x.png" alt="" />
+                <!-- <span>编辑</span> -->
             </div>
             <div class="userInfo-content">
                 <div class="userInfo-top">
@@ -36,14 +36,10 @@
                         radius="100"
                         width="150"
                         height="150"
-                        :src="
-                            userInfo.avatar
-                                ? userInfo.avatar + '?r=' + refreshFlag
-                                : require('@assets/img_default_photo.png')
-                        "
+                        :src="userInfo.avatar ? userInfo.avatar : require('@assets/img_default_photo.png')"
                         fit="cover"
                         :class="{ activeAvatar: isLogin && userInfo.useCollectionPic }"
-                        @click="$router.push('/setting')"
+                        @click="$router.push('/SettingComplete')"
                     />
                     <div class="text">
                         <div class="text1">
@@ -53,23 +49,26 @@
                             <span> 用户ID:{{ userInfo.id }} </span>
                             <img @click="copy" src="@assets/svgs/copy_icon.svg" alt="" />
                         </div>
-                        <div class="icons" @click="goAuth">
-                            <div class="auth-imgs" v-if="authStatus !== '已认证'">
+                        <div class="icons">
+                            <div class="auth-imgs" v-if="authStatus !== '已认证'" @click="goAuth">
                                 <img src="../assets/renzheng_icon.png" alt="" />
                                 <span>未实名认证</span>
                             </div>
                             <div class="auth-imgs authed" @click="goAuth" v-else>
-                                <img src="../assets/yirenzhng-geren-icon.png" alt="" />
+                                <img :src="require('@assets/icon-yirenzheng@3x.png')" alt="" />
                                 <span>个人已认证</span>
                             </div>
-
+                            <div class="auth-imgs autheds" @click="illuminateShow = true">
+                                <img :src="require('@assets/icon-weidianliang@3x.png')" alt="" />
+                                <span>去点亮</span>
+                            </div>
                             <level ref="level"></level>
                         </div>
                     </div>
                 </div>
 
                 <div class="sub" :class="{ 'van-multi-ellipsis--l2': !showMore }">
-                    {{ userInfo.intro }}
+                    {{ info.autograph }}
                 </div>
                 <div class="sub-right" v-if="userInfo && userInfo.intro && userInfo.intro.length > 50">
                     <img
@@ -213,6 +212,81 @@
         <post ref="post" :info="shareProduct" noButton></post>
         <tuan-rank></tuan-rank>
     </van-pull-refresh>
+    <van-dialog v-model:show="illuminateShow" theme="round-button" className="risk">
+        <div class="risk-box">
+            <img :src="require('@assets/png-bg@3x.png')" alt="" class="toiIlluminate_imgOne" />
+            <img :src="require('@assets/png-bg@3x (1).png')" alt="" class="toiIlluminate_imgTwo" />
+            <div class="risk-box_id">
+                <div class="risk-box_id_one">元宇宙身份证</div>
+                <div class="risk-box_id_two"></div>
+            </div>
+            <div class="risk-box_tip">元宇宙身份证是什么?</div>
+            <div class="risk-box_title">
+                <div class="risk-box_title_con">元宇宙身份证,是绿洲宇宙的探索者在元宇宙中的唯一身份标识</div>
+            </div>
+            <div class="risk-box_title">
+                <div class="risk-box_title_con">
+                    RAEX绿洲与OASISMETA绿洲元宇宙将会共享您的身份信息,让您在绿洲元宇宙中的探索更加有趣及有价值
+                </div>
+            </div>
+            <div class="to_illuminate">
+                <div class="to_illuminate_con" @click="$router.push('/setting')">去点亮</div>
+            </div>
+            <div class="perfect_tip">完善资料信息,点亮图标</div>
+        </div>
+        <template #footer>
+            <div class="toiIlluminate_Three">
+                <img
+                    :src="require('@assets/icon_fenxiang_close@3x.png')"
+                    alt=""
+                    class="toiIlluminate_imgThree"
+                    @click="illuminateShow = false"
+                />
+            </div>
+        </template>
+    </van-dialog>
+    <van-dialog :show="turnPrivacy" theme="round-button" className="risk">
+        <div class="wrapper">
+            <img
+                :src="require('@assets/icon_close@3x.png')"
+                alt=""
+                class="privacy_off_img"
+                @click="turnPrivacy = false"
+            />
+            <div class="wrapper_img">
+                <img :src="require('@assets/icon-wufachakan.png')" alt="" class="privacy_img" />
+            </div>
+            <div class="wrapper_title">隐私设置</div>
+            <div class="wrapper_tip">当前关闭状态,他人将无法查看你主页的任何信息。</div>
+            <div class="wrapper_division"></div>
+            <div class="wrapper_btn">
+                <div class="wrapper_btn_left" @click="turnPrivacy = false">保持关闭</div>
+                <div class="wrapper_btn_right" @click="changeShow(false)">开启主页</div>
+            </div>
+        </div>
+        <template #footer> </template>
+    </van-dialog>
+    <van-dialog :show="turnOffPrivacy" theme="round-button" className="risk">
+        <div class="wrapper">
+            <img
+                :src="require('@assets/icon_close@3x.png')"
+                alt=""
+                class="privacy_off_img"
+                @click="turnOffPrivacy = false"
+            />
+            <div class="wrapper_img">
+                <img :src="require('@assets/icon-kechakan@3x.png')" alt="" class="privacy_img" />
+            </div>
+            <div class="wrapper_title">隐私设置</div>
+            <div class="wrapper_tip">关闭后,他人将无法查看你主页的任何信息。</div>
+            <div class="wrapper_division"></div>
+            <div class="wrapper_btn">
+                <div class="wrapper_btn_left" @click="changeShow(true)">关闭主页</div>
+                <div class="wrapper_btn_right" @click="turnOffPrivacy = false">保持开启</div>
+            </div>
+        </div>
+        <template #footer> </template>
+    </van-dialog>
 </template>
 
 <script>
@@ -233,7 +307,11 @@ export default {
             refreshFlag: Number(localStorage.getItem('refreshFlag') || '0'),
             enableWallet: false,
             faceAuth: false,
-            publishShow: false
+            publishShow: false,
+            illuminateShow: false,
+            info: {},
+            turnPrivacy: false,
+            turnOffPrivacy: false
         };
     },
     components: { Level, Post, TuanRank },
@@ -243,6 +321,13 @@ export default {
     created() {
         this.getInit();
     },
+    mounted() {
+        if (this.isLogin) {
+            this.$http.get('/userDetail/get/' + this.userInfo.id).then(res => {
+                this.info = res;
+            });
+        }
+    },
     methods: {
         getInit(refresh) {
             if (this.isLogin) {
@@ -367,20 +452,215 @@ export default {
                 });
         },
         changeShow(isPublicShow) {
-            this.$dialog
-                .confirm({
-                    title: isPublicShow ? '关闭隐私' : '开启隐私',
-                    message: isPublicShow ? '关闭后,他人将看到你的主页信息' : '开启后,他人将无法查看你的主页信息'
-                })
-                .then(() => {
-                    this.updateUser({ isPublicShow: isPublicShow });
-                });
+            this.turnPrivacy = false
+            this.turnOffPrivacy = false
+            this.updateUser({ isPublicShow: isPublicShow });
+            // this.$dialog
+            //     .confirm({
+            //         title: isPublicShow ? '关闭隐私' : '开启隐私',
+            //         message: isPublicShow ? '关闭后,他人将看到你的主页信息' : '开启后,他人将无法查看你的主页信息'
+            //     })
+            //     .then(() => {
+                    
+            //     });
         }
     }
 };
 </script>
 
 <style lang="less" scoped>
+.risk-box {
+    width: calc(100vw - 95px);
+    background: #ffffff;
+    position: relative;
+    .toiIlluminate_imgOne {
+        width: 96px;
+        height: 100px;
+        position: absolute;
+        right: 0px;
+        top: 0px;
+    }
+    .toiIlluminate_imgTwo {
+        width: 40px;
+        height: 129px;
+        position: absolute;
+        left: 0px;
+        bottom: 0px;
+    }
+    .risk-box_id {
+        padding-top: 30px;
+        padding-left: 20px;
+        font-size: 24px;
+        font-family: PingFangSC-Semibold, PingFang SC;
+        font-weight: bold;
+        color: #000000;
+        line-height: 34px;
+        position: relative;
+        .risk-box_id_one {
+            position: relative;
+            z-index: 2002;
+            margin-bottom: 30px;
+        }
+        .risk-box_id_two {
+            width: 84px;
+            height: 14px;
+            background: #48d802;
+            border-radius: 7px;
+            position: absolute;
+            left: 20px;
+            bottom: 0px;
+        }
+    }
+    .risk-box_tip {
+        padding-left: 20px;
+        margin-bottom: 12px;
+        font-size: 14px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #939599;
+        line-height: 20px;
+    }
+    .risk-box_title {
+        margin-bottom: 10px;
+    }
+    .risk-box_title_con {
+        font-size: 14px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #1b1b1b;
+        line-height: 20px;
+        padding-left: 30px;
+        padding-right: 20px;
+        position: relative;
+    }
+    .risk-box_title_con::after {
+        content: '';
+        width: 6px;
+        height: 6px;
+        border-radius: 50%;
+        background: #3ab200;
+        position: absolute;
+        top: 6px;
+        left: 18px;
+    }
+    .to_illuminate {
+        margin-top: 20px;
+        padding: 0px 20px;
+        margin-bottom: 10px;
+        position: relative;
+        z-index: 2002;
+        .to_illuminate_con {
+            height: 38px;
+            background: #3ab200;
+            border-radius: 19px;
+            font-size: 16px;
+            font-family: PingFangSC-Medium, PingFang SC;
+            font-weight: bold;
+            color: #ffffff;
+            line-height: 38px;
+            text-align: center;
+        }
+    }
+    .perfect_tip {
+        font-size: 12px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #939599;
+        line-height: 17px;
+        text-align: center;
+        padding-bottom: 14px;
+    }
+}
+.wrapper {
+    height: 260px;
+    width: calc(100vw - 115px);
+    // width: calc(100vw);
+    background: #ffffff;
+    border-radius: 16px 16px 0px 0px;
+    position: relative;
+    .privacy_off_img {
+        width: 24px;
+        height: 24px;
+        position: absolute;
+        top: 16px;
+        right: 16px;
+    }
+    .wrapper_img {
+        display: flex;
+        justify-content: center;
+        .privacy_img {
+            width: 64px;
+            height: 64px;
+            padding-top: 22px;
+        }
+    }
+    .wrapper_title {
+        font-size: 16px;
+        font-family: PingFangSC-Medium, PingFang SC;
+        font-weight: bold;
+        color: #000000;
+        line-height: 24px;
+        margin-top: 4px;
+        margin-bottom: 8px;
+        text-align: center;
+    }
+    .wrapper_tip {
+        padding: 0px 16px;
+        font-size: 14px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #939599;
+        line-height: 20px;
+        text-align: center;
+        margin-bottom: 28px;
+    }
+    .wrapper_division {
+        width: 100%;
+        height: 1px;
+        background: #f2f4f5;
+        margin-bottom: 9px;
+    }
+    .wrapper_btn {
+        padding: 0px 16px;
+        display: flex;
+        justify-content: space-between;
+        .wrapper_btn_left {
+            width: calc(50vw - 83.5px);
+            height: 38px;
+            border-radius: 22px;
+            border: 1px solid #939599;
+            box-sizing: border-box;
+            font-size: 16px;
+            font-family: PingFangSC-Medium, PingFang SC;
+            font-weight: bold;
+            color: #939599;
+            line-height: 38px;
+            text-align: center;
+        }
+        .wrapper_btn_right {
+            width: calc(50vw - 83.5px);
+            height: 38px;
+            background: #3ab200;
+            border-radius: 22px;
+            font-size: 16px;
+            font-family: PingFangSC-Medium, PingFang SC;
+            font-weight: 500;
+            color: #ffffff;
+            line-height: 38px;
+            text-align: center;
+        }
+    }
+}
+.toiIlluminate_Three {
+    display: flex;
+    justify-content: center;
+    padding-top: 70px;
+    // transform: translateY(70px);
+    .toiIlluminate_imgThree {
+        width: 40px;
+        height: 40px;
+    }
+}
 .mine {
     background-color: #272b2e;
     padding-top: 0 !important;
@@ -754,7 +1034,7 @@ export default {
             .flex();
             .auth-imgs {
                 .flex();
-                transform: translateX(15px);
+                // transform: translateX(15px);
                 img {
                     width: 28px;
                     height: 28px;
@@ -775,11 +1055,19 @@ export default {
 
                 &.authed {
                     span {
-                        color: #ff8f3e;
-                        background-color: #ffefe8;
+                        color: #418bff;
+                        background: #e8f3ff;
                         position: relative;
                     }
                 }
+                &.autheds {
+                    span {
+                        color: #939599;
+                        background: #373b3e;
+                        position: relative;
+                        transform: scale(0.8) translateX(-15px);
+                    }
+                }
             }
         }
     }
@@ -846,8 +1134,8 @@ export default {
     .flex();
     z-index: 20;
     img {
-        width: 18px;
-        height: 18px;
+        width: 20px;
+        height: 20px;
     }
     span {
         font-size: 12px;
@@ -855,26 +1143,26 @@ export default {
         line-height: 12px;
         margin-left: 4px;
     }
-    width: 72px;
-    height: 24px;
-    background: #272b2e;
-    border-radius: 4px;
+    // width: 72px;
+    // height: 24px;
+    // background: #272b2e;
+    // border-radius: 4px;
     justify-content: center;
 }
 
 .yinsi {
     position: absolute;
-    background: #3ab200;
-    border-radius: 4px;
+    // background: #3ab200;
+    // border-radius: 4px;
     top: calc(var(--safe-top) + 16px);
-    left: 16px;
+    right: 52px;
     z-index: 3;
-    padding: 0 11px;
-    height: 24px;
+    // padding: 0 11px;
+    // height: 24px;
     .flex();
     img {
-        width: 18px;
-        height: 18px;
+        width: 20px;
+        height: 20px;
     }
     span {
         font-size: 12px;

+ 156 - 14
src/views/account/ChangeText.vue

@@ -1,12 +1,122 @@
 <template>
-    <div class="change">
-        <div class="title">{{ type === 'nickname' ? '昵称' : '简介' }}</div>
+    <div class="change" v-if="type === 'nickname'">
+        <div class="title">昵称</div>
         <van-field
             v-model="message"
-            :rows="type === 'nickname' ? 1 : 4"
+            :rows="1"
             type="textarea"
-            :maxlength="type === 'nickname' ? 10 : 50"
-            :placeholder="type === 'nickname' ? '请输入昵称' : '请添加介绍,让大家了解你'"
+            :maxlength="10"
+            :placeholder="'请输入昵称'"
+            show-word-limit
+            clearable
+        />
+        <div class="btn">
+            <van-button
+                type="primary"
+                block
+                round
+                :color="`linear-gradient(to right, ${$colors.prim}, ${$colors.warn})`"
+                @click="save"
+                >保存</van-button
+            >
+        </div>
+    </div>
+    <div class="change" v-else-if="type === 'intro'">
+        <div class="title">简介</div>
+        <van-field
+            v-model="info.autograph"
+            :rows="4"
+            type="textarea"
+            :maxlength="50"
+            :placeholder="'请添加介绍,让大家了解你'"
+            show-word-limit
+            clearable
+        />
+        <div class="btn">
+            <van-button
+                type="primary"
+                block
+                round
+                :color="`linear-gradient(to right, ${$colors.prim}, ${$colors.warn})`"
+                @click="save"
+                >保存</van-button
+            >
+        </div>
+    </div>
+    <div class="change" v-else-if="type === 'school'">
+        <div class="title">学校</div>
+        <van-field
+            v-model="info.school"
+            :rows="1"
+            type="textarea"
+            :maxlength="20"
+            :placeholder="'请输入学校'"
+            show-word-limit
+            clearable
+        />
+        <div class="btn">
+            <van-button
+                type="primary"
+                block
+                round
+                :color="`linear-gradient(to right, ${$colors.prim}, ${$colors.warn})`"
+                @click="save"
+                >保存</van-button
+            >
+        </div>
+    </div>
+    <div class="change" v-else-if="type === 'occupation'">
+        <div class="title">职业</div>
+        <van-field
+            v-model="info.occupation"
+            :rows="1"
+            type="textarea"
+            :maxlength="20"
+            :placeholder="'请输入职业'"
+            show-word-limit
+            clearable
+        />
+        <div class="btn">
+            <van-button
+                type="primary"
+                block
+                round
+                :color="`linear-gradient(to right, ${$colors.prim}, ${$colors.warn})`"
+                @click="save"
+                >保存</van-button
+            >
+        </div>
+    </div>
+    <div class="change" v-else-if="type === 'company'">
+        <div class="title">公司</div>
+        <van-field
+            v-model="info.company"
+            :rows="1"
+            type="textarea"
+            :maxlength="20"
+            :placeholder="'请输入公司'"
+            show-word-limit
+            clearable
+        />
+        <div class="btn">
+            <van-button
+                type="primary"
+                block
+                round
+                :color="`linear-gradient(to right, ${$colors.prim}, ${$colors.warn})`"
+                @click="save"
+                >保存</van-button
+            >
+        </div>
+    </div>
+    <div class="change" v-else-if="type === 'mailbox'">
+        <div class="title">邮箱</div>
+        <van-field
+            v-model="info.mail"
+            :rows="1"
+            type="textarea"
+            :maxlength="40"
+            :placeholder="'请输入邮箱'"
             show-word-limit
             clearable
         />
@@ -15,7 +125,6 @@
                 type="primary"
                 block
                 round
-                :disabled="!message"
                 :color="`linear-gradient(to right, ${$colors.prim}, ${$colors.warn})`"
                 @click="save"
                 >保存</van-button
@@ -33,22 +142,55 @@ export default {
     data() {
         return {
             type: 'nickname',
-            message: ''
+            message: '',
+            // briefIntroduction: '',
+            // school: '',
+            // occupation: "",
+            // company: '',
+            // mailbox: '',
+            info: {}
         };
     },
     mounted() {
         this.type = this.$route.query.type;
-        this.message = this.userInfo[this.type];
+        this.message = this.userInfo.nickname;
+        this.getInformation();
     },
     methods: {
+        getInformation() {
+            this.$http.get('/userDetail/get/' + this.userInfo.id).then(res => {
+                this.info.autograph = res.autograph;
+                this.info.school = res.school;
+                this.info.occupation = res.occupation;
+                this.info.company = res.company;
+                this.info.mail = res.mail;
+            });
+        },
         save() {
-            if (this.message) {
-                this.updateUser({ [this.type]: this.message }).then(() => {
-                    setTimeout(() => {
-                        this.$router.back();
-                    }, 1500);
-                });
+            let data = {
+                userId: this.userInfo.id,
+                nickname: this.message,
+                ...this.info
+            };
+            this.$http.post('/userDetail/save', data, { body: 'json' }).then(() => {
+                this.$toast.success('更新成功');
+                setTimeout(() => {
+                    this.$router.back();
+                }, 1500);
+            });
+            if (this.type === 'nickname') {
+                this.updateUser({ [this.type]: this.message }).then(() => {});
+            } else if (this.type === 'intro') {
+                this.updateUser({ [this.type]: this.info.autograph }).then(() => {});
             }
+            // /userDetail/save
+            // if (this.message) {
+            //     this.updateUser({ [this.type]: this.message }).then(() => {
+            //         setTimeout(() => {
+            //             this.$router.back();
+            //         }, 1500);
+            //     });
+            // }
         }
     }
 };

+ 469 - 11
src/views/account/Setting.vue

@@ -1,8 +1,155 @@
 <template>
     <div class="setting">
-        <div class="tabs">编辑资料</div>
-
-        <van-cell-group :border="false">
+        <div class="setting_top">
+            <div class="setting_top_left" @click="$router.go(-1)">
+                <img :src="require('@assets/icon_fanhui@3x.png')" alt="" class="setting_top_left_img" />
+            </div>
+            <van-image
+                width="100%"
+                height="52vw"
+                :src="userInfo.bg ? userInfo.bg : require('@assets/creatorBg.png')"
+                loading-icon=""
+                fit="cover"
+                class="top-img"
+            />
+            <div class="setting_top_right">
+                <img :src="require('@assets/icon_touxiang@3x.png')" alt="" class="setting_top_right_img" />
+                <div>更换背景</div>
+                <van-uploader class="avatar" :after-read="afterRead2" result-type="file" />
+            </div>
+        </div>
+        <div class="setting_list">
+            <div class="setting_listOne">
+                <div class="setting_listOne_top">
+                    <van-image
+                        radius="50%"
+                        width="100"
+                        height="100"
+                        :src="userInfo.avatar || require('@assets/svgs/img_default_photo.svg')"
+                        fit="cover"
+                        class="setting_listOne_imgTwo"
+                    />
+                    <div class="setting_listOne_top_con">
+                        <img
+                            :src="require('@assets/icon_touxiang@3x (1).png')"
+                            alt=""
+                            class="setting_listOne_top_con_img"
+                        />
+                    </div>
+                    <van-uploader class="avatar" :after-read="afterRead" result-type="file" />
+                </div>
+                <div class="setting_listOne_text2">
+                    <span>ID:{{ userInfo.id }}</span>
+                    <img @click="copy" src="@assets/svgs/copy_icon.svg" alt="" style="margin-left: 2px" />
+                </div>
+                <div class="setting_list_con" @click="$router.push('/changeText?type=nickname')">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/fenxiang-icon@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field
+                            label="昵称"
+                            :model-value="info.nickname || userInfo.nickname"
+                            placeholder="你的昵称"
+                            readonly
+                        />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" @click="$router.push('/changeText?type=intro')">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-jianjie@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field
+                            label="简介"
+                            :model-value="info.autograph"
+                            placeholder="有趣的介绍可以吸引更多粉丝"
+                            readonly
+                        />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" v-if="authStatus !== '已认证'" @click="goAuth">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-renzheng@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="实名认证" model-value="未认证" placeholder="" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" v-else>
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-renzheng@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="实名认证" model-value="个人已认证" placeholder="" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+            </div>
+            <div class="setting_listTwo">
+                <div class="setting_list_con" @click="choice((title = 'gender'))">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-xingbie@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="性别" :model-value="info.sex" placeholder="选择你的性别" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" @click="showTime = true">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-shengri@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="生日" :model-value="info.birthday" placeholder="选择你的生日" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" @click="choice((title = 'blood'))">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-xuexing@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="血型" :model-value="info.blood" placeholder="选择你的血型" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" @click="choice((title = 'constellation'))">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-xingzuo@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="星座" :model-value="info.constellation" placeholder="选择你的星座" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" @click="shows = true">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-diqu@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="地区" :model-value="info.home" placeholder="选择你所在的地区" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" @click="$router.push('/changeText?type=school')">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-xuexiao@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="学校" :model-value="info.school" placeholder="你的学校" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+            </div>
+            <div class="setting_listThree">
+                <div class="setting_list_con" @click="$router.push('/changeText?type=occupation')">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-zhiye@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="职业" :model-value="info.occupation" placeholder="你的职业" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" @click="$router.push('/changeText?type=company')">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-gongsi@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="公司" :model-value="info.company" placeholder="你的公司" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+                <div class="setting_list_con" @click="$router.push('/changeText?type=mailbox')">
+                    <div class="setting_list_con_left">
+                        <img :src="require('@assets/icon-youxiang@3x.png')" alt="" class="setting_list_con_left_img" />
+                        <van-field label="邮箱" :model-value="info.mail" placeholder="你的邮箱" readonly />
+                    </div>
+                    <img :src="require('@assets/icon_inter@3x.png')" alt="" class="setting_list_con_right" />
+                </div>
+            </div>
+        </div>
+        <!-- <van-cell-group :border="false">
             <van-cell title="头像" is-link>
                 <template #value>
                     <van-image
@@ -47,6 +194,13 @@
             <van-cell class="not" v-if="showConsole" title="测试app" is-link @click="goTest" />
         </van-cell-group>
 
+        <van-action-sheet
+            v-model:show="show"
+            :actions="actions"
+            cancel-text="取消"
+            close-on-click-action
+            @select="chooseSex"
+        /> -->
         <van-action-sheet
             v-model:show="show"
             :actions="actions"
@@ -54,11 +208,26 @@
             close-on-click-action
             @select="chooseSex"
         />
+        <van-popup v-model:show="shows" position="bottom" :style="{ height: '30%' }">
+            <van-area :area-list="areaList" @cancel="cancel" @confirm="confirm" />
+        </van-popup>
+        <van-popup v-model:show="showTime" position="bottom" :style="{ height: '30%' }">
+            <van-datetime-picker
+                v-model="currentDate"
+                type="date"
+                title="选择年月日"
+                :min-date="minDate"
+                :max-date="maxDate"
+                @cancel="cancelTime"
+                @confirm="confirmTime"
+            />
+        </van-popup>
     </div>
 </template>
 
 <script>
 import { mapState } from 'vuex';
+import { areaList } from '@vant/area-data';
 import { ref } from 'vue';
 import eruda from 'eruda';
 export default {
@@ -67,24 +236,154 @@ export default {
     },
     data() {
         return {
-            showTest: false
+            showTest: false,
+            region: '',
+            info: {},
+            title: ''
         };
     },
     setup() {
         //性别
         const show = ref(false);
-        const actions = [{ name: '男' }, { name: '女' }];
-
+        const actions = [];
+        const shows = ref(false);
+        const showTime = ref(false);
+        const currentDate = ref(new Date(2021, 0, 1));
         return {
             show,
+            shows,
+            showTime,
             actions,
             clickNum: 0,
-            timeout: null
+            timeout: null,
+            areaList,
+            minDate: new Date(1970, 0, 1),
+            maxDate: new Date(2025, 10, 1),
+            currentDate
         };
     },
+    mounted() {
+        this.getInformation();
+    },
     methods: {
+        getInformation() {
+            this.$http.get('/userDetail/get/' + this.userInfo.id).then(res => {
+                this.info = res;
+            });
+        },
+        goAuth() {
+            if (this.authStatus === '认证中' || this.authStatus === '认证失败') {
+                this.$router.push('/waiting');
+            } else if (this.authStatus === '未认证') {
+                if (this.faceAuth) {
+                    this.$router.push('/faceAuth');
+                } else {
+                    this.$router.push('/verified');
+                }
+            }
+        },
+        choice(title) {
+            this.title = title;
+            this.show = true;
+            if (title == 'gender') {
+                this.actions = [{ name: '男' }, { name: '女' }];
+            } else if (title == 'blood') {
+                this.actions = [{ name: 'A' }, { name: 'B' }, { name: 'O' }, { name: 'AB' }, { name: 'RH' }];
+            } else if (title == 'constellation') {
+                this.actions = [
+                    { name: '白羊座' },
+                    { name: '金牛座' },
+                    { name: '双子座' },
+                    { name: '巨蟹座' },
+                    { name: '狮子座' },
+                    { name: '处女座' },
+                    { name: '天秤座' },
+                    { name: '天蝎座' },
+                    { name: '射手座' },
+                    { name: '摩羯座' },
+                    { name: '水瓶座' },
+                    { name: '双鱼座' }
+                ];
+            }
+        },
+        copy() {
+            this.$copyText(this.userInfo.id).then(
+                e => {
+                    this.$toast.success('复制成功');
+                    console.log(e);
+                },
+                e => {
+                    this.$toast('复制失败');
+                    console.log(e);
+                }
+            );
+        },
+        cancel() {
+            this.shows = false;
+        },
+        confirm(ConfirmResult) {
+            this.shows = false;
+            if (ConfirmResult[0].name === '北京市') {
+                this.region = ConfirmResult[1].name + ConfirmResult[2].name;
+            } else if (ConfirmResult[0].name === '天津市') {
+                this.region = ConfirmResult[1].name + ConfirmResult[2].name;
+            } else if (ConfirmResult[0].name === '上海市') {
+                this.region = ConfirmResult[1].name + ConfirmResult[2].name;
+            } else if (ConfirmResult[1].name === '重庆市') {
+                this.region = ConfirmResult[1].name + ConfirmResult[2].name;
+            } else if (ConfirmResult[1].name === '县') {
+                this.region = ConfirmResult[0].name + ConfirmResult[2].name;
+            } else {
+                this.region = ConfirmResult[0].name + ConfirmResult[1].name + ConfirmResult[2].name;
+            }
+            let data = {
+                userId: this.userInfo.id,
+                home: this.region
+            };
+            this.$http.post('/userDetail/save', data, { body: 'json' }).then(() => {
+                this.$toast.success('更新成功');
+                this.getInformation();
+            });
+        },
+        cancelTime() {
+            this.showTime = false;
+        },
+        confirmTime() {
+            this.showTime = false;
+            this.currentDate = this.dayjs(this.currentDate).format('YYYY.MM.DD');
+            let data = {
+                userId: this.userInfo.id,
+                birthday: this.currentDate
+            };
+            this.$http.post('/userDetail/save', data, { body: 'json' }).then(() => {
+                this.$toast.success('更新成功');
+                this.getInformation();
+            });
+        },
         chooseSex(val) {
-            this.updateUser({ sex: val.name });
+            let data = {
+                userId: this.userInfo.id
+            };
+            if (this.title == 'gender') {
+                data = {
+                    ...data,
+                    sex: val.name
+                };
+            } else if (this.title == 'blood') {
+                data = {
+                    ...data,
+                    blood: val.name
+                };
+            } else if (this.title == 'constellation') {
+                data = {
+                    ...data,
+                    constellation: val.name
+                };
+            }
+            this.$http.post('/userDetail/save', data, { body: 'json' }).then(() => {
+                this.$toast.success('更新成功');
+                this.getInformation();
+            });
         },
         afterRead(e) {
             this.$toast.loading({
@@ -92,6 +391,15 @@ export default {
                 forbidClick: true
             });
             this.updateFile(e, 'avatar', 300).then(img => {
+                let data = {
+                    userId: this.userInfo.id,
+                    pic: img
+                };
+                this.$http.post('/userDetail/save', data, { body: 'json' }).then(() => {
+                    this.$toast.clear();
+                    this.$toast.success('更新成功');
+                    this.getInformation();
+                });
                 this.updateUser({ avatar: img, useCollectionPic: false }).then(res => {
                     this.$toast.clear();
                 });
@@ -103,6 +411,15 @@ export default {
                 forbidClick: true
             });
             this.updateFile(e, 'bg', 1200).then(img => {
+                let data = {
+                    userId: this.userInfo.id,
+                    bgpic: img
+                };
+                this.$http.post('/userDetail/save', data, { body: 'json' }).then(() => {
+                    this.$toast.clear();
+                    this.$toast.success('更新成功');
+                    this.getInformation();
+                });
                 this.updateUser({ bg: img }).then(res => {
                     this.$toast.clear();
                 });
@@ -138,9 +455,143 @@ export default {
 
 <style lang="less" scoped>
 .setting {
-    padding: 10px 0 100px;
+    // padding: 10px 0 100px;
+    background: #272b2e;
+    padding-bottom: 100px;
+    .setting_top {
+        position: relative;
+    }
+    .setting_top_left {
+        position: absolute;
+        left: 16px;
+        top: 20px;
+        width: 32px;
+        height: 32px;
+        background: rgba(255, 255, 255, 0.1);
+        z-index: 99;
+        border-radius: 50%;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        .setting_top_left_img {
+            width: 18px;
+            height: 18px;
+        }
+    }
+    .setting_top_right {
+        width: 88px;
+        height: 32px;
+        background: rgba(255, 255, 255, 0.1);
+        border-radius: 16px;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        padding-left: 10px;
+        padding-right: 8px;
+        box-sizing: border-box;
+        position: absolute;
+        right: 16px;
+        top: 20px;
+        z-index: 99;
+        font-size: 12px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #ffffff;
+        .setting_top_right_img {
+            width: 18px;
+            height: 18px;
+        }
+    }
+    .setting_list {
+        padding: 0px 16px;
+        .setting_list_con {
+            width: 100%;
+            height: 52px;
+            background: #373b3e;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            font-size: 15px;
+            font-family: PingFangSC-Regular, PingFang SC;
+            font-weight: 400;
+            color: #c3c4c5;
+            line-height: 24px;
+            .setting_list_con_left {
+                display: flex;
+                align-items: center;
+                .setting_list_con_left_img {
+                    width: 18px;
+                    height: 18px;
+                    margin-right: 6px;
+                }
+            }
+            .setting_list_con_right {
+                width: 24px;
+                height: 24px;
+            }
+        }
+        .setting_listOne {
+            background: #373b3e;
+            border-radius: 12px;
+            padding: 0px 12px 10px;
+            display: flex;
+            align-items: center;
+            flex-direction: column;
+            transform: translateY(-40px);
+            .setting_listOne_top {
+                position: relative;
+                border-radius: 50%;
+                overflow: hidden;
+                transform: translateY(-60px);
+                .setting_listOne_imgTwo {
+                    vertical-align: bottom;
+                }
+                .setting_listOne_top_con {
+                    position: absolute;
+                    left: 0px;
+                    bottom: 0px;
+                    width: 100px;
+                    height: 24px;
+                    background: rgba(0, 0, 0, 0.4);
+                    display: flex;
+                    justify-content: center;
+                    .setting_listOne_top_con_img {
+                        width: 18px;
+                        height: 18px;
+                    }
+                }
+            }
+            .setting_listOne_text2 {
+                font-size: 14px;
+                font-family: PingFangSC-Regular, PingFang SC;
+                font-weight: 400;
+                color: #939599;
+                line-height: 24px;
+                display: flex;
+                align-items: center;
+                margin-top: 6px;
+                margin-top: -50px;
+            }
+        }
+        .setting_listTwo {
+            margin-top: -28px;
+            background: #373b3e;
+            border-radius: 12px;
+            padding: 10px 12px;
+        }
+        .setting_listThree {
+            background: #373b3e;
+            border-radius: 12px;
+            padding: 10px 12px;
+            margin-top: 12px;
+        }
+    }
+}
+/deep/ .van-field__control {
+    font-weight: 500;
+    color: #ffffff;
+    line-height: 24px;
 }
-
 .tabs {
     font-size: 20px;
     font-weight: bold;
@@ -159,8 +610,11 @@ export default {
 
 /deep/ .van-cell {
     align-items: center;
-    height: 70px;
     position: relative;
+    padding: 0px !important;
+    .van-field__label {
+        margin-right: -10px !important;
+    }
     .van-cell__title {
         span {
             font-weight: bold;
@@ -169,6 +623,10 @@ export default {
     }
 
     .van-cell__value {
+        width: calc(100vw - 200px);
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
         span {
             font-size: 16px;
             color: @text0;

+ 490 - 0
src/views/account/SettingComplete.vue

@@ -0,0 +1,490 @@
+<template>
+    <div class="setting">
+        <div class="setting_top">
+            <div class="setting_top_left" @click="$router.go(-1)">
+                <img :src="require('@assets/icon_fanhui@3x.png')" alt="" class="setting_top_left_img" />
+            </div>
+            <van-image
+                width="100%"
+                height="52vw"
+                :src="info.bgpic ? info.bgpic : require('@assets/creatorBg.png')"
+                loading-icon=""
+                fit="cover"
+                class="top-img"
+            />
+            <!-- <div class="setting_top_right">
+                <img :src="require('@assets/icon_touxiang@3x.png')" alt="" class="setting_top_right_img" />
+                <div>更换背景</div>
+                <van-uploader class="avatar" :after-read="afterRead2" result-type="file" />
+            </div> -->
+        </div>
+        <div class="setting_list">
+            <div class="setting_listOne">
+                <img
+                    :src="require('@assets/icon-bianji@3x.png')"
+                    alt=""
+                    class="setting_listOne_img"
+                    @click="$router.push('/setting')"
+                />
+                <van-image
+                    radius="50"
+                    width="100"
+                    height="100"
+                    :src="info.pic ? info.pic : require('@assets/img_default_photo.png')"
+                    fit="cover"
+                    class="setting_listOne_imgTwo"
+                />
+                <div class="setting_listOne_text1">
+                    <span class="van-ellipsis" style="max-width: 120px">{{ info.nickname }}</span>
+                </div>
+                <div class="setting_listOne_text2">
+                    <span>ID:{{ info.userId }}</span>
+                    <img @click="copy" src="@assets/svgs/copy_icon.svg" alt="" style="margin-left: 2px" />
+                </div>
+                <div class="icons">
+                    <div class="auth-imgs" v-if="authStatus != '已认证'">
+                        <img :src="require('@assets/renzheng_icon.png')" alt="" />
+                        <span>未实名认证</span>
+                    </div>
+                    <div class="auth-imgs authed" v-else>
+                        <img :src="require('@assets/icon-yirenzheng@3x.png')" alt="" />
+                        <span>个人已认证</span>
+                    </div>
+                    <div class="auth-imgs autheds">
+                        <img :src="require('@assets/icon-yidianliang@3x.png')" alt="" />
+                        <span>元宇宙身份</span>
+                    </div>
+                    <level ref="level"></level>
+                </div>
+                <div class="personal_signature">{{ info.autograph }}</div>
+            </div>
+            <div class="setting_listTwo">
+                <div class="setting_listTwo_con">
+                    <div class="setting_listTwo_con_num">{{ info.nftCount }}</div>
+                    <div class="setting_listTwo_con_title">持有总量</div>
+                </div>
+                <div class="setting_listTwo_con">
+                    <div class="setting_listTwo_con_num">{{ info.buildCount }}</div>
+                    <div class="setting_listTwo_con_title">建筑总量</div>
+                </div>
+                <div class="setting_listTwo_con">
+                    <div class="setting_listTwo_con_num">{{ info.plotCount }}</div>
+                    <div class="setting_listTwo_con_title">地块总量</div>
+                </div>
+                <div class="setting_listTwo_con">
+                    <div class="setting_listTwo_con_num">{{ info.fansCount }}</div>
+                    <div class="setting_listTwo_con_title">粉丝总量</div>
+                </div>
+                <div class="setting_listTwo_con">
+                    <div class="setting_listTwo_con_num">{{ info.reikiCount }}</div>
+                    <div class="setting_listTwo_con_title">灵气总量</div>
+                </div>
+                <div class="setting_listTwo_con">
+                    <div class="setting_listTwo_con_num">{{ info.medalCount }}</div>
+                    <div class="setting_listTwo_con_title">徽章总量</div>
+                </div>
+                <div class="setting_listTwo_con">
+                    <div class="setting_listTwo_con_num">{{ info.personalheatCount || 0 }}</div>
+                    <div class="setting_listTwo_con_title">个人热力值</div>
+                </div>
+            </div>
+            <div class="setting_listThree">
+                <div class="setting_listThree_con">
+                    <div class="setting_listThree_con_left">
+                        <img
+                            :src="require('@assets/icon-xingbie@3x.png')"
+                            alt=""
+                            class="setting_listThree_con_left_img"
+                        />
+                        <div class="setting_listThree_con_left_title">性别</div>
+                    </div>
+                    <div class="setting_listThree_con_right">{{ info.sex || '暂未设置'}}</div>
+                </div>
+                <div class="setting_listThree_con">
+                    <div class="setting_listThree_con_left">
+                        <img
+                            :src="require('@assets/icon-shengri@3x.png')"
+                            alt=""
+                            class="setting_listThree_con_left_img"
+                        />
+                        <div class="setting_listThree_con_left_title">生日</div>
+                    </div>
+                    <div class="setting_listThree_con_right">{{ info.birthday || '暂未设置'}}</div>
+                </div>
+                <div class="setting_listThree_con">
+                    <div class="setting_listThree_con_left">
+                        <img
+                            :src="require('@assets/icon-xuexing@3x.png')"
+                            alt=""
+                            class="setting_listThree_con_left_img"
+                        />
+                        <div class="setting_listThree_con_left_title">血型</div>
+                    </div>
+                    <div class="setting_listThree_con_right">{{ info.blood || '暂未设置'}}</div>
+                </div>
+                <div class="setting_listThree_con">
+                    <div class="setting_listThree_con_left">
+                        <img
+                            :src="require('@assets/icon-xingzuo@3x.png')"
+                            alt=""
+                            class="setting_listThree_con_left_img"
+                        />
+                        <div class="setting_listThree_con_left_title">星座</div>
+                    </div>
+                    <div class="setting_listThree_con_right">{{ info.constellation || '暂未设置'}}</div>
+                </div>
+                <div class="setting_listThree_con">
+                    <div class="setting_listThree_con_left">
+                        <img :src="require('@assets/icon-diqu@3x.png')" alt="" class="setting_listThree_con_left_img" />
+                        <div class="setting_listThree_con_left_title">地区</div>
+                    </div>
+                    <div class="setting_listThree_con_right">{{ info.home || '暂未设置'}}</div>
+                </div>
+                <div class="setting_listThree_con">
+                    <div class="setting_listThree_con_left">
+                        <img
+                            :src="require('@assets/icon-xuexiao@3x.png')"
+                            alt=""
+                            class="setting_listThree_con_left_img"
+                        />
+                        <div class="setting_listThree_con_left_title">学校</div>
+                    </div>
+                    <div class="setting_listThree_con_right">{{ info.school || '暂未设置'}}</div>
+                </div>
+            </div>
+            <div class="setting_listThree">
+                <div class="setting_listThree_con">
+                    <div class="setting_listThree_con_left">
+                        <img
+                            :src="require('@assets/icon-zhiye@3x.png')"
+                            alt=""
+                            class="setting_listThree_con_left_img"
+                        />
+                        <div class="setting_listThree_con_left_title">职业</div>
+                    </div>
+                    <div class="setting_listThree_con_right">{{ info.occupation || '暂未设置'}}</div>
+                </div>
+                <div class="setting_listThree_con">
+                    <div class="setting_listThree_con_left">
+                        <img
+                            :src="require('@assets/icon-gongsi@3x.png')"
+                            alt=""
+                            class="setting_listThree_con_left_img"
+                        />
+                        <div class="setting_listThree_con_left_title">公司</div>
+                    </div>
+                    <div class="setting_listThree_con_right">{{ info.company || '暂未设置'}}</div>
+                </div>
+                <div class="setting_listThree_con">
+                    <div class="setting_listThree_con_left">
+                        <img
+                            :src="require('@assets/icon-youxiang@3x.png')"
+                            alt=""
+                            class="setting_listThree_con_left_img"
+                        />
+                        <div class="setting_listThree_con_left_title">邮箱</div>
+                    </div>
+                    <div class="setting_listThree_con_right">{{ info.mail || '暂未设置'}}</div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import { ref } from 'vue';
+import eruda from 'eruda';
+import Level from '../../components/level/Level.vue';
+export default {
+    computed: {
+        ...mapState(['userInfo', 'showConsole'])
+    },
+    components: { Level },
+    data() {
+        return {
+            showTest: false,
+            info: {}
+        };
+    },
+    mounted() {
+        this.$http.get('/userDetail/get/' + this.userInfo.id).then(res => {
+            this.info = res;
+        });
+    },
+    methods: {
+        copy() {
+            this.$copyText(this.userInfo.id).then(
+                e => {
+                    this.$toast.success('复制成功');
+                    console.log(e);
+                },
+                e => {
+                    this.$toast('复制失败');
+                    console.log(e);
+                }
+            );
+        }
+    }
+};
+</script>
+
+<style lang="less" scoped>
+.setting {
+    background: #272b2e;
+    padding-bottom: 100px;
+    // padding: 10px 0 100px;
+    .setting_top {
+        position: relative;
+    }
+    .setting_top_left {
+        position: absolute;
+        left: 16px;
+        top: 20px;
+        width: 32px;
+        height: 32px;
+        background: rgba(255, 255, 255, 0.1);
+        z-index: 99;
+        border-radius: 50%;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        .setting_top_left_img {
+            width: 18px;
+            height: 18px;
+        }
+    }
+    .setting_top_right {
+        width: 88px;
+        height: 32px;
+        background: rgba(255, 255, 255, 0.1);
+        border-radius: 16px;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        padding-left: 10px;
+        padding-right: 8px;
+        box-sizing: border-box;
+        position: absolute;
+        right: 16px;
+        top: 20px;
+        z-index: 99;
+        font-size: 12px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #ffffff;
+        .setting_top_right_img {
+            width: 18px;
+            height: 18px;
+        }
+    }
+    .setting_list {
+        padding: 0px 16px;
+        .setting_listOne {
+            background: #373b3e;
+            border-radius: 12px;
+            display: flex;
+            align-items: center;
+            flex-direction: column;
+            transform: translateY(-50px);
+            padding: 0px 12px 16px;
+            box-sizing: border-box;
+            position: relative;
+            .setting_listOne_img {
+                width: 24px;
+                height: 24px;
+                position: absolute;
+                top: 16px;
+                right: 16px;
+            }
+            .setting_listOne_imgTwo {
+                transform: translateY(-50px);
+            }
+            .setting_listOne_text1 {
+                font-size: 24px;
+                font-family: PingFangSC-Medium, PingFang SC;
+                font-weight: bold;
+                color: #ffffff;
+                line-height: 24px;
+                margin-top: -34px;
+            }
+            .setting_listOne_text2 {
+                font-size: 14px;
+                font-family: PingFangSC-Regular, PingFang SC;
+                font-weight: 400;
+                color: #939599;
+                line-height: 24px;
+                display: flex;
+                align-items: center;
+                margin-top: 6px;
+            }
+            .icons {
+                margin-top: 4px;
+                .flex();
+                .auth-imgs {
+                    .flex();
+                    // transform: translateX(15px);
+                    img {
+                        width: 28px;
+                        height: 28px;
+                        position: relative;
+                        z-index: 1;
+                    }
+                    span {
+                        font-size: 12px;
+                        color: @text3;
+                        line-height: 18px;
+                        background-color: rgba(113, 113, 113, 0.2);
+                        border-radius: 2px;
+                        padding: 0 4px 0 10px;
+                        transform: scale(0.8) translateX(-24px);
+                        position: relative;
+                        z-index: 0;
+                    }
+
+                    &.authed {
+                        span {
+                            color: #418bff;
+                            background: #e8f3ff;
+                            position: relative;
+                        }
+                    }
+                    &.autheds {
+                        span {
+                            color: #39af00;
+                            background: #f3ffed;
+                            position: relative;
+                        }
+                    }
+                }
+            }
+            .personal_signature {
+                margin-top: 8px;
+                font-size: 13px;
+                font-family: PingFangSC-Regular, PingFang SC;
+                font-weight: 400;
+                color: #ffffff;
+                line-height: 18px;
+            }
+        }
+        .setting_listTwo {
+            margin-top: -39px;
+            padding: 16px 10px 6px;
+            background: #373b3e;
+            border-radius: 12px;
+            display: flex;
+            flex-wrap: wrap;
+            .setting_listTwo_con {
+                width: calc(25vw - 22px);
+                height: 54px;
+                text-align: center;
+                margin-right: 12px;
+                margin-bottom: 10px;
+                position: relative;
+                padding-top: 8px;
+                box-sizing: border-box;
+                .setting_listTwo_con_num {
+                    font-size: 18px;
+                    font-weight: bold;
+                    color: #ffffff;
+                    line-height: 24px;
+                }
+                .setting_listTwo_con_title {
+                    font-size: 12px;
+                    font-weight: 400;
+                    color: #c3c4c5;
+                    line-height: 17px;
+                }
+            }
+            .setting_listTwo_con:nth-of-type(4) {
+                margin-right: 0px;
+            }
+            .setting_listTwo_con:nth-of-type(1)::after {
+                content: '';
+                width: 1px;
+                height: 30px;
+                background: rgba(255, 255, 255, 0.1);
+                position: absolute;
+                right: -6px;
+                top: 12px;
+            }
+            .setting_listTwo_con:nth-of-type(2)::after {
+                content: '';
+                width: 1px;
+                height: 30px;
+                background: rgba(255, 255, 255, 0.1);
+                position: absolute;
+                right: -6px;
+                top: 12px;
+            }
+            .setting_listTwo_con:nth-of-type(3)::after {
+                content: '';
+                width: 1px;
+                height: 30px;
+                background: rgba(255, 255, 255, 0.1);
+                position: absolute;
+                right: -6px;
+                top: 12px;
+            }
+            .setting_listTwo_con:nth-of-type(5)::after {
+                content: '';
+                width: 1px;
+                height: 30px;
+                background: rgba(255, 255, 255, 0.1);
+                position: absolute;
+                right: -6px;
+                top: 12px;
+            }
+            .setting_listTwo_con:nth-of-type(6)::after {
+                content: '';
+                width: 1px;
+                height: 30px;
+                background: rgba(255, 255, 255, 0.1);
+                position: absolute;
+                right: -6px;
+                top: 12px;
+            }
+        }
+        .setting_listThree {
+            padding: 10px 0px;
+            background: #373b3e;
+            border-radius: 12px;
+            margin-top: 12px;
+            .setting_listThree_con {
+                height: 52px;
+                display: flex;
+                padding: 0px 12px;
+                align-items: center;
+                .setting_listThree_con_left {
+                    display: flex;
+                    margin-right: 44px;
+                    align-items: center;
+                    .setting_listThree_con_left_img {
+                        width: 18px;
+                        height: 18px;
+                        margin-right: 6px;
+                    }
+                    .setting_listThree_con_left_title {
+                        font-size: 15px;
+                        font-family: PingFangSC-Regular, PingFang SC;
+                        font-weight: 400;
+                        color: #c3c4c5;
+                        line-height: 24px;
+                    }
+                }
+                .setting_listThree_con_right {
+                    width: calc(50vw + 50px);
+                    overflow: hidden;
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                    font-size: 15px;
+                    font-family: PingFangSC-Medium, PingFang SC;
+                    font-weight: bold;
+                    color: #ffffff;
+                    line-height: 24px;
+                }
+            }
+        }
+    }
+}
+</style>