{"version":3,"file":"index.0184bb6e.mjs","sources":["../../../../pages/account/message/index.vue"],"sourcesContent":["<template>\n    <NuxtLayout name=\"account\">\n      <div class=\"page-account-class\">\n        <div v-show=\"!ctrl.showDetail\">\n          <el-tabs v-model=\"messageType\" class=\"demo-tabs\" @tab-change=\"handleClick\">\n            <el-tab-pane\n              v-for=\"(item, index) in data.tabsList\"\n              :key=\"index\"\n              :label=\"item.label\"\n              :name=\"item.name\"\n            ></el-tab-pane>\n          </el-tabs>\n          <div class=\"tabs_btn_list\">\n            <div class=\"gray_color tabs_btn\" @click=\"batchAllReady\">全部标为已读</div>\n            <div class=\"gray_color tabs_btn\" v-if=\"!ctrl.edit\" @click=\"ctrl.edit = true\">批量操作</div>\n            <template v-else>\n              <div class=\"gray_color tabs_btn\" @click=\"batchDelete\">删除</div>\n                <div class=\"gray_color tabs_btn\"  @click=\"cancelSelection\">取消</div>\n            </template>\n          </div>\n        <div class=\"message_list\" v-loading=\"ctrl.loading\">\n          <div class=\"message_item\" :class=\"{flex_edit:ctrl.edit}\" v-for=\"(item,index) in data.list\" :key=\"index\">\n            <div class=\"message_left\">\n              <div class=\"message_msg tx-ov-2\" :class=\"{read:item.isRead}\" @click=\"handleView(item.id)\">{{item.msgTitle}}</div>\n              <div class=\"message_time\">{{item.gmtCreate}}</div>\n            </div>\n            <div class=\"message_right\" v-if=\"ctrl.edit\" @click=\"handleEditSelection(item)\">\n              <span class=\"iconfont icon-success\" :class=\"{active:opts.selection.indexOf(item.id) > -1}\"></span>\n            </div>\n          </div>\n        </div>\n          <client-only>\n            <el-pagination\n              class=\"pagination\"\n              v-model:currentPage=\"data.current\"\n              layout=\"prev, pager, next, jumper\"\n              :total=\"data.totalCount\"\n              background\n              hide-on-single-page\n              @current-change=\"handleCurrentChange\"\n            >\n            </el-pagination>\n          </client-only>\n        </div>\n        <div v-show=\"ctrl.showDetail\" v-loading=\"ctrl.loading\" class=\"detail_box\">\n          <span @click=\"ctrl.showDetail = false\" class=\"back_msg\">返回</span>\n          <div v-if=\"data.info && data.info.id\" class=\"msg_info_wrapper\">\n            <p>{{data.info.msgTitle}}</p>\n            <p class=\"c_999\">{{data.info.gmtCreate}}</p>\n            <div class=\"content\" v-html=\"data.info.msgContent\"></div>\n          </div>\n        </div>\n      </div>\n    </NuxtLayout>\n</template>\n\n<script setup>\nimport bus from '@/utils/bus'\nimport { ArrowRight } from \"@element-plus/icons-vue\";\nimport {batchUseMsgDelete, batchUserMsgWatch, getMsgUsePage, useMsgCount,useMsgView} from \"../../../api/user\";\nimport {ElMessage, ElMessageBox} from \"element-plus\";\n\nuseHead({\n  title:'消息通知'\n});\n\nconst router = useRouter();\n\nconst messageType = ref('all');\nconst ctrl = reactive({\n  loading:false,\n  edit:false,\n  showDetail: false\n})\nconst data = reactive({\n  tabsList: [\n    {\n      label: \"全部消息\",\n      name: 'all',\n    },\n    {\n      label:'未读消息',\n      name: 'false'\n    },\n    {\n      label:'已读消息',\n      name: 'true'\n    }\n  ],\n  list: [],\n  count:0,\n  pages: 0,\n  current: 1,\n  totalCount: 0,\n  info: {}\n});\nconst opts = reactive({\n  selection:[]\n})\nonMounted(async () => {\n  await getCount()\n  getData();\n});\nconst handleView = (id) => {\n  ctrl.loading = true\n  data.info = {}\n  ctrl.showDetail = true\n  useMsgView(id).then(res => {\n    if(res) {\n      data.info = res\n      document.querySelector('#app').scrollTop = 150\n    }\n    bus.emit('get-message')\n    ctrl.loading = false\n  })\n}\nconst getCount = () => {\n  useMsgCount().then(res=>{\n    data.count = Number(res.data)\n  })\n}\nconst cancelSelection = () => {\n  opts.selection = []\n  ctrl.edit = false\n}\n\nconst batchDelete = () => {\n  if(opts.selection.length < 1){\n    ElMessage.error('请选择删除数据')\n    return false\n  }\n  ElMessageBox.confirm('确定删除选择消息吗？','删除提醒',{\n    confirmButtonText:'确定',\n    cancelButtonText:'取消'\n  }).then(()=>{\n  batchUseMsgDelete(opts.selection).then(res=>{\n    if(res){\n      ElMessage.error('批量删除消息成功')\n      opts.selection = []\n      bus.emit('get-message')\n      getCount()\n      getData()\n    }\n  })\n  })\n}\n\nconst handleEditSelection = (row) => {\n  if(opts.selection.indexOf(row.id) === -1){\n    opts.selection.push(row.id)\n  }else{\n   delete opts.selection[opts.selection.indexOf(row.id)]\n  }\n}\n\nconst handleClick = (tab, event) => {\n  getData();\n};\n\nconst toCourse = (courseId) => {\n  router.push(\"/course/detail?id=\" + courseId);\n};\n\nconst handleCurrentChange = (val) => {\n  getData(val);\n  document.querySelector('#app').scrollTop = 150\n};\nconst batchAllReady = () => {\n  if(data.count < 1){\n    ElMessage.error('没有未读消息')\n    return false\n  }\n  batchUserMsgWatch().then(res=>{\n    if(res){\n      ElMessage.success('消息已全部标记为已读')\n      getData()\n      bus.emit('get-message')\n      getCount()\n    }\n  })\n}\nconst getData = (page = 1) => {\n  ctrl.loading = true\n  getMsgUsePage({\n    isRead: messageType.value === 'all' ? undefined : messageType.value === 'false' ? false : true,\n    pageCurrent: page,\n    pageSize: 10,\n  }).then((res) => {\n    ctrl.loading = false\n    if (res) {\n      data.list = res.list || [];\n      data.pages = res.totalPage;\n      data.current = res.pageCurrent;\n      data.totalCount = res.totalCount;\n    }\n  }).catch(()=>{\n    ctrl.loading = false\n  });\n};\n</script>\n\n<style lang=\"scss\">\n.page-account-class {\n  position: relative;\n  .el-tabs__header {\n    margin: 0;\n  }\n  .el-tabs__nav-wrap {\n    padding: 0 30px;\n  }\n  .el-tabs__nav {\n    padding: 10px 0;\n  }\n}\n</style>\n<style lang=\"scss\" scoped>\n.message_list{\n  padding:0 30px ;\n  .message_item{\n    padding-bottom: 26px;\n    padding-top: 30px;\n    border-bottom: 1px solid #EBEEF5;\n    cursor: pointer;\n    .icon-success.active{\n      color: #58B85C;\n    }\n    &.flex_edit{\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n    }\n  }\n  .message_msg{\n    font-style: normal;\n    font-weight: 400;\n    font-size: 16px;\n    color: #333333;\n    &.read{\n      color: #999999;\n    }\n  }\n  .message_time{\n    margin-top: 4px;\n    font-style: normal;\n    font-weight: 400;\n    font-size: 14px;\n    color: #999999;\n    opacity: 0.99;\n  }\n}\n.tabs_btn_list{\n  position: absolute;\n  z-index: 9;\n  top: 20px;\n  right: 30px;\n  display: flex;\n}\n.gray_color{\n  color: #999999;\n}\n.tabs_btn{\n  font-style: normal;\n  font-weight: 400;\n  font-size: 14px;\n  display: inline-block;\n  cursor: pointer;\n  &:hover{\n    color: #2256F6;\n  }\n  &+.tabs_btn{\n    margin-left: 20px;\n  }\n}\n.detail_box {\n  padding: 20px 30px;\n  .back_msg {\n    color: #3D7FFF;\n    cursor: pointer;\n  }\n  .msg_info_wrapper {\n    p {\n      text-align: center;\n      &:first-child {\n        width: 660px;\n        margin: auto;\n        font-size: 20px;\n        line-height: 28px;\n        margin-bottom: 18px;\n      }\n    }\n    .content {\n      margin-top: 24px;\n      padding: 24px 0;\n      border-top: 1px dashed #D9D9D9;\n      line-height: 28px;\n      font-size: 16px;\n    }\n  }\n}\n</style>\n"],"names":["useHead","title","useRouter","messageType","ref","ctrl","reactive","loading","edit","showDetail","data","tabsList","label","name","list","count","pages","current","totalCount","info","opts","selection","onMounted","async","getCount","useMsgCount","then","res","Number","cancelSelection","batchDelete","length","ElMessage","error","ElMessageBox","confirm","confirmButtonText","cancelButtonText","batchUseMsgDelete","bus","emit","getData","handleClick","tab","event","handleCurrentChange","val","document","querySelector","scrollTop","batchAllReady","batchUserMsgWatch","success","page","getMsgUsePage","isRead","value","pageCurrent","pageSize","totalPage","catch","id","useMsgView","row","indexOf","push"],"mappings":"4gBA8DAA,EAAA,CACAC,MAAA,SAGAC,IAEA,MAAAC,EAAAC,EAAA,OACAC,EAAAC,EAAA,CACAC,SAAA,EACAC,MAAA,EACAC,YAAA,IAEAC,EAAAJ,EAAA,CACAK,SAAA,CACA,CACAC,MAAA,OACAC,KAAA,OAEA,CACAD,MAAA,OACAC,KAAA,SAEA,CACAD,MAAA,OACAC,KAAA,SAGAC,KAAA,GACAC,MAAA,EACAC,MAAA,EACAC,QAAA,EACAC,WAAA,EACAC,KAAA,CAAA,IAEAC,EAAAd,EAAA,CACAe,UAAA,KAEAC,GAAAC,gBACAC,WAGA,MAaAA,EAAA,KACAC,IAAAC,MAAAC,IACAjB,EAAAK,MAAAa,OAAAD,EAAAjB,KAAA,GACA,EAEAmB,EAAA,KACAT,EAAAC,UAAA,GACAhB,EAAAG,MAAA,CAAA,EAGAsB,EAAA,KACA,GAAAV,EAAAC,UAAAU,OAAA,EAEA,OADAC,EAAAC,MAAA,YACA,EAEAC,EAAAC,QAAA,aAAA,OAAA,CACAC,kBAAA,KACAC,iBAAA,OACAX,MAAA,KACAY,EAAAlB,EAAAC,WAAAK,MAAAC,IACAA,IACAK,EAAAC,MAAA,YACAb,EAAAC,UAAA,GACAkB,EAAAC,KAAA,eACAhB,IACAiB,IACA,GACA,GACA,EAWAC,EAAA,CAAAC,EAAAC,UAQAC,EAAAC,IACAL,EAAAK,GACAC,SAAAC,cAAA,QAAAC,UAAA,GAAA,EAEAC,EAAA,KACA,GAAAxC,EAAAK,MAAA,EAEA,OADAiB,EAAAC,MAAA,WACA,EAEAkB,IAAAzB,MAAAC,IACAA,IACAK,EAAAoB,QAAA,cACAX,IACAF,EAAAC,KAAA,eACAhB,IACA,GACA,EAEAiB,EAAA,CAAAY,EAAA,KACAhD,EAAAE,SAAA,EACA+C,EAAA,CACAC,OAAA,QAAApD,EAAAqD,WAAA,EAAA,UAAArD,EAAAqD,MACAC,YAAAJ,EACAK,SAAA,KACAhC,MAAAC,IACAtB,EAAAE,SAAA,EACAoB,IACAjB,EAAAI,KAAAa,EAAAb,MAAA,GACAJ,EAAAM,MAAAW,EAAAgC,UACAjD,EAAAO,QAAAU,EAAA8B,YACA/C,EAAAQ,WAAAS,EAAAT,WACA,IACA0C,OAAA,KACAvD,EAAAE,SAAA,CAAA,GACA,k7BA9FAsD,OACAxD,EAAAE,SAAA,EACAG,EAAAS,KAAA,CAAA,EACAd,EAAAI,YAAA,OACAqD,EAAAD,GAAAnC,MAAAC,IACAA,IACAjB,EAAAS,KAAAQ,EACAoB,SAAAC,cAAA,QAAAC,UAAA,KAEAV,EAAAC,KAAA,eACAnC,EAAAE,SAAA,CAAA,IAVA,IAAAsD,0HA4CAE,UACA,IAAA3C,EAAAC,UAAA2C,QAAAD,EAAAF,IACAzC,EAAAC,UAAA4C,KAAAF,EAAAF,WAEAzC,EAAAC,UAAAD,EAAAC,UAAA2C,QAAAD,EAAAF,MAJA,IAAAE"}