<script setup>
import { computed, ref, onMounted } from 'vue'
import { reactive, toRefs } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios';

export default {
  setup() {
    const logOut = () => {
      if (window.confirm('确定退出吗?')) {
        clearToken()
        clearTAR()
        refreshPage()
      } else {
        // 取消退出操作
      }
    }

    const clearToken = () => {
      const token = localStorage.getItem('token')
      axios.post('http://nn.nncoding.icu:8080/api/logout', {}, {
        headers: {
          token: token
        }
      }).then((result) => {
        console.log(result)
      }).catch((error) => {
        console.log(error)
      })
    }

    const clearTAR = () => {
      localStorage.removeItem('token')
      localStorage.removeItem('roles')
    }

    const refreshPage = () => {
      location.reload()
    }

    const state = reactive({
      squareUrl: '',
      username: '',
      phone: '',
      email: '',
      title: ''
    })

    const { squareUrl, username, phone, email, title } = toRefs(state)

    const size = ref('')
    const iconStyle = computed(() => {
      const marginMap = {
        large: '8px',
        default: '6px',
        small: '4px',
      }
      return {
        marginRight: marginMap[size.value] || marginMap.default,
      }
    })
    const blockMargin = computed(() => {
      const marginMap = {
        large: '32px',
        default: '28px',
        small: '24px',
      }
      return {
        marginTop: marginMap[size.value] || marginMap.default,
      }
    })

    const open = () => {
      ElMessageBox.alert(
        '用户名: <input type="text" style="float:left;width:100%;height:25px;border-radius:5px;border:1px solid;">' +
        '<br/>密码:&nbsp; <input type="password" style="float:left;width:100%;height:25px;border-radius:5px;border:1px solid;">' +
        '<br/>邮箱:  <input type="email" style="float:left;width:100%;height:25px;border-radius:5px;border:1px solid;">' +
        '<br/>电话号码:<input type="num" style="float:left;width:100%;height:25px;border-radius:5px;border:1px solid;">',
        {
          dangerouslyUseHTMLString: true,
        }
      )
    }

    const getUserInfo = () => {
      const token = localStorage.getItem("token");

      axios.get('http://localhost:8080/api/user/info', {
        headers: {
          token: token
        }
      }).then((response) => {
        state.username = response.data.data.username;
        state.phone = response.data.data.phone;
        state.email = response.data.data.email;
        state.title = response.data.data.title;
        let str = response.data.data.headUrl;
        let url = str.match(/(http[s]?:\/\/[^\s]+)/g);
        state.squareUrl = url[0];
      }).catch((error) => {
        console.error(error);
      });
    }

    onMounted(() => {
      getUserInfo();
    })

    return {
      logOut,
      size,
      iconStyle,
      blockMargin,
      open,
      ...toRefs(state)
    }
  },
}
</script
script setup 基本信息import computed ref onMounted from vue 头像import reactive toRefs from vue 修改个人信息import ElMessage ElMessageBox from element-plusimport axios from axios;export default setup

原文地址: https://www.cveoy.top/t/topic/ijuL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录