{"version":3,"file":"account.19556a1e.mjs","sources":["../../../../layouts/account.vue"],"sourcesContent":["<template>\n  <div id=\"app\">\n    <div class=\"app-header\">\n      <index-header />\n    </div>\n    <div class=\"app-main\" :class=\"footerLayoutEunm[footerType]\">\n      <div class=\"main_bg\">\n        <div class=\"main_user_info\">\n        <div class=\"user_info\">\n          <el-upload\n              class=\"avatar-uploader\"\n              action=\"\"\n              :show-file-list=\"false\"\n              :on-success=\"handleAvatarSuccess\"\n              :before-upload=\"beforeAvatarUpload\"\n          >\n            <img :src=\"data.userInfo.headImg\"  alt=\"加载中...\" title=\"点击更换头像\" />\n            <div class=\"head_img_tip\">\n              更换头像\n            </div>\n          </el-upload>\n          <div class=\"user_msg\">\n          <div class=\"title\">{{ data.userInfo.nickname }}</div>\n          <span>{{ userPhone }}</span>\n          </div>\n        </div>\n        <div class=\"user_course_msg\">\n          <div class=\"user_course_msg_box\">\n            <div class=\"user_course_msg_num\">{{opts.componentInfo.alreadyLearnCourseNum}}</div>\n            <div class=\"user_course_msg_text\">已学课程数</div>\n          </div>\n          <div class=\"user_course_msg_box\">\n            <div class=\"user_course_msg_num\">{{opts.componentInfo.notesNum}}</div>\n            <div class=\"user_course_msg_text\">笔记数</div>\n          </div>\n          <div class=\"user_course_msg_box\">\n            <div class=\"user_course_msg_num\">{{opts.componentInfo.collectionNum}}</div>\n            <div class=\"user_course_msg_text\">收藏数</div>\n          </div>\n          <div class=\"user_course_msg_box\">\n            <div class=\"user_course_msg_num\">{{opts.componentInfo.alreadyGainCertNum}}</div>\n            <div class=\"user_course_msg_text\">已获证书</div>\n          </div>\n        </div>\n        </div>\n      </div>\n      <div class=\"main w\">\n        <div class=\"side_box\">\n          <div class=\"side\">\n            <div\n              class=\"item\"\n              :class=\"{\n                active: item.path === data.currentItem,\n              }\"\n              v-for=\"(item, index) in data.sideList\"\n              :key=\"index\"\n              @click=\"toLink(item.path)\"\n            >\n              <span :class=\"`iconfont ${item.icon}`\"></span>\n              {{ item.name }}\n              <span v-if=\"item.name === '通知消息' && data.count\" class=\"msg_tips\">({{ data.count }})</span>\n            </div>\n          </div>\n        </div>\n        <div class=\"main_container\">\n          <slot />\n        </div>\n      </div>\n    </div>\n    <div class=\"app-footer\">\n      <index-footer />\n    </div>\n    <back-top />\n    <suspense-box />\n  </div>\n</template>\n\n<script setup>\nimport bus from '@/utils/bus'\nimport { useUserStore } from \"~/stores/user\";\nimport { computed, ref } from 'vue';\nimport { uploadAuthPic } from \"~/api/upload\";\nimport { useMsgCount } from \"@/api/user\"\nimport cookie from '@/utils/cookies'\nimport { useLayoutStore } from '@/stores/layout';\nimport { userUpdateHeadImg } from \"~/api/user\";\nimport {getUserGain} from \"../api/user\";\nconst layoutStore = useLayoutStore();\nconst footerType = computed(() => layoutStore.footerType);\nconst footerLayoutEunm = ref({\n  1: 'footer-style-one',\n  2: 'footer-style-two',\n  3: 'footer-style-three',\n});\nconst store = useUserStore();\nconst { getUserView, getShopInfo } = store;\ngetShopInfo()\nconst opts = reactive({\n  componentInfo:{}\n})\nconst route = useRoute();\nconst router = useRouter();\nconst data = reactive({\n  currentItem: \"\",\n  userInfo: computed(() => store.userView),\n  count: 0,\n  sideList: [\n    {\n      name: \"我的课程\",\n      path: \"/account/course\",\n      icon:'icon-m_course'\n    },\n    {\n      name: \"我的班级\",\n      path: \"/account/grade\",\n      icon:'icon-m_class'\n    },\n    {\n      name: '我的试卷',\n      path: \"/account/paper\",\n      icon: 'icon-m_paper'\n    },\n    {\n      name: '我的赛事',\n      path: '/account/event',\n      icon: 'icon-m_class'\n    },\n    {\n      name: '我的课例',\n      path: '/account/rating',\n      icon: 'icon-m_class'\n    },\n    {\n      name: \"我的笔记\",\n      path: \"/account/note\",\n      icon:'icon-m_note'\n    },\n    {\n      name: \"我的证书\",\n      path: \"/account/certificate\",\n      icon:'icon-m_cert'\n    },\n    {\n      name: \"我的订单\",\n      path: \"/account/order\",\n      icon:'icon-m_order'\n    },\n    {\n      name: \"我的收藏\",\n      path: \"/account/collect\",\n      icon:'icon-m_collect'\n    },\n    // {\n    //   name: \"优惠券\",\n    //   path: \"/account/coupon\",\n    //   icon:'icon-m_coupon'\n    // },\n    {\n      name: \"通知消息\",\n      path: \"/account/message\",\n      icon:'icon-m_notice'\n    },\n    {\n      name: \"资料与账号\",\n      path: \"/account/info\",\n      icon:'icon-m_user'\n    }\n  ],\n});\n\nlet userPhone = computed({\n  get: () => {\n    const phone = data.userInfo.phone;\n    if (phone) return phone.substr(0, 3) + \" **** \" + phone.substr(7);\n    else return \"\";\n  },\n});\n\nwatch(\n  route,(newValue, oldValue) => {\n    data.currentItem = route.path;\n  }\n);\n\nonMounted(async () => {\n  bus.on('get-message',()=>{\n    getCount()\n  })\n  opts.componentInfo = await getUserGain()\n  data.currentItem = route.path;\n  getUserView(true)\n  getCount()\n  if (data.userInfo && data.userInfo.refereeType === 1) {\n    data.sideList.splice(5,0,{\n      name: '参赛详情',\n      path: '/account/deputy',\n      icon: 'icon-m_class'\n    })\n  }\n  if (data.userInfo && data.userInfo.refereeType === 2) {\n    data.sideList.splice(5,0,{\n      name: '赛事评委',\n      path: '/account/judges',\n      icon: 'icon-m_class'\n    })\n  }\n});\n\nlet cookieData = {};\nif (process.server) {\n  const nuxtApp = useNuxtApp()\n  if(nuxtApp && nuxtApp.ssrContext && nuxtApp.ssrContext.req ) {\n    cookieData = cookie.getInServer(nuxtApp.ssrContext.req)\n  }\n} else {\n  cookieData = {\n    shopIcon: cookie.getInClient('shopIcon'),\n    shopName: cookie.getInClient('shopName')\n  }\n}\nuseHead({\n  link: [\n    { rel: \"icon\", type: \"image/x-icon\", href: cookieData.shopIcon },\n  ]\n})\n\nconst toLink = (path) => {\n  router.push({ path });\n};\n\nconst getCount = () => {\n  useMsgCount().then(res=>{\n    data.count = Number(res)\n  })\n}\n\nconst handleAvatarSuccess = (res, file) => {\n  const formData = new FormData();\n  formData.append(\"picFile\", file.raw);\n  uploadAuthPic(formData).then((res) => {\n    if (res && res.data) {\n      data.userInfo.headImg = res.data.fileUrl;\n      userUpdateHeadImg({\n        headImg: res.data.fileUrl\n      }).then(() => {\n        getUserView(true)\n      })\n    }\n  });\n};\nconst beforeAvatarUpload = (file) => {\n  const isJPG = file.type === \"image/jpeg\" || file.type === \"image/png\";\n  const isLt2M = file.size / 1024 / 1024 < 2;\n\n  if (!isJPG) {\n    ElMessage.error(\"Avatar picture must be JPG format!\");\n  }\n  if (!isLt2M) {\n    ElMessage.error(\"Avatar picture size can not exceed 2MB!\");\n  }\n  return isJPG && isLt2M;\n};\n</script>\n\n<style lang=\"scss\" scoped>\n#app {\n  position: relative;\n  background-color: #f6f8fb;\n}\n\n.head_img_tip {\n  position: absolute;\n  top: 0px;\n  opacity: 0;\n  width: 120px;\n  height: 120px;\n  color: #FFFFFF;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 60px;\n  font-weight: 400;\n  font-size: 14px;\n  line-height: 120px;\n  z-index: 2;\n  text-align: center;\n  transition: all .2s;\n}\n.avatar-uploader {\n  width: 120px;\n  height: 120px;\n  overflow: hidden;\n  position: relative;\n}\n.avatar-uploader:hover {\n  .head_img_tip {\n    top: 0;\n  opacity: 1;\n\n  }\n}\n.app-header {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1000;\n  background-color: #fff;\n}\n.user_course_msg{\n  display: flex;\n  align-items: center;\n  .user_course_msg_box{\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n    position: relative;\n    &:after{\n      content: '';\n      width: 54px;\n      height: 0px;\n      border: 1px solid rgba(255, 255, 255, 0.2);\n      transform: rotate(105deg);\n      position: absolute;\n      right: -60px;\n    }\n  }\n  .user_course_msg_box:last-child:after{\n    width: 0;\n  }\n  .user_course_msg_num{\n    color: #FFFFFF;\n    font-style: normal;\n    font-weight: 400;\n    font-size: 24px;\n  }\n  .user_course_msg_text{\n    color: rgba(255, 255, 255, 0.7);\n    font-style: normal;\n    font-weight: 400;\n    font-size: 14px;\n    margin-top: 4px;\n  }\n  .user_course_msg_box+.user_course_msg_box{\n    padding-left: 54px;\n\n  }\n}\n.user_info {\n  border-radius: 10px;\n  overflow: hidden;\n  height: 100%;\n  text-align: center;\n  color: #999;\n  display: flex;\n  align-items: center;\n  .user_msg{\n    margin-left: 20px;\n    display: flex;\n    align-items: center;\n    flex-direction: column;\n    justify-content: flex-start;\n    max-width: 100px;\n  }\n  .user_msg span{\n    font-style: normal;\n    font-weight: 400;\n    font-size: 14px;\n    color: rgba(255, 255, 255, 0.8);\n  }\n  img {\n    width: 120px;\n    height: 120px;\n    border-radius: 50%;\n  }\n  .title {\n    width: 100%;\n    font-style: normal;\n    font-weight: 400;\n    font-size: 20px;\n    text-align: left;\n    color: #FFFFFF;\n    margin-bottom: 20px;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n  }\n}\n.msg_tips {\n  color: rgb(221, 0, 44);\n}\n.app-main {\n  min-height: 100vh;\n  padding-top: 66px;\n  background-color: #f6f8fb;\n  .main_bg {\n    height: 150px;\n    background: url(\"~/assets/images/account_bg.png\") no-repeat;\n    background-size: cover;\n\n  }\n  .main_user_info{\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    width: 1200px;\n    margin: auto;\n    height: 100%;\n  }\n  .main {\n    margin-top: 30px;\n    margin-bottom: 20px;\n    display: flex;\n    .side_box {\n      width: 200px;\n      margin-right: 10px;\n      .side {\n        background: #fff;\n        border-radius: 10px;\n        overflow: hidden;\n        padding: 20px;\n        .item+.item{\n          margin-top: 18px;\n        }\n        .item {\n          font-size: 16px;\n          padding-left: 20px;\n          display: flex;\n          align-items: center;\n          height: 50px;\n          cursor: pointer;\n          position: relative;\n          .iconfont{\n            font-size: 16px;\n            margin-right: 8px;\n          }\n          &.active,&:hover {\n            background: rgba(61, 127, 255, 0.1);\n            border-radius: 4px;\n            color: #3D7FFF;\n          }\n        }\n      }\n    }\n    .main_container {\n      background: #fff;\n      border-radius: 10px;\n      width: 990px;\n      padding-bottom: 20px;\n    }\n  }\n}\n\n\n</style>\n"],"names":["layoutStore","useLayoutStore","footerType","computed","footerLayoutEunm","ref","store","useUserStore","getUserView","getShopInfo","opts","reactive","componentInfo","route","useRoute","router","useRouter","data","currentItem","userInfo","userView","count","sideList","name","path","icon","userPhone","get","phone","substr","watch","newValue","oldValue","onMounted","async","bus","on","getCount","getUserGain","refereeType","splice","cookieData","shopIcon","cookie","getInClient","shopName","useHead","link","rel","type","href","useMsgCount","then","res","Number","handleAvatarSuccess","file","formData","FormData","append","raw","uploadAuthPic","headImg","fileUrl","userUpdateHeadImg","beforeAvatarUpload","isJPG","isLt2M","size","ElMessage","error","push"],"mappings":"q6CAuFA,MAAAA,EAAAC,IACAC,EAAAC,GAAA,IAAAH,EAAAE,aACAE,EAAAC,EAAA,CACA,EAAA,mBACA,EAAA,mBACA,EAAA,uBAEAC,GAAAC,KACAC,YAAAA,GAAAC,YAAAA,IAAAH,GACAG,KACA,MAAAC,GAAAC,EAAA,CACAC,cAAA,CAAA,IAEAC,GAAAC,IACAC,GAAAC,IACAC,GAAAN,EAAA,CACAO,YAAA,GACAC,SAAAhB,GAAA,IAAAG,GAAAc,WACAC,MAAA,EACAC,SAAA,CACA,CACAC,KAAA,OACAC,KAAA,kBACAC,KAAA,iBAEA,CACAF,KAAA,OACAC,KAAA,iBACAC,KAAA,gBAEA,CACAF,KAAA,OACAC,KAAA,iBACAC,KAAA,gBAEA,CACAF,KAAA,OACAC,KAAA,iBACAC,KAAA,gBAEA,CACAF,KAAA,OACAC,KAAA,kBACAC,KAAA,gBAEA,CACAF,KAAA,OACAC,KAAA,gBACAC,KAAA,eAEA,CACAF,KAAA,OACAC,KAAA,uBACAC,KAAA,eAEA,CACAF,KAAA,OACAC,KAAA,iBACAC,KAAA,gBAEA,CACAF,KAAA,OACAC,KAAA,mBACAC,KAAA,kBAOA,CACAF,KAAA,OACAC,KAAA,mBACAC,KAAA,iBAEA,CACAF,KAAA,QACAC,KAAA,gBACAC,KAAA,kBAKA,IAAAC,GAAAvB,EAAA,CACAwB,IAAA,KACA,MAAAC,EAAAX,GAAAE,SAAAS,MACA,OAAAA,EAAAA,EAAAC,OAAA,EAAA,GAAA,SAAAD,EAAAC,OAAA,GACA,EAAA,IAIAC,EACAjB,IAAA,CAAAkB,EAAAC,KACAf,GAAAC,YAAAL,GAAAW,IAAA,IAIAS,GAAAC,UACAC,EAAAC,GAAA,eAAA,KACAC,IAAA,IAEA3B,GAAAE,oBAAA0B,IACArB,GAAAC,YAAAL,GAAAW,KACAhB,IAAA,GACA6B,KACApB,GAAAE,UAAA,IAAAF,GAAAE,SAAAoB,aACAtB,GAAAK,SAAAkB,OAAA,EAAA,EAAA,CACAjB,KAAA,OACAC,KAAA,kBACAC,KAAA,iBAGAR,GAAAE,UAAA,IAAAF,GAAAE,SAAAoB,aACAtB,GAAAK,SAAAkB,OAAA,EAAA,EAAA,CACAjB,KAAA,OACAC,KAAA,kBACAC,KAAA,gBAEA,IAGA,IAAAgB,GAAA,CAAA,EAOAA,GAAA,CACAC,SAAAC,EAAAC,YAAA,YACAC,SAAAF,EAAAC,YAAA,aAGAE,EAAA,CACAC,KAAA,CACA,CAAAC,IAAA,OAAAC,KAAA,eAAAC,KAAAT,GAAAC,aAIA,MAIAL,GAAA,KACAc,IAAAC,MAAAC,IACApC,GAAAI,MAAAiC,OAAAD,EAAA,GACA,EAGAE,GAAA,CAAAF,EAAAG,KACA,MAAAC,EAAA,IAAAC,SACAD,EAAAE,OAAA,UAAAH,EAAAI,KACAC,EAAAJ,GAAAL,MAAAC,IACAA,GAAAA,EAAApC,OACAA,GAAAE,SAAA2C,QAAAT,EAAApC,KAAA8C,QACAC,EAAA,CACAF,QAAAT,EAAApC,KAAA8C,UACAX,MAAA,KACA5C,IAAA,EAAA,IAEA,GACA,EAEAyD,GAAAT,IACA,MAAAU,EAAA,eAAAV,EAAAP,MAAA,cAAAO,EAAAP,KACAkB,EAAAX,EAAAY,KAAA,KAAA,KAAA,EAQA,OANAF,GACAG,UAAAC,MAAA,sCAEAH,GACAE,UAAAC,MAAA,2CAEAJ,GAAAC,CAAA,23BAlCA3C,cACAT,GAAAwD,KAAA,CAAA/C,SADA,IAAAA"}