Browse Source

修改消息详情页面,修复已知bug

凉纪 1 year ago
parent
commit
f33514120e

+ 3 - 2
src/router/index.js

@@ -49,11 +49,12 @@ router.beforeEach((to, from, next) => {
   sessionStorage.setItem('ROUTER',JSON.stringify(object));
   console.log('从' + from.path + '跳向' + to.path)
   //如果当前是工作台页面返回的时候判断当前是否是A标签跳转是进行重定向到works
-  
   if (to.path === '/login' || to.path === '/tokenlogin') return next()
-
   let token = sessionStorage.getItem('access_token')
   if (!token) return next('/login')
+  if (document.querySelector('#water')) {
+    document.querySelector('#water').style.display = 'block'
+  }
   next()
 })
 

+ 8 - 2
src/router/router.config.js

@@ -120,8 +120,14 @@ export let routers = [
       {
         path: '/message',
         name: 'message',
-        component: () => import('@/views/menu/message/index'),
-        meta: { title: '消息中心', keepAlive: false ,deep:0.5 }
+        component: () => import('@/views/home/message/index'),
+        meta: { title: '消息中心', keepAlive: true,deep:0.5}
+      },
+      {
+        path: '/msgDetail',
+        name: 'msgDetail',
+        component: () => import('@/views/home/message/detail.vue'),
+        meta: { title: '消息详情', keepAlive: false,deep:0.5}
       },
       {
         path: '/workTime',

+ 0 - 0
src/views/menu/message/api.js → src/views/home/message/api.js


+ 206 - 0
src/views/home/message/detail.vue

@@ -0,0 +1,206 @@
+<template>
+<div class="message">
+  <!-- 消息详情 -->
+  <div class="message-detail">
+    <van-nav-bar
+      title="消息详情"
+      left-arrow
+      @click-left="onClickLeft"
+    />
+    <div class="detail-box" v-if="selected">
+      <div class="msg-title">
+        <p>{{selected.title}}</p>
+        <p class="cell-time">{{selected.publishTime}}</p>
+      </div>
+      <div class="message-content">
+        <div class="text-content">
+          <p>{{selected.content}}</p>
+          <div v-if="selected.fileList" class="file-box" >
+            附件:
+            <div v-for="(v,i) in selected.fileList">
+              <van-icon color="#1989fa" name="guide-o" />
+              <span style="color: #1989fa;" @click="preview(v)"  :key="v.name">{{v.name}}</span>
+            </div>
+          </div>
+        </div>
+
+      </div>
+    </div>
+  </div>
+
+</div>
+</template>
+
+<script>
+import {msgList, dataList, setRead, msgRead} from './api'
+import {mapGetters} from "vuex"
+
+export default {
+  name: 'msgDetail',
+  data() {
+    return {
+      show:false,
+      selected:null,
+      dataList: [],
+      query:{
+        type:1,
+        pageNum:1,
+        pageSize:20,
+      },
+      pullup:true,
+      message:null,
+      total:0,
+    };
+  },
+  computed:{
+    ...mapGetters(['orgId','id','roleList'])
+  },
+  mounted(){
+    console.log(this.$route,'this.$route')
+    this.selected = this.$route.params;
+  },
+  methods:{
+    preview(file){
+      this.openFilePreview(file);
+    },
+    onClickLeft(){
+      //this.show = false;
+      this.$store.dispatch('redDot');
+      this.$router.go(-1);
+    },
+    clickItem(v,i){
+      let queryMethod,data;
+      if(this.query.type == 1){
+        queryMethod = setRead;
+        data = {
+          announcementNotificationId:v.id,
+          orgId:this.orgId,
+          userId:this.id,
+        }
+      }else {
+        queryMethod = msgRead;
+        data = v.id
+      }
+      queryMethod(data).then(res=>{
+        this.dataList.forEach(item=>{
+          if(item.id === v.id){
+            item.isRead = true;
+          }
+        })
+      })
+      this.selected = v;
+      this.show = true;
+    },
+    refreshData(){
+      this.pullup = true;
+      this.query.pageNum = 1;
+      this.total = 0;
+      this.dataList = [];
+      this.getDataList();
+    },
+    getDataList(){
+      if( this.dataList.length !== 0 && this.dataList.length >= this.total) {
+        this.pullup = false;
+        this.$toast('已加载完毕');
+        return;
+      }
+      let data = {};
+      if(this.query.type == 1){
+        data = {
+          ...this.query,
+          userId:this.id,
+          orgId:this.orgId,
+          tagRoleIds:this.roleList.map(v=>{return v.roleId}),
+        }
+        msgList(data).then(res=>{
+          if(res.total === '0'){
+            this.pullup = false;
+            this.$toast('已加载完毕');
+            return
+          }
+          this.total = res.total;
+          if(this.dataList.length < res.total) {
+            this.dataList = [...this.dataList,...res.rows] ;
+            this.pullup = true;
+            this.query.pageNum++;
+            this.$refs.Scroll.refresh();
+          }
+        })
+        return;
+      }
+      data = {
+        ...this.query,
+        userId:this.id,
+      }
+      dataList(data).then(res=>{
+        if(res.total === '0'){
+          this.pullup = false;
+          this.$toast('已加载完毕');
+          return
+        }
+        this.total = res.total;
+        if(this.dataList.length < res.total) {
+          this.dataList = [...this.dataList,...res.rows] ;
+          this.pullup = true;
+          this.query.pageNum++;
+          this.$refs.Scroll.refresh();
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.message{
+
+}
+.message-detail{
+  height: calc(100vh - 102px);
+}
+.detail-box{
+  height: calc(100% - 90px);
+  overflow: auto;
+  background-color: #fff;
+}
+.msg-title{
+  display: flex;
+  flex-direction: column;
+  box-sizing: border-box;
+  width: 100%;
+  padding: 2.666667vw 4.266667vw;
+  overflow: hidden;
+  color: #323233;
+  font-size: 3.733333vw;
+  line-height: 6.4vw;
+  border-bottom: 1px solid #f5f5f5;
+}
+.message-content{
+  width: 100%;
+  padding:20px 30px 20px 30px;
+  height: 100%;
+  overflow: auto;
+  .text-content{
+    width: 100%;
+    min-height: 40px;
+    overflow: auto;
+    >p{
+      text-indent: 2em;
+      word-break: break-word;
+      white-space: pre-wrap;
+      text-align: justify;
+      width: 100%;
+      color: #777;
+    }
+  }
+  .file-box{
+    width: 100%;
+    min-height: 40px;
+    padding: 20px 0;
+    >div{
+      line-height: 32px;
+      padding-left: 20px;
+      margin: 10px 0;
+    }
+  }
+}
+</style>

+ 15 - 2
src/views/menu/message/index.vue → src/views/home/message/index.vue

@@ -30,6 +30,8 @@
     </div>
   </div>
 
+
+  <!-- 已弃用 -->
   <!-- 消息详情 -->
   <div v-if="show" class="message-detail">
     <van-nav-bar
@@ -62,11 +64,12 @@
 </template>
 
 <script>
-import Scroll from '@/components/scroll/scroll'
+import Scroll from '@/components/scroll/scroll.vue'
 import {msgList, dataList, setRead, msgRead} from './api'
 import {mapGetters} from "vuex"
 
 export default {
+  name: 'message',
   components: {
     Scroll,
   },
@@ -91,6 +94,11 @@ export default {
   mounted(){
     this.getDataList();
   },
+  beforeRouteEnter(to,from,next){
+    next(vm=>{
+      vm.$refs.Scroll.refresh();
+    })
+  },
   methods:{
     preview(file){
       this.openFilePreview(file);
@@ -113,6 +121,7 @@ export default {
         data = v.id
       }
       queryMethod(data).then(res=>{
+        //this.$store.dispatch('redDot');
         this.dataList.forEach(item=>{
           if(item.id === v.id){
             item.isRead = true;
@@ -120,7 +129,11 @@ export default {
         })
       })
       this.selected = v;
-      this.show = true;
+      this.$router.push({
+        name:'msgDetail',
+        path:'/msgDetail',
+        params:v
+      })
     },
     refreshData(){
       this.pullup = true;

+ 0 - 2
src/views/menu/safetyBook/index.vue

@@ -38,8 +38,6 @@ import OrgTree from '@/components/orgTree'
 import Scroll from '@/components/scroll/scroll'
 import Card from '@/components/card'
 import {dataList} from './api'
-import {formatDate} from "@/filters/filter";
-import {msgList} from "@/views/menu/message/api";
 import dayjs from "dayjs"
 export default {
   name: "safetyBook",