You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
5.0 KiB

2 years ago
  1. <template>
  2. <div class="m_container">
  3. <div class="message_content" v-if="notifyMsgs.length>0" v-loading="load.list"
  4. element-loading-text="拼命加载中"
  5. element-loading-spinner="el-icon-loading"
  6. >
  7. <el-row>
  8. <el-button @click="filters.hadRead=''">全部</el-button><el-button @click="filters.hadRead='0'">未读消息</el-button><el-button @click="filters.hadRead='1'">已读信息</el-button><el-button @click="setAllHadRead" v-if="filters.hadRead!='1'">全部标记为已读</el-button>
  9. </el-row>
  10. <div class="message_content_box" v-for="(item, index) in notifyMsgs" :key="index" @click="goToPage(item)">
  11. <p class="date"> 发送者: <span style="font-size:14px;">{{item.sendUsername}}</span> &nbsp;&nbsp;发送时间 <span style="font-size:14px;">{{item.operTime}}</span> <el-tag :type="item.hadRead=='1'?'primary':'danger'">{{item.hadRead=='1'?'已读':'未读'}}</el-tag> </p>
  12. <span class="text">{{item.msg}}</span>
  13. <div class="line"></div>
  14. </div>
  15. <el-pagination
  16. @size-change="handleSizeChange"
  17. @current-change="handleCurrentChange"
  18. :current-page.sync="pageInfo.pageNum"
  19. :page-size="pageInfo.pageSize"
  20. layout="total, prev, pager, next"
  21. :total="pageInfo.total">
  22. </el-pagination>
  23. </div>
  24. <div class="message_content_box" v-else v-loading="load.list"
  25. element-loading-text="拼命加载中"
  26. element-loading-spinner="el-icon-loading"
  27. >
  28. <el-row>
  29. <el-button @click="filters.hadRead=''">全部</el-button><el-button @click="filters.hadRead='0'">未读消息</el-button><el-button @click="filters.hadRead='1'">已读信息</el-button><el-button @click="setAllHadRead" v-if="filters.hadRead!='1'">全部标记为已读</el-button>
  30. </el-row>
  31. <el-result icon="success" subTitle="暂时没有消息">
  32. </el-result>
  33. </div>
  34. </div>
  35. </template>
  36. <script>
  37. import { mapGetters } from 'vuex'
  38. export default {
  39. props:['msgClass'],
  40. computed: {
  41. ...mapGetters(['userInfo']),
  42. noticeMsg() {
  43. return this.$store.getters.noticeMsg
  44. },
  45. },
  46. data() {
  47. return {
  48. load:{list:false},
  49. notifyMsgs:[],
  50. filters:{
  51. hadRead:'',
  52. },
  53. pageInfo:{//分页数据
  54. total:0,//服务器端收到0时,会自动计算总记录数,如果上传>0的不自动计算。
  55. pageSize:10,//每页数据
  56. count:false,//是否需要重新计算总记录数
  57. pageNum:1,//当前页码、从1开始计算
  58. orderFields:['oper_time'],//排序列 如 ['sex','student_id'],必须为数据库字段
  59. orderDirs:['desc']//升序 asc,降序desc 如 性别 升序、学生编号降序 ['asc','desc']
  60. },
  61. }
  62. },
  63. watch:{
  64. 'filters.hadRead':function(){
  65. this.searchNoticeMsg();
  66. }
  67. },
  68. methods:{
  69. handleSizeChange(pageSize) {
  70. this.pageInfo.pageSize=pageSize;
  71. this.getNoticeMsg();
  72. },
  73. handleCurrentChange(pageNum) {
  74. this.pageInfo.pageNum = pageNum;
  75. this.getNoticeMsg();
  76. },
  77. searchNoticeMsg(){
  78. this.pageInfo.count=true;
  79. this.getNoticeMsg();
  80. },
  81. getNoticeMsg(){
  82. let params = {
  83. pageSize: this.pageInfo.pageSize,
  84. pageNum: this.pageInfo.pageNum,
  85. total: this.pageInfo.total,
  86. count:this.pageInfo.count
  87. };
  88. if(this.pageInfo.orderFields!=null && this.pageInfo.orderFields.length>0){
  89. let orderBys=[];
  90. for(var i=0;i<this.pageInfo.orderFields.length;i++){
  91. orderBys.push(this.pageInfo.orderFields[i]+" "+this.pageInfo.orderDirs[i])
  92. }
  93. params.orderBy= orderBys.join(",")
  94. }
  95. if(this.filters.hadRead){
  96. params.hadRead=this.filters.hadRead
  97. }
  98. params.toUserid=this.userInfo.userid
  99. this.load.list=true
  100. this.$mdp.listNotifyMsg(params).then(res=>{
  101. this.load.list=false
  102. this.notifyMsgs=res.data.data;
  103. this.pageInfo.total=res.data.total
  104. this.pageInfo.count=false;
  105. })
  106. },
  107. /**
  108. * objType:对象类型:项目-1/任务-2/产品-3/需求-4/bug-5/迭代-6/团队-7
  109. *
  110. */
  111. goToPage(item){
  112. if(item.hadRead!='1'){
  113. this.$mdp.editSomeFieldsNotifyMsg({ids:[item.id],hadRead:'1'}).then(res=>{
  114. item.hadRead="1"
  115. this.$store.dispatch("setNoticeMsg",this.notifyMsgs)
  116. })
  117. }
  118. if(item.url){
  119. this.$mdp.openWin(item.url)
  120. }
  121. },
  122. setAllHadRead(){
  123. var ids=this.notifyMsgs.filter(k=>k.hadRead!=='1').map(i=>i.id)
  124. if(ids.length<=0){
  125. return;
  126. }
  127. this.$mdp.editSomeFieldsNotifyMsg({ids:ids,hadRead:'1'}).then(res=>{
  128. var tips = res.data.tips
  129. this.searchNoticeMsg();
  130. this.$notify({position:'bottom-left',showClose:true,message:tips.msg,type:tips.isOk?'success':'error'})
  131. })
  132. }
  133. },
  134. mounted() {
  135. this.searchNoticeMsg();
  136. }
  137. }
  138. </script>
  139. <style lang="scss" scoped>
  140. @import '../common.scss';
  141. @import './index.scss';
  142. </style>