Browse Source

首页相关权限处理

master
xuhuajiao 9 months ago
parent
commit
c9bfd28013
  1. 3
      src/router/index.js
  2. 4
      src/views/archivesManage/archivesCheck/module/checkDetail.vue
  3. 19
      src/views/archivesManage/archivesSearch/index.vue
  4. 215
      src/views/archivesManage/lendManage/index.vue
  5. 6
      src/views/archivesManage/outInStorage/module/detailDialog.vue
  6. 27
      src/views/components/AccessDoor.vue
  7. 27
      src/views/components/SecurityDoor.vue
  8. 27
      src/views/components/WarehouseWarning.vue
  9. 53
      src/views/dashboard/PanelGroup.vue
  10. 57
      src/views/home.vue
  11. 2
      src/views/login.vue
  12. 5
      src/views/system/logManage/index.vue
  13. 466
      src/views/system/user/messageCenter/index.vue

3
src/router/index.js

@ -57,7 +57,8 @@ export const loadMenus = (next, to) => {
const rdata = JSON.parse(JSON.stringify(res))
const sidebarRoutes = filterAsyncRouter(sdata)
const rewriteRoutes = filterAsyncRouter(rdata, false, true)
rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
// 当前用户角色登录后,无上次缓存页面权限,即跳转到首页而不是404
rewriteRoutes.push({ path: '*', redirect: '/', hidden: true })
store.dispatch('GenerateRoutes', rewriteRoutes).then(() => { // 存储路由
router.addRoutes(rewriteRoutes) // 动态添加可访问路由表

4
src/views/archivesManage/archivesCheck/module/checkDetail.vue

@ -107,8 +107,8 @@
<el-table-column prop="storageNum" align="center" label="在库" min-width="60" />
<el-table-column prop="borrowNum" align="center" label="已借" min-width="60" />
<el-table-column prop="caseName" label="盒名称" :show-overflow-tooltip="true" align="center" min-width="190" />
<el-table-column prop="tid" label="TID" align="center" min-width="220" />
<el-table-column prop="barcode" label="条形码" align="center" min-width="120" />
<el-table-column prop="tid" label="TID" align="center" min-width="220" :show-overflow-tooltip="true" />
<el-table-column prop="barcode" label="条形码" align="center" min-width="140" :show-overflow-tooltip="true" />
<el-table-column label="存放位置" align="center" min-width="300">
<template slot-scope="scope">
<span v-if="!scope.row.folderLocationDetails">-</span>

19
src/views/archivesManage/archivesSearch/index.vue

@ -138,6 +138,7 @@ import { getCategoryTree } from '@/api/category/category'
import { querySeniorArchives } from '@/api/archivesManage/archivesList'
import { FetchIsExistBorrow, FetchAddArchivesWaitRegister } from '@/api/archivesManage/lendManage'
import CallExternal from '@/api/storeManage/deviceManage/device'
import { mapGetters } from 'vuex'
export default {
name: 'ArchivesSearch',
components: { ArchivesInfo },
@ -213,6 +214,11 @@ export default {
]
}
},
computed: {
...mapGetters([
'roles'
])
},
async created() {
await this.getDeviceListAll()
},
@ -348,10 +354,17 @@ export default {
return
}
if (this.$route.path.indexOf('dashboard') !== -1) {
this.$router.push('/archivesManage/archivesSearch')
localStorage.setItem('homeSearchWords', this.keywords)
localStorage.setItem('homeSearchSelect', JSON.stringify(this.select))
if (this.roles.includes('admin') || this.roles.includes('archivesSearch:list')) {
this.$router.push('/archivesManage/archivesSearch')
localStorage.setItem('homeSearchWords', this.keywords)
localStorage.setItem('homeSearchSelect', JSON.stringify(this.select))
// localStorage.setItem('homeSearchCheckbox', JSON.stringify([3, 4, 5]))
} else {
this.$message({
message: '当前账号没有权限',
type: 'warning'
})
}
} else {
this.dimSearch()
}

215
src/views/archivesManage/lendManage/index.vue

@ -1,105 +1,110 @@
<template>
<div class="app-container lend-container">
<!-- 借阅列表 -->
<!-- 借阅管理tab -->
<div class="tab-content">
<span class="right-top-line" />
<span class="left-bottom-line" />
<span class="right-bottom-line" />
<ul class="tab-nav">
<li :class="{ 'active-tab-nav': activeIndex == 0 }" @click="changeActiveTab(0)">待借档案<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 1 }" @click="changeActiveTab(1)">借出确认<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 2 }" @click="changeActiveTab(2)">归还确认<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 3 }" @click="changeActiveTab(3)">借还记录<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 4 }" @click="changeActiveTab(4)">借阅者管理<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 5 }" @click="changeActiveTab(5)">借阅流程管理<i /></li>
<!-- 最右侧装饰img -->
<span class="tab-right-img" />
</ul>
<component :is="comName" :ref="comName" @callBack="callBack" @getSelections="getSelections" />
</div>
<!-- 借阅档案list -->
<lendArchivesList v-if="activeIndex === 1 && archivesOrderNum" :archives-order-num="archivesOrderNum" />
</div>
</template>
<script>
import toLend from './toLend/index.vue'
import lendConfirm from './lendConfirm/index.vue'
import returnArchives from './returnArchives/index.vue'
import lendQuery from './lendQuery/index.vue'
import borrowerManage from './borrowerManage/index.vue'
import lendProcess from './lendProcess/index.vue'
import lendArchivesList from './components/lendArchivesList'
import { lendingCrud } from './mixins/lending'
export default {
name: 'BorrowManage',
components: {
toLend,
lendConfirm,
returnArchives,
lendQuery,
borrowerManage,
lendProcess,
lendArchivesList
},
mixins: [lendingCrud],
data() {
return {
activeIndex: 0,
archivesOrderNum: ''
}
},
computed: {
comName: function() {
if (this.activeIndex === 0) {
return 'toLend'
} else if (this.activeIndex === 1) {
return 'lendConfirm'
} else if (this.activeIndex === 2) {
return 'returnArchives'
} else if (this.activeIndex === 3) {
return 'lendQuery'
} else if (this.activeIndex === 4) {
return 'borrowerManage'
} else if (this.activeIndex === 5) {
return 'lendProcess'
}
return 'toLend'
}
},
methods: {
changeActiveTab(data) {
this.activeIndex = data
if (this.activeIndex === 1) {
this.archivesOrderNum = ''
}
},
//
callBack(val) {
this.activeIndex = val.index
},
getSelections(data) {
if (data) {
this.archivesOrderNum = data.orderNo
} else {
this.archivesOrderNum = ''
}
}
}
}
</script>
<style lang="scss" scoped>
.lend-container{
.tab-content{
position: relative;
margin-top: 61px;
border: 1px solid #113d72;
}
}
.tab-content .tab-nav{
margin-bottom: 0;
}
</style>
<template>
<div class="app-container lend-container">
<!-- 借阅列表 -->
<!-- 借阅管理tab -->
<div class="tab-content">
<span class="right-top-line" />
<span class="left-bottom-line" />
<span class="right-bottom-line" />
<ul class="tab-nav">
<li :class="{ 'active-tab-nav': activeIndex == 0 }" @click="changeActiveTab(0)">待借档案<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 1 }" @click="changeActiveTab(1)">借出确认<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 2 }" @click="changeActiveTab(2)">归还确认<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 3 }" @click="changeActiveTab(3)">借还记录<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 4 }" @click="changeActiveTab(4)">借阅者管理<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 5 }" @click="changeActiveTab(5)">借阅流程管理<i /></li>
<!-- 最右侧装饰img -->
<span class="tab-right-img" />
</ul>
<component :is="comName" :ref="comName" @callBack="callBack" @getSelections="getSelections" />
</div>
<!-- 借阅档案list -->
<lendArchivesList v-if="activeIndex === 1 && archivesOrderNum" :archives-order-num="archivesOrderNum" />
</div>
</template>
<script>
import toLend from './toLend/index.vue'
import lendConfirm from './lendConfirm/index.vue'
import returnArchives from './returnArchives/index.vue'
import lendQuery from './lendQuery/index.vue'
import borrowerManage from './borrowerManage/index.vue'
import lendProcess from './lendProcess/index.vue'
import lendArchivesList from './components/lendArchivesList'
import { lendingCrud } from './mixins/lending'
export default {
name: 'BorrowManage',
components: {
toLend,
lendConfirm,
returnArchives,
lendQuery,
borrowerManage,
lendProcess,
lendArchivesList
},
mixins: [lendingCrud],
data() {
return {
activeIndex: 0,
archivesOrderNum: ''
}
},
computed: {
comName: function() {
if (this.activeIndex === 0) {
return 'toLend'
} else if (this.activeIndex === 1) {
return 'lendConfirm'
} else if (this.activeIndex === 2) {
return 'returnArchives'
} else if (this.activeIndex === 3) {
return 'lendQuery'
} else if (this.activeIndex === 4) {
return 'borrowerManage'
} else if (this.activeIndex === 5) {
return 'lendProcess'
}
return 'toLend'
}
},
created() {
if (this.$route.params.locationIndex) {
this.activeIndex = this.$route.params.locationIndex
}
},
methods: {
changeActiveTab(data) {
this.activeIndex = data
if (this.activeIndex === 1) {
this.archivesOrderNum = ''
}
},
//
callBack(val) {
this.activeIndex = val.index
},
getSelections(data) {
if (data) {
this.archivesOrderNum = data.orderNo
} else {
this.archivesOrderNum = ''
}
}
}
}
</script>
<style lang="scss" scoped>
.lend-container{
.tab-content{
position: relative;
margin-top: 61px;
border: 1px solid #113d72;
}
}
.tab-content .tab-nav{
margin-bottom: 0;
}
</style>

6
src/views/archivesManage/outInStorage/module/detailDialog.vue

@ -37,13 +37,13 @@
</el-table-column>
<el-table-column prop="categoryName" align="center" label="门类名称" width="140" show-overflow-tooltip />
<el-table-column prop="fondsNo" align="center" label="全宗号" width="80" />
<el-table-column prop="archiveNo" align="center" label="档号" width="160" />
<el-table-column prop="archiveNo" align="center" label="档号" min-width="200" show-overflow-tooltip />
<el-table-column prop="archiveYear" align="center" label="归档年度" width="100" />
<el-table-column prop="maintitle" align="center" label="题名" width="140" show-overflow-tooltip />
<el-table-column prop="securityClass" align="center" label="保密程度" width="140" />
<el-table-column prop="department" align="center" label="部门" width="100" />
<el-table-column prop="caseName" align="center" label="盒名称" width="140" />
<el-table-column prop="folderLocationDetails" align="center" label="所在位置" width="300">
<el-table-column prop="caseName" align="center" label="盒名称" min-width="200" show-overflow-tooltip />
<el-table-column prop="folderLocationDetails" align="center" label="所在位置" width="300" show-overflow-tooltip>
<template slot-scope="scope">
<span v-if="!scope.row.folderLocationDetails">-</span>
<span v-else>

27
src/views/components/AccessDoor.vue

@ -2,12 +2,12 @@
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">
<h3 class="table-title" @click="toPage">
<p class="title-arrow" style="cursor: pointer;">
<svg-icon icon-class="menjin" class-name="warehouse-svg" />通道门记录
</p>
</h3>
<el-table ref="table" style="min-width: 100%;" :height="height" :data="tableData" class="warehose-el-table" stripe>
<el-table ref="table" style="min-width: 100%;" :height="height" :data="tableData" class="warehose-el-table" stripe @row-click="toPage">
<el-table-column prop="createTime" label="时间" align="center" width="100">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
@ -24,6 +24,7 @@
</template>
<script>
import { accessDoor } from '@/api/home/accessDoor/accessDoor'
import { mapGetters } from 'vuex'
export default {
name: 'AccessDoor',
props: {
@ -43,6 +44,11 @@ export default {
getDataTimer: null
}
},
computed: {
...mapGetters([
'roles'
])
},
watch: {
// `tableData`
tableData: function(newData, oldData) {
@ -57,6 +63,21 @@ export default {
this.scrollTimer = null
},
methods: {
toPage() {
if (this.roles.includes('admin') || this.roles.includes('logManage:list')) {
this.$router.push({
name: 'LogManage',
params: {
locationIndex: 3
}
})
} else {
this.$message({
message: '当前账号没有权限',
type: 'warning'
})
}
},
//
rowBgColor({ row, rowIndex }) {
if (rowIndex % 2 === 1) {

27
src/views/components/SecurityDoor.vue

@ -2,12 +2,12 @@
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">
<h3 class="table-title" @click="toPage">
<p class="title-arrow" style="cursor: pointer;">
<svg-icon icon-class="menjin" class-name="warehouse-svg" />门禁记录
</p>
</h3>
<el-table ref="table" style="min-width: 100%;" :height="height" :data="tableData" class="warehose-el-table" stripe>
<el-table ref="table" style="min-width: 100%;" :height="height" :data="tableData" class="warehose-el-table" stripe @row-click="toPage">
<el-table-column prop="hisTime" label="时间" align="center" width="160">
<template slot-scope="scope">
<div>{{ scope.row.hisTime | parseTime }}</div>
@ -29,6 +29,7 @@
</template>
<script>
import { securitydoor } from '@/api/home/securityDoor/securityDoor'
import { mapGetters } from 'vuex'
export default {
name: 'SecurityDoor',
props: {
@ -48,6 +49,11 @@ export default {
getDataTimer: null
}
},
computed: {
...mapGetters([
'roles'
])
},
watch: {
// `tableData`
tableData: function(newData, oldData) {
@ -62,6 +68,21 @@ export default {
this.scrollTimer = null
},
methods: {
toPage() {
if (this.roles.includes('admin') || this.roles.includes('logManage:list')) {
this.$router.push({
name: 'LogManage',
params: {
locationIndex: 4
}
})
} else {
this.$message({
message: '当前账号没有权限',
type: 'warning'
})
}
},
//
rowBgColor({ row, rowIndex }) {
if (rowIndex % 2 === 1) {

27
src/views/components/WarehouseWarning.vue

@ -2,13 +2,13 @@
<div class="warehouse-right container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class=" table-title">
<p class="title-arrow">
<h3 class=" table-title" @click="toPage">
<p class="title-arrow" style="cursor: pointer;">
<svg-icon icon-class="alerm" class-name="warehouse-svg" />报警记录
</p>
</h3>
<!--表格渲染-->
<el-table ref="table" style="min-width: 100%;" :width="width" :height="height" :data="tableData" class="warehose-el-table" :row-class-name="rowBgColor">
<el-table ref="table" style="min-width: 100%;" :width="width" :height="height" :data="tableData" class="warehose-el-table" :row-class-name="rowBgColor" @row-click="toPage">
<el-table-column prop="alarm_time" label="时间" align="center" min-width="60" />
<el-table-column prop="area_name" label="库房" align="center" :show-overflow-tooltip="true" min-width="30" />
<el-table-column prop="event_name" label="警情" align="center" :show-overflow-tooltip="true" min-width="85" />
@ -17,6 +17,7 @@
</template>
<script>
import alarmApi from '@/api/home/alarm'
import { mapGetters } from 'vuex'
export default {
name: 'WarehouseWarning',
props: {
@ -39,6 +40,11 @@ export default {
scrollTimer: null
}
},
computed: {
...mapGetters([
'roles'
])
},
watch: {
// `tableData`
tableData: function(newData, oldData) {
@ -53,6 +59,21 @@ export default {
this.scrollTimer = null
},
methods: {
toPage() {
if (this.roles.includes('admin') || this.roles.includes('logManage:list')) {
this.$router.push({
name: 'LogManage',
params: {
locationIndex: 2
}
})
} else {
this.$message({
message: '当前账号没有权限',
type: 'warning'
})
}
},
//
rowBgColor({ row, rowIndex }) {
if (rowIndex % 2 === 1) {

53
src/views/dashboard/PanelGroup.vue

@ -1,7 +1,7 @@
<template>
<el-row :gutter="20" class="panel-group" type="flex" justify="space-between">
<el-col class="card-panel-col">
<div class="card-panel danganzongliang" @click="handleSetLineChartData('newVisitis')">
<div class="card-panel danganzongliang" @click="handleSetLineChartData('archives')">
<div class="card-panel-icon-wrapper icon-people">
<svg-icon icon-class="danganzongliang" class-name="card-panel-icon" />
</div>
@ -14,7 +14,7 @@
</div>
</el-col>
<el-col class="card-panel-col">
<div class="card-panel danganhezongliang" @click="handleSetLineChartData('messages')">
<div class="card-panel danganhezongliang" @click="handleSetLineChartData('case')">
<div class="card-panel-icon-wrapper icon-message">
<svg-icon icon-class="danganhezongliang" class-name="card-panel-icon" />
</div>
@ -27,7 +27,7 @@
</div>
</el-col>
<el-col class="card-panel-col">
<div class="card-panel quanbushebei" @click="handleSetLineChartData('purchases')">
<div class="card-panel quanbushebei" @click="handleSetLineChartData('device')">
<div class="card-panel-icon-wrapper icon-money">
<svg-icon icon-class="quanbushebei" class-name="card-panel-icon" />
</div>
@ -41,7 +41,7 @@
</div>
</el-col>
<el-col class="card-panel-col">
<div class="card-panel zaixianshebei" @click="handleSetLineChartData('shoppings')">
<div class="card-panel zaixianshebei" @click="handleSetLineChartData('device')">
<div class="card-panel-icon-wrapper icon-shopping">
<svg-icon icon-class="zaixianshebei" class-name="card-panel-icon" />
</div>
@ -55,7 +55,7 @@
</div>
</el-col>
<el-col class="card-panel-col">
<div class="card-panel lixianshebei" @click="handleSetLineChartData('shoppings')">
<div class="card-panel lixianshebei" @click="handleSetLineChartData('device')">
<div class="card-panel-icon-wrapper icon-shopping">
<svg-icon icon-class="lixianshebei" class-name="card-panel-icon" />
</div>
@ -76,6 +76,7 @@ import CountTo from 'vue-count-to'
import { FetchGetArchivesNum, FetchGetCaseNum } from '@/api/archivesManage/statistics'
import { getDeviceList } from '@/api/storeManage/deviceManage/device'
import { getOnlineDevice } from '@/api/home/device'
import { mapGetters } from 'vuex'
export default {
components: {
@ -91,6 +92,11 @@ export default {
offlineDeviceNum: 0
}
},
computed: {
...mapGetters([
'roles'
])
},
mounted() {
this.handleArchivesNum()
this.handleCaseNum()
@ -98,7 +104,41 @@ export default {
},
methods: {
handleSetLineChartData(type) {
this.$emit('handleSetLineChartData', type)
// this.$emit('handleSetLineChartData', type)
if (type === 'archives') {
if (this.roles.includes('archivesList:list') || this.roles.includes('admin')) {
this.$router.push({
name: 'ArchivesList'
})
} else {
this.$message({
message: '当前账号没有权限',
type: 'warning'
})
}
} else if (type === 'case') {
if (this.roles.includes('caseManage:list') || this.roles.includes('admin')) {
this.$router.push({
name: 'caseManage'
})
} else {
this.$message({
message: '当前账号没有权限',
type: 'warning'
})
}
} else if (type === 'device') {
if (this.roles.includes('deviceManage:list') || this.roles.includes('admin')) {
this.$router.push({
name: 'DeviceManage'
})
} else {
this.$message({
message: '当前账号没有权限',
type: 'warning'
})
}
}
},
//
handleArchivesNum() {
@ -132,6 +172,7 @@ export default {
}
.card-panel {
cursor: pointer;
height: 100px;
// height: 108px;
// cursor: pointer;

57
src/views/home.vue

@ -88,7 +88,7 @@
</h3>
<div style="height: calc(100% - 40px);overflow-y: auto;overflow-x: hidden;">
<ul v-if="waitBorrowerData.length !== 0" class="todo-list">
<li v-for="(item,index) in waitBorrowerData" :key="index">
<li v-for="(item,index) in waitBorrowerData" :key="index" @click="handleToWaiting(item)">
<el-tooltip class="item" effect="dark" :content="item.title" :enterable="false" placement="top">
<p>{{ item.title }}</p>
</el-tooltip>
@ -171,6 +171,8 @@ import SearchAcrives from '@/views/archivesManage/archivesSearch/index'
import { statisticsCrud } from '@/views/system/archiveStatistics/mixins/statistics'
import { FetchWaitBorrower } from '@/api/archivesManage/lendManage'
import { mapGetters } from 'vuex'
export default {
name: 'Dashboard',
components: {
@ -190,6 +192,11 @@ export default {
isHomeSearch: false
}
},
computed: {
...mapGetters([
'roles'
])
},
created() {
this.getWaitBorrower()
},
@ -215,13 +222,49 @@ export default {
})
},
changeActiveTab(floorId, roomId) {
this.$router.push({
name: 'warehouse3D',
params: {
floorId: floorId,
roomId: roomId
if (this.roles.includes('admin') || this.roles.includes('warehouse3D')) {
this.$router.push({
name: 'warehouse3D',
params: {
floorId: floorId,
roomId: roomId
}
})
} else {
this.$message({
message: '当前账号没有权限',
type: 'warning'
})
}
},
handleToWaiting(item) {
if (this.roles.includes('admin') || this.roles.includes('lendManage:list')) {
// 0
// 1
// 2
// 3
let locationIndex = 0
if (item.title.includes('待借档案')) {
locationIndex = 0
} else if (item.title.includes('借出确认')) {
locationIndex = 1
} else if (item.title.includes('逾期警告')) {
locationIndex = 2
} else if (item.title.includes('即将到期')) {
locationIndex = 2
}
})
this.$router.push({
name: 'lendManage',
params: {
locationIndex: locationIndex
}
})
} else {
this.$message({
message: '当前账号没有权限',
type: 'warning'
})
}
}
}
}

2
src/views/login.vue

@ -192,7 +192,7 @@ export default {
}
this.$store
.dispatch('Login', user)
.then(() => {
.then((res) => {
this.loading = false
this.$router.push({ path: this.redirect || '/' })
})

5
src/views/system/logManage/index.vue

@ -61,6 +61,11 @@ export default {
return 'loginLog'
}
},
created() {
if (this.$route.params.locationIndex) {
this.activeIndex = this.$route.params.locationIndex
}
},
methods: {
changeActiveTab(data) {
this.activeIndex = data

466
src/views/system/user/messageCenter/index.vue

@ -1,233 +1,233 @@
<template>
<div>
<div class="head-container">
<el-button icon="el-icon-delete" :disabled="!(selections.length)" size="mini" @click="delVisible=true">删除</el-button>
<el-button class="iconfont icon-biaojiyidu-fanbai" :disabled="!(selections.length)" size="mini" @click="handleRead">标记已读</el-button>
<el-button class="iconfont icon-biaojiyidu-fanbai" size="mini" @click="handleAllRead">全部标记已读</el-button>
<date-range-picker v-model="query.createTime" class="date-item" />
<el-button icon="el-icon-search" size="mini" style="background:#3A99FD;margin-left: -10px;" @click="getTableData">搜索</el-button>
</div>
<el-table
ref="table"
v-loading="isLoading"
:data="tableData"
style="width: 100%;"
:row-class-name="cell"
height="calc(100vh - 362px)"
@row-click="clickRowHandler"
@selection-change="selectionChangeHandler"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" width="100" align="center" />
<el-table-column prop="noticeContent" :show-overflow-tooltip="true" label="通知内容" min-width="300" align="center" />
<el-table-column prop="noticeType" label="消息类型" align="center" min-width="150">
<template slot-scope="scope">
<span v-if="scope.row.noticeType===1">系统消息</span>
</template>
</el-table-column>
<el-table-column prop="pushUserName" label="推送人" align="center" min-width="150" />
<el-table-column prop="create_time" label="推送时间" align="center" min-width="180">
<template slot-scope="scope">
<div>{{ scope.row.create_time | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<el-pagination
:page-size.sync="page.size"
:total="page.total"
:current-page.sync="page.page"
style="margin-top: 8px;"
layout="total, prev, pager, next, sizes"
@size-change="sizeChangeHandler($event)"
@current-change="pageChangeHandler"
/>
<!-- 删除 -->
<el-dialog :visible.sync="delVisible" title="提示">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<p class="delMsg">确定删除所选消息吗</p>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleDelConfirm">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import DateRangePicker from '@/components/DateRangePicker'
import { getUserNotice, isread, userMsgDel } from '@/api/system/logs'
import CRUD, { presenter, header, crud } from '@crud/crud'
export default {
name: 'MessageCenter',
inject: ['reload'],
components: { DateRangePicker },
mixins: [presenter(), crud(), header()],
cruds() {
return CRUD({
url: 'api/users/notice',
sort: ['createTime,desc'],
optShow: {}
})
},
data() {
return {
tableData: [],
selections: [],
query: {
createTime: []
},
page: {
total: 0,
size: 10,
page: 1
},
isLoading: false,
delVisible: false
}
},
created() {
this.getTableData()
},
methods: {
getTableData() {
this.isLoading = true
getUserNotice(this.getParams()).then(res => {
this.page.total = res.totalElements
const table = res.content
table.forEach(item => {
item.pushUserName = item.noticeUsers[0].pushUserName
item.isRead = item.noticeUsers[0].isRead
})
this.tableData = table
this.isLoading = false
})
},
getParams() {
const params = {
page: this.page.page - 1,
size: this.page.size,
createTime: this.query.createTime,
sort: 'createTime,desc'
}
return params
},
getUserMsgId(list) {
const ids = []
list.forEach(item => {
item.noticeUsers.forEach(i => {
ids.push(i.id)
})
})
return ids
},
//
handleRead() {
isread(this.getUserMsgId(this.selections)).then(res => {
if (res) {
// this.getTableData()
this.reload()
}
})
},
//
async handleAllRead() {
const params = {
page: 0,
size: 10,
// createTime: [],
sort: 'createTime,desc'
}
const list = []
const allList = await this.getAllNoRead(params, list)
isread(this.getUserMsgId(allList)).then(res => {
if (res) {
this.reload()
// this.getTableData()
}
})
},
//
async getAllNoRead(params, list) {
const allList = await getUserNotice(params).then(res => {
list = list.concat(res.content)
if ((list.length) < res.totalElements) {
params.page++
return this.getAllNoRead(params, list)
} else {
return list
}
})
return allList
},
//
handleDelConfirm() {
userMsgDel(this.getUserMsgId(this.selections)).then(res => {
if (res) {
// this.getTableData()
this.delVisible = false
this.reload()
this.$message({
message: '删除成功',
type: 'success'
})
} else {
this.$message.error('删除失败')
}
})
},
clickRowHandler(row) {
// this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row) //
},
selectionChangeHandler(val) {
this.selections = val
},
cell({ row }) {
if (row.isRead) { //
return 'read-color'
}
},
//
sizeChangeHandler(e) {
this.loading = true
this.page.size = e
this.page.page = 1
this.getTableData()
this.loading = false
},
//
pageChangeHandler(e) {
this.loading = true
this.page.page = e
this.getTableData()
this.loading = false
}
}
}
</script>
<style lang="scss" scoped>
@import '~@/assets/styles/lend-manage.scss';
.head-container {
padding-top: 0;
.date-item{
margin: -1px 20px 0 12px;
}
}
.container-wrap{
margin-top: 0;
min-height: 0;
height: calc(100vh - 240px);
}
::v-deep .read-color td{
color: #999 !important;
}
.delMsg{
color: #fff;
font-size: 16px;
}
</style>
<template>
<div>
<div class="head-container">
<el-button icon="el-icon-delete" :disabled="!(selections.length)" size="mini" @click="delVisible=true">删除</el-button>
<el-button class="iconfont icon-biaojiyidu-fanbai" :disabled="!(selections.length)" size="mini" @click="handleRead">标记已读</el-button>
<el-button class="iconfont icon-biaojiyidu-fanbai" size="mini" @click="handleAllRead">全部标记已读</el-button>
<date-range-picker v-model="query.createTime" class="date-item" />
<el-button icon="el-icon-search" size="mini" style="background:#3A99FD;margin-left: -10px;" @click="getTableData">搜索</el-button>
</div>
<el-table
ref="table"
v-loading="isLoading"
:data="tableData"
style="width: 100%;"
:row-class-name="cell"
height="calc(100vh - 362px)"
@row-click="clickRowHandler"
@selection-change="selectionChangeHandler"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" width="100" align="center" />
<el-table-column prop="noticeContent" :show-overflow-tooltip="true" label="通知内容" min-width="300" align="center" />
<el-table-column prop="noticeType" label="消息类型" align="center" min-width="150">
<template slot-scope="scope">
<span v-if="scope.row.noticeType===1">系统消息</span>
</template>
</el-table-column>
<el-table-column prop="pushUserName" label="推送人" align="center" min-width="150" />
<el-table-column prop="create_time" label="推送时间" align="center" min-width="180">
<template slot-scope="scope">
<div>{{ scope.row.create_time | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<el-pagination
:page-size.sync="page.size"
:total="page.total"
:current-page.sync="page.page"
style="margin-top: 8px;"
layout="total, prev, pager, next, sizes"
@size-change="sizeChangeHandler($event)"
@current-change="pageChangeHandler"
/>
<!-- 删除 -->
<el-dialog :visible.sync="delVisible" title="提示">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<p class="delMsg">确定删除所选消息吗</p>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleDelConfirm">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import DateRangePicker from '@/components/DateRangePicker'
import { getUserNotice, isread, userMsgDel } from '@/api/system/logs'
import CRUD, { presenter, header, crud } from '@crud/crud'
export default {
name: 'MessageCenter',
inject: ['reload'],
components: { DateRangePicker },
mixins: [presenter(), crud(), header()],
cruds() {
return CRUD({
url: 'api/users/notice',
sort: ['createTime,desc'],
optShow: {}
})
},
data() {
return {
tableData: [],
selections: [],
query: {
createTime: []
},
page: {
total: 0,
size: 10,
page: 1
},
isLoading: false,
delVisible: false
}
},
created() {
this.getTableData()
},
methods: {
getTableData() {
this.isLoading = true
getUserNotice(this.getParams()).then(res => {
this.page.total = res.totalElements
const table = res.content
table.forEach(item => {
item.pushUserName = item.noticeUsers[0].pushUserName
item.isRead = item.noticeUsers[0].isRead
})
this.tableData = table
this.isLoading = false
})
},
getParams() {
const params = {
page: this.page.page - 1,
size: this.page.size,
createTime: this.query.createTime,
sort: 'createTime,desc'
}
return params
},
getUserMsgId(list) {
const ids = []
list.forEach(item => {
item.noticeUsers.forEach(i => {
ids.push(i.id)
})
})
return ids
},
//
handleRead() {
isread(this.getUserMsgId(this.selections)).then(res => {
if (res) {
// this.getTableData()
this.reload()
}
})
},
//
async handleAllRead() {
const params = {
page: 0,
size: 10,
// createTime: [],
sort: 'createTime,desc'
}
const list = []
const allList = await this.getAllNoRead(params, list)
isread(this.getUserMsgId(allList)).then(res => {
if (res) {
this.reload()
// this.getTableData()
}
})
},
//
async getAllNoRead(params, list) {
const allList = await getUserNotice(params).then(res => {
list = list.concat(res.content)
if ((list.length) < res.totalElements) {
params.page++
return this.getAllNoRead(params, list)
} else {
return list
}
})
return allList
},
//
handleDelConfirm() {
userMsgDel(this.getUserMsgId(this.selections)).then(res => {
if (res) {
// this.getTableData()
this.delVisible = false
this.reload()
this.$message({
message: '删除成功',
type: 'success'
})
} else {
this.$message.error('删除失败')
}
})
},
clickRowHandler(row) {
// this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row) //
},
selectionChangeHandler(val) {
this.selections = val
},
cell({ row }) {
if (row.isRead) { //
return 'read-color'
}
},
//
sizeChangeHandler(e) {
this.loading = true
this.page.size = e
this.page.page = 1
this.getTableData()
this.loading = false
},
//
pageChangeHandler(e) {
this.loading = true
this.page.page = e
this.getTableData()
this.loading = false
}
}
}
</script>
<style lang="scss" scoped>
@import '~@/assets/styles/lend-manage.scss';
.head-container {
padding-top: 0;
.date-item{
margin: -1px 20px 0 12px;
}
}
.container-wrap{
margin-top: 0;
min-height: 0;
height: calc(100vh - 240px);
}
::v-deep .read-color td{
color: #999 !important;
}
.delMsg{
color: #fff;
font-size: 16px;
}
</style>
Loading…
Cancel
Save