123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- <!-- 用户资料页 -->
- <template>
- <view class="uni-content">
- <view class="avatar">
- <uni-id-pages-avatar width="260rpx" height="260rpx"></uni-id-pages-avatar>
- </view>
- <uni-list>
- <uni-list-item class="item" @click="setNickname('')" title="昵称" :rightText="userInfo.nickname||'未设置'" link>
- </uni-list-item>
- <uni-list-item class="item" @click="bindMobile" title="手机号" :rightText="userInfo.mobile||'未绑定'" link>
- </uni-list-item>
- <uni-list-item v-if="userInfo.email" class="item" title="电子邮箱" :rightText="userInfo.email">
- </uni-list-item>
- <!-- #ifdef APP -->
- <!-- 如未开通实人认证服务,可以将实名认证入口注释 -->
- <uni-list-item class="item" @click="realNameVerify" title="实名认证" :rightText="realNameStatus !== 2 ? '未认证': '已认证'" link>
- </uni-list-item>
- <!-- #endif -->
- <uni-list-item v-if="hasPwd" class="item" @click="changePassword" title="修改密码" link>
- </uni-list-item>
- </uni-list>
- <!-- #ifndef MP -->
- <uni-list class="mt10">
- <uni-list-item @click="deactivate" title="注销账号" link="navigateTo"></uni-list-item>
- </uni-list>
- <!-- #endif -->
- <uni-popup ref="dialog" type="dialog">
- <uni-popup-dialog mode="input" :value="userInfo.nickname" @confirm="setNickname" :inputType="setNicknameIng?'nickname':'text'"
- title="设置昵称" placeholder="请输入要设置的昵称">
- </uni-popup-dialog>
- </uni-popup>
- <uni-id-pages-bind-mobile ref="bind-mobile-by-sms" @success="bindMobileSuccess"></uni-id-pages-bind-mobile>
- <template v-if="showLoginManage">
- <button v-if="userInfo._id" @click="logout">退出登录</button>
- <button v-else @click="login">去登录</button>
- </template>
- </view>
- </template>
- <script>
- const uniIdCo = uniCloud.importObject("uni-id-co")
- import {
- store,
- mutations
- } from '@/uni_modules/uni-id-pages/common/store.js'
- export default {
- computed: {
- userInfo() {
- return store.userInfo
- },
- realNameStatus () {
- if (!this.userInfo.realNameAuth) {
- return 0
- }
- return this.userInfo.realNameAuth.authStatus
- }
- },
- data() {
- return {
- univerifyStyle: {
- authButton: {
- "title": "本机号码一键绑定", // 授权按钮文案
- },
- otherLoginButton: {
- "title": "其他号码绑定",
- }
- },
- // userInfo: {
- // mobile:'',
- // nickname:''
- // },
- hasPwd: false,
- showLoginManage: false ,//通过页面传参隐藏登录&退出登录按钮
- setNicknameIng:false
- }
- },
- async onShow() {
- this.univerifyStyle.authButton.title = "本机号码一键绑定"
- this.univerifyStyle.otherLoginButton.title = "其他号码绑定"
- },
- async onLoad(e) {
- if (e.showLoginManage) {
- this.showLoginManage = true //通过页面传参隐藏登录&退出登录按钮
- }
- //判断当前用户是否有密码,否则就不显示密码修改功能
- let res = await uniIdCo.getAccountInfo()
- this.hasPwd = res.isPasswordSet
- },
- methods: {
- login() {
- uni.navigateTo({
- url: '/uni_modules/uni-id-pages/pages/login/login-withoutpwd',
- complete: (e) => {
- // console.log(e);
- }
- })
- },
- logout() {
- mutations.logout()
- },
- bindMobileSuccess() {
- mutations.updateUserInfo()
- },
- changePassword() {
- uni.navigateTo({
- url: '/uni_modules/uni-id-pages/pages/userinfo/change_pwd/change_pwd',
- complete: (e) => {
- // console.log(e);
- }
- })
- },
- bindMobile() {
- // #ifdef APP-PLUS
- uni.preLogin({
- provider: 'univerify',
- success: this.univerify(), //预登录成功
- fail: (res) => { // 预登录失败
- // 不显示一键登录选项(或置灰)
- console.log(res)
- this.bindMobileBySmsCode()
- }
- })
- // #endif
- // #ifdef MP-WEIXIN
- this.$refs['bind-mobile-by-sms'].open()
- // #endif
- // #ifdef H5
- //...去用验证码绑定
- this.bindMobileBySmsCode()
- // #endif
- },
- univerify() {
- uni.login({
- "provider": 'univerify',
- "univerifyStyle": this.univerifyStyle,
- success: async e => {
- uniIdCo.bindMobileByUniverify(e.authResult).then(res => {
- mutations.updateUserInfo()
- }).catch(e => {
- console.log(e);
- }).finally(e => {
- // console.log(e);
- uni.closeAuthView()
- })
- },
- fail: (err) => {
- console.log(err);
- if (err.code == '30002' || err.code == '30001') {
- this.bindMobileBySmsCode()
- }
- }
- })
- },
- bindMobileBySmsCode() {
- uni.navigateTo({
- url: './bind-mobile/bind-mobile'
- })
- },
- setNickname(nickname) {
- if (nickname) {
- mutations.updateUserInfo({
- nickname
- })
- this.setNicknameIng = false
- this.$refs.dialog.close()
- } else {
- this.$refs.dialog.open()
- }
- },
- deactivate(){
- uni.navigateTo({
- url:"/uni_modules/uni-id-pages/pages/userinfo/deactivate/deactivate"
- })
- },
- async bindThirdAccount(provider) {
- const uniIdCo = uniCloud.importObject("uni-id-co")
- const bindField = {
- weixin: 'wx_openid',
- alipay: 'ali_openid',
- apple: 'apple_openid',
- qq: 'qq_openid'
- }[provider.toLowerCase()]
- if (this.userInfo[bindField]) {
- await uniIdCo['unbind' + provider]()
- await mutations.updateUserInfo()
- } else {
- uni.login({
- provider: provider.toLowerCase(),
- onlyAuthorize: true,
- success: async e => {
- const res = await uniIdCo['bind' + provider]({
- code: e.code
- })
- if (res.errCode) {
- uni.showToast({
- title: res.errMsg || '绑定失败',
- duration: 3000
- })
- }
- await mutations.updateUserInfo()
- },
- fail: async (err) => {
- console.log(err);
- uni.hideLoading()
- }
- })
- }
- },
- realNameVerify () {
- uni.navigateTo({
- url: "/uni_modules/uni-id-pages/pages/userinfo/realname-verify/realname-verify"
- })
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- @import "@/uni_modules/uni-id-pages/common/login-page.scss";
- .uni-content {
- padding: 0;
- }
- /* #ifndef APP-NVUE */
- view {
- display: flex;
- box-sizing: border-box;
- flex-direction: column;
- }
- @media screen and (min-width: 690px) {
- .uni-content {
- padding: 0;
- max-width: 690px;
- margin-left: calc(50% - 345px);
- border: none;
- max-height: none;
- border-radius: 0;
- box-shadow: none;
- }
- }
- /* #endif */
- .avatar {
- align-items: center;
- justify-content: center;
- margin: 22px 0;
- width: 100%;
- }
- .item {
- flex: 1;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- }
- button {
- margin: 10%;
- margin-top: 40px;
- border-radius: 0;
- background-color: #FFFFFF;
- width: 80%;
- }
- .mt10 {
- margin-top: 10px;
- }
- </style>
|