Pārlūkot izejas kodu

消息通知增加项目名称

yangjunjing 5 gadi atpakaļ
vecāks
revīzija
fa3dea009c

+ 15 - 3
src/framework/components/messagesever/index.vue

@@ -25,7 +25,9 @@
                     <i :class="iconClassMap[item.Type]?iconClassMap[item.Type]:'msg-icon el-icon-info info-color'"></i>
                     <p><span>{{`【${moduleMap[item.Module]?moduleMap[item.Module]:item.Module}】 `}}</span>{{item.Title?item.Title:""}}</p>
                   </div>
-                  <div class="noticeItem_time">{{item.CreateTime}}
+                  <div class="noticeItem_time">
+                    <span class="proname">{{item.Project[0].ProjName}}</span>
+                    {{item.CreateTime}}
                     <el-link v-for="(btn, index) in item.Content.ButtonList?item.Content.ButtonList:[]"
                       style="float:right;font-size:12px;margin-left:5px;" type="primary" :key="index"
                       :href="`/image-service/common/file_get?systemId=revit&key=${btn.Url}`" :download="btn.FileName?btn.FileName:''">
@@ -90,7 +92,6 @@ export default {
         "Warning": "msg-icon el-icon-warning warning-color",
         "Info": "msg-icon el-icon-info info-color",
       },
-      showTools: false
     }
   },
   created() {
@@ -102,6 +103,9 @@ export default {
     Bus.$on('messageListUpdate', message => {
       this.getMessageList()
     })
+    Bus.$on('getUnreadCountUpdate', message => {
+      this.getUnreadCount()
+    })
   },
   computed: {
     ...mapGetters('layout', ['userInfo', 'projectId', 'projects', 'userId'])
@@ -204,7 +208,7 @@ export default {
     },
     allDetails() {
       this.noticeListShow = false;
-      this.$router.push({ path: "/message/allDetails" });
+      this.$router.push({ path: "/allDetails" });
     }
   }
 }
@@ -335,6 +339,14 @@ export default {
           color: rgba(10, 18, 32, 0.46);
           margin-top: 4px;
           padding-left: 18px;
+          .proname{
+            float: left;
+            display: block;
+            width: 80px;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+          }
         }
       }
     }

+ 133 - 123
src/framework/components/messagesever/msgAllDetails.vue

@@ -1,136 +1,146 @@
   <template>
-    <div class="box">
-      <div class="condition">
-        <div class="main" :style="tableData && tableData.length?'height: calc(100% - 50px);':'height: calc(100% - 46px);'">
-          <el-table ref="multipleTable" :data="tableData" v-loading='loading' stripe height="100%" :header-cell-style="headerStyle"
-            @expand-change="changeMessageState">
-            <el-table-column type="selection" width="55"></el-table-column>
-            <el-table-column width="25">
-              <template slot-scope="scope">
-                <el-badge class="item" type="warning" is-dot v-if="!scope.row.Read"></el-badge>
-              </template>
-            </el-table-column>
-            <el-table-column prop="Title" label="标题内容" width="600"></el-table-column>
-            <el-table-column label="模块" width="200">
-              <template slot-scope="scope">
-                {{ moduleMap[scope.row.Module] }}
-              </template>
-            </el-table-column>
-            <el-table-column prop="CreateTime" label="消息时间">
-            </el-table-column>
-            <el-table-column label="消息类型">
-              <template slot-scope="scope">
-                <div>
-                  <span>{{ scope.row.Type }}</span>
-                  <i :class="iconClassMap[scope.row.Type]?iconClassMap[scope.row.Type]:'msg-icon el-icon-info info-color'"></i>
-                </div>
-              </template>
-            </el-table-column>
-            <el-table-column type="expand">
-              <template slot-scope="scope">
-                <p>{{ scope.row.Content.Message }}</p>
-                <el-link is-underline="false" v-for="(btn, index) in scope.row.Content.ButtonList" style="float:left;font-size:12px;color:white;width:"
-                  :key="index" :href="`/image-service/common/file_get?systemId=revit&key=${btn.Url}`" :download="btn.FileName?btn.FileName:''">
-                  {{btn.Name}}
-                </el-link>
-              </template>
-            </el-table-column>
-            <template slot="empty">
-              <div style="height: 60%;transform: translateY(50%);">
-                <i class="icon-wushuju iconfont"></i>
-                数据暂无
+  <div class="box">
+    <div class="condition">
+      <div class="main" :style="tableData && tableData.length?'height: calc(100% - 50px);':'height: calc(100% - 46px);'">
+        <el-table ref="multipleTable" :data="tableData" v-loading='loading' stripe height="100%" :header-cell-style="headerStyle"
+          @expand-change="changeMessageState">
+          <el-table-column type="selection" width="55"></el-table-column>
+          <el-table-column width="25">
+            <template slot-scope="scope">
+              <el-badge class="item" type="warning" is-dot v-if="!scope.row.Read"></el-badge>
+            </template>
+          </el-table-column>
+          <el-table-column prop="Title" label="标题内容" width="600"></el-table-column>
+          <el-table-column label="模块" width="200">
+            <template slot-scope="scope">
+              {{ moduleMap[scope.row.Module] }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="CreateTime" label="消息时间">
+          </el-table-column>
+          <el-table-column label="消息类型">
+            <template slot-scope="scope">
+              <div>
+                <i :class="iconClassMap[scope.row.Type]?iconClassMap[scope.row.Type]:'msg-icon el-icon-info info-color'" style="font-size:14px;"></i>
+                <span>{{ typeMap[scope.row.Type] }}</span>
               </div>
             </template>
-          </el-table>
-        </div>
-        <el-pagination class="right" v-show="tableData && tableData.length" @size-change="handleSizeChange" @current-change="handleCurrentChange"
-          :current-page="page.pageNumber" :page-sizes="page.pageSizes" :page-size="page.pageSize" layout="total, sizes, prev, pager, next, jumper"
-          :total="page.total">
-        </el-pagination>
+          </el-table-column>
+          <el-table-column type="expand">
+            <template slot-scope="scope">
+              <p>{{ scope.row.Content.Message }}</p>
+              <el-link v-for="(btn, index) in scope.row.Content.ButtonList" style="float:left;font-size:12px;color:white;width:"
+                :key="index" :href="`/image-service/common/file_get?systemId=revit&key=${btn.Url}`" :download="btn.FileName?btn.FileName:''">
+                {{btn.Name}}
+              </el-link>
+            </template>
+          </el-table-column>
+          <template slot="empty">
+            <div style="height: 60%;transform: translateY(50%);">
+              <i class="icon-wushuju iconfont"></i>
+              数据暂无
+            </div>
+          </template>
+        </el-table>
       </div>
+      <el-pagination class="right" v-show="tableData && tableData.length" @size-change="handleSizeChange" @current-change="handleCurrentChange"
+        :current-page="page.pageNumber" :page-sizes="page.pageSizes" :page-size="page.pageSize" layout="total, sizes, prev, pager, next, jumper"
+        :total="page.total">
+      </el-pagination>
     </div>
-  </template>
+  </div>
+</template>
 
   <script>
-  import { mapGetters } from 'vuex'
-  import { messgeCount, messgeQuery, messgeUpdateState, messgeUpdate } from '@/api/msgsever'
-  import Bus from '@/utils/bus.js'
+import { mapGetters } from 'vuex'
+import { messgeQuery, messgeUpdate } from '@/api/msgsever'
+import Bus from '@/utils/bus.js'
 
-  export default {
-    data() {
-      return {
-        tableData: [],
-        loading: false,
-        page: {
-          pageSize: 50,
-          pageSizes: [10, 20, 50, 100],
-          pageNumber: 1,
-          total: 0
-        },
-        headerStyle: {
-          backgroundColor: '#e1e4e5',
-          color: '#2b2b2b',
-          lineHeight: '30px'
-        }, // 列表样式
-        moduleMap: {//消息模块映射
-          "Model": "模型文件管理"
-        },
-        iconClassMap: { //消息类型图标映射
-          "Success": "msg-icon el-icon-success success-color",
-          "Error": "msg-icon el-icon-error error-color",
-          "Warning": "msg-icon el-icon-warning warning-color",
-          "Info": "msg-icon el-icon-info info-color",
-        }
+export default {
+  data() {
+    return {
+      tableData: [],
+      loading: false,
+      page: {
+        pageSize: 50,
+        pageSizes: [10, 20, 50, 100],
+        pageNumber: 1,
+        total: 0
+      },
+      headerStyle: {// 列表样式
+        backgroundColor: '#e1e4e5',
+        color: '#2b2b2b',
+        lineHeight: '30px'
+      }, 
+      moduleMap: {//消息模块映射
+        "Model": "模型文件管理"
+      },
+      iconClassMap: { //消息类型图标映射
+        "Success": "msg-icon el-icon-success success-color",
+        "Error": "msg-icon el-icon-error error-color",
+        "Warning": "msg-icon el-icon-warning warning-color",
+        "Info": "msg-icon el-icon-info info-color",
+      },
+      typeMap: { //消息类型文字映射
+        "Success": "成功",
+        "Error": "错误",
+        "Warning": "警告",
+        "Info": "提醒",
+      }
+    }
+  },
+  computed: {
+    ...mapGetters('layout', ['userId'])
+  },
+  mounted() {
+    this.getTableData();
+  },
+  methods: {
+    // 获取列表数据
+    getTableData() {
+      let params = {
+        Cascade: [
+          {
+            Name: "project"
+          }
+        ],
+        Filters: `UserId='${this.userId}'`,
+        Orders: "CreateTime desc, Id asc",
+        PageNumber: this.page.pageNumber,
+        PageSize: this.page.pageSize
       }
+      this.loading = true;
+      messgeQuery(params, res => {
+        this.tableData = res.Content;
+        this.page.total = res.Total;
+        this.loading = false;
+      })
     },
-    computed: {
-      ...mapGetters('layout', ['userInfo', 'projects', 'userId'])
+    // 切换每页显示数量
+    handleSizeChange(val) {
+      this.page.pageSize = val;
+      this.getTableData();
     },
-    mounted() {
-      this.getTableData()
+    // 切换页码
+    handleCurrentChange(val) {
+      this.page.pageNumber = val;
+      this.getTableData();
     },
-    methods: {
-      getTableData() {
-        let params = this.formatFilter();
-        this.loading = true;
-        messgeQuery(params, res => {
-          this.tableData = res.Content.map(item => { return item })
-          this.page.total = res.Content.length;
-        })
-        this.loading = false;
-      },
-      formatFilter() {
-        let params = {
-          Cascade: [
-            {
-              Name: "project"
-            }
-          ],
-          Filters: `UserId='${this.userId}'`,
-          Orders: "CreateTime desc, Id asc",
-          pageNumber: this.page.pageNumber,
-          pageSize: this.page.pageSize
-        }
-        return params;
-      },
-      handleSizeChange(val) {
-        this.page.pageSize = val;
-        this.getTableData();
-      },
-      handleCurrentChange(val) {
-        this.page.pageNumber = val;
-        this.getTableData();
-      },
-      changeMessageState(val) {
-        val.Read = true;
-        let params = {
-          Content: [...val],
-          Projection: ["Read"]
-        };
-        messgeUpdate(params);// 展开更新为已读状态
+    // 更新消息状态:已读、未读
+    changeMessageState(val) {
+      val.Read = true;
+      let params = {
+        Content: [{
+          Id: val.Id,
+          Read: true
+        }]
       }
+      messgeUpdate(params, res => { 
+        Bus.$emit('getUnreadCountUpdate')
+      });// 展开更新为已读状态,未读数量同步变更
     }
-  };
+  }
+};
   </script>
 
 <style scoped lang='less'>
@@ -144,6 +154,9 @@
     background: #fff;
     .main {
       margin-top: 10px;
+      a{
+        text-decoration: none;
+      }
     }
   }
 }
@@ -156,14 +169,11 @@
   }
 }
 .el-link {
-  margin: 40px 0 0 40px;
+  margin: 20px 0 0 40px;
   background: #409eff;
   border-radius: 3px;
   padding: 3px 15px;
 }
-</style>
-
-<style>
 .demo-table-expand {
   font-size: 0;
 }

+ 14 - 10
src/framework/layout/layout-store.js

@@ -63,19 +63,19 @@ export default {
             storage.set(KEY_MENU_SELECTED, val)
         },
         setprojectId: (state, val) => {
-            let cacheInfo = JSON.parse(localStorage.getItem('_sagacloud_admin_store_cacheInfo'))?JSON.parse(localStorage.getItem('_sagacloud_admin_store_cacheInfo')):{}
+            let cacheInfo = JSON.parse(localStorage.getItem('_sagacloud_admin_store_cacheInfo')) ? JSON.parse(localStorage.getItem('_sagacloud_admin_store_cacheInfo')) : {}
             state.projectId = val
             localStorage.setItem('projectId', val)
-            if(cacheInfo[state.userInfo.userName]){
+            if (cacheInfo[state.userInfo.userName]) {
                 cacheInfo[state.userInfo.userName].projectId = val
                 localStorage.setItem('_sagacloud_admin_store_cacheInfo', JSON.stringify(cacheInfo))
             } else {
-                cacheInfo[state.userInfo.userName] = {projectId: val}
+                cacheInfo[state.userInfo.userName] = { projectId: val }
                 localStorage.setItem('_sagacloud_admin_store_cacheInfo', JSON.stringify(cacheInfo))
             }
             storage.set(KEY_PROJECT_SELECTED, val)
-            state.projects.map((item) =>{
-                if(item.id == val) {
+            state.projects.map((item) => {
+                if (item.id == val) {
                     state.secret = item.pwd
                 }
             })
@@ -98,21 +98,21 @@ export default {
                         }
                         state.projects = []
                         if (resp.Projects) {
-                            if(resp.Projects[0] && resp.Projects[0].ProjId) {
+                            if (resp.Projects[0] && resp.Projects[0].ProjId) {
                                 state.projectId = resp.Projects[0].ProjId
-                                state.secret = resp.Projects[0].Secret?resp.Projects[0].Secret:""
+                                state.secret = resp.Projects[0].Secret ? resp.Projects[0].Secret : ""
                             }
                             resp.Projects.forEach(proj =>
                                 state.projects.push({
                                     id: proj.ProjId,
                                     name: proj.ProjLocalName,
-                                    pwd: proj.Secret?proj.Secret:""
+                                    pwd: proj.Secret ? proj.Secret : ""
                                 })
                             )
                         }
                     } else {
                         state.userInfo = null
-                       
+
                     }
                     resolve(resp)
                 })
@@ -120,7 +120,11 @@ export default {
         },
         setBreadcrumb: {
             root: true,
-            handler({ state }, val) {
+            handler({ state, commit }, val) {
+                let label = val[0].label;
+                if (label === "消息中心") {
+                    commit("setSidebarSelected", "message"); // 当进入消息中心页面的时候不选中导航栏
+                }
                 state.breadcrumb = []
                 state.breadcrumb = val
                 storage.set(KEY_PAGE_BRANDCRUMB, val)

+ 2 - 7
src/router/system.js

@@ -89,15 +89,10 @@ export default [
     //{ path: '/login', name: 'Login', component: Login },
     { path: '/auth', name: 'auth', component: auth },
     { path: '/noUser', name: 'noUser', component: noUser },
-    // {
-    //     path: '/msgAllDetails',
-    //     name: 'LayoutMain',
-    //     component: MsgAllDetails,
-    // },
     // 业务空间数据导入工具
     {
-        path: '/message',
-        name: 'LayoutMain',
+        path: '/',
+        name: '',
         component: LayoutMain,
         children: [
             { path: 'allDetails', name: "allDetails", component: MsgAllDetails, meta: { keepAlive: false, breadcrumbs: [{ label: '消息中心' }] } }