Browse Source

0624需求修改

master
xuhuajiao 8 months ago
parent
commit
fc6dd8bb94
  1. 15
      src/api/storeManage/taskManage/index.js
  2. 164
      src/api/system/user.js
  3. 683
      src/layout/components/Navbar.vue
  4. 68
      src/views/storeManage/taskManage/index.vue
  5. 40
      src/views/storeManage/taskManage/module/detail.vue
  6. 95
      src/views/system/user/messageCenter/index.vue

15
src/api/storeManage/taskManage/index.js

@ -10,8 +10,8 @@ export function add(data) {
export function del(ids) {
return request({
url: 'api/roles',
method: 'delete',
url: 'api/device/deleteTimedTasks',
method: 'post',
data: ids
})
}
@ -33,4 +33,13 @@ export function FetchStatus(data) {
})
}
export default { add, edit, del, FetchStatus }
// 计划任务日志
export function FetchInitTimedTasksLog(parameter) {
return request({
url: 'api/device/initTimedTasksLog',
method: 'get',
params: parameter
})
}
export default { add, edit, del, FetchStatus, FetchInitTimedTasksLog }

164
src/api/system/user.js

@ -1,73 +1,91 @@
import request from '@/utils/request'
import { encrypt } from '@/utils/rsaEncrypt'
import { getToken } from '@/utils/auth'
export function add(data) {
return request({
url: 'api/users',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/users',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/users',
method: 'put',
data
})
}
export function editUser(data) {
return request({
url: 'api/users/center',
method: 'put',
data
})
}
export function updatePass(user) {
const data = {
oldPass: encrypt(user.oldPass),
newPass: encrypt(user.newPass)
}
return request({
url: 'api/users/updatePass/',
method: 'post',
data
})
}
export function updateEmail(form) {
const data = {
password: encrypt(form.pass),
email: form.email
}
return request({
url: 'api/users/updateEmail/' + form.code,
method: 'post',
data
})
}
export function resetpassword(data) {
return request({
url: 'api/users/resetpassword',
method: 'post',
headers: {
Authorization: getToken()
},
data
})
}
export default { add, edit, del, resetpassword }
import request from '@/utils/request'
import { encrypt } from '@/utils/rsaEncrypt'
import { getToken } from '@/utils/auth'
export function add(data) {
return request({
url: 'api/users',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/users',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/users',
method: 'put',
data
})
}
export function editUser(data) {
return request({
url: 'api/users/center',
method: 'put',
data
})
}
export function updatePass(user) {
const data = {
oldPass: encrypt(user.oldPass),
newPass: encrypt(user.newPass)
}
return request({
url: 'api/users/updatePass/',
method: 'post',
data
})
}
export function updateEmail(form) {
const data = {
password: encrypt(form.pass),
email: form.email
}
return request({
url: 'api/users/updateEmail/' + form.code,
method: 'post',
data
})
}
export function resetpassword(data) {
return request({
url: 'api/users/resetpassword',
method: 'post',
headers: {
Authorization: getToken()
},
data
})
}
// 我得消息
export function FetchMyNotice(params) {
return request({
url: 'api/users/myNotice',
method: 'get',
params
})
}
// 我得消息全部标记已读
export function FetchMyReadAll(data) {
return request({
url: 'api/users/myReadAll',
method: 'put',
data
})
}
export default { add, edit, del, resetpassword, FetchMyNotice, FetchMyReadAll }

683
src/layout/components/Navbar.vue

@ -1,341 +1,342 @@
<template>
<div class="navbar">
<!-- <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> -->
<!-- <breadcrumb id="breadcrumb-container" class="breadcrumb-container" /> -->
<logo v-if="showLogo" :collapse="isCollapse" />
<div class="right-menu">
<!-- <template v-if="device!=='mobile'">
<search id="header-search" class="right-menu-item" />
<el-tooltip content="项目文档" effect="dark" placement="bottom">
<Doc class="right-menu-item hover-effect" />
</el-tooltip>
<el-tooltip content="全屏缩放" effect="dark" placement="bottom">
<screenfull id="screenfull" class="right-menu-item hover-effect" />
</el-tooltip>
<el-tooltip content="布局设置" effect="dark" placement="bottom">
<size-select id="size-select" class="right-menu-item hover-effect" />
</el-tooltip>
</template> -->
<!-- <div class="message-center">
<span class="iconfont icon-xiaoxi" />
</div> -->
<!-- 消息中心 -->
<el-dropdown ref="messageDrop" class="message-center right-menu-item hover-effect" trigger="click">
<div class="message-icon">
<span class="iconfont icon-xiaoxi" />
<i v-if="msgList.length > 0" class="message-num">{{ msgList.length }}</i>
</div>
<el-dropdown-menu slot="dropdown" class="message-dropdown" style="width: 420px;">
<div style="display: flex; justify-content: flex-end; padding: 0 20px; height: 40px; line-height: 40px; color: #339CFF; font-size: 14px; border-bottom: 1px solid #339CFF;">
<span style="cursor: pointer;" @click="handleAllRead">全部标记为已读</span>
<!-- 消息中心router -->
<span style="color:#fff; margin-left: 10px; cursor: pointer;" @click="toAllMessage">去查看</span>
</div>
<div style="max-height: 450px; overflow: hidden; overflow-y: scroll;">
<el-dropdown-item v-if="msgList.length===0" class="message-list-item">
<div style="text-align:center">暂无最新消息</div>
</el-dropdown-item>
<el-dropdown-item v-for="(item,index) in msgList" :key="index" class="message-list-item">
<router-link :to="{ path: '/user/center', query: { activeIndex: 1 }}">
<p>{{ item.noticeContent }}</p>
<span>{{ item.create_time | parseTime }}</span>
<i class="el-icon-arrow-right" />
</router-link>
</el-dropdown-item>
</div>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<div class="user-img-cover">
<img :src="user.avatarName ? baseApi + '/avatar/' + user.avatarName : Avatar" class="user-avatar" :onerror="defaultImg">
</div>
<i class="el-icon-caret-bottom" />
</div>
<el-dropdown-menu slot="dropdown">
<!-- <span style="display:block;" @click="show = true">
<el-dropdown-item>
布局设置
</el-dropdown-item>
</span> -->
<!-- <router-link to="/user/center"> -->
<router-link :to="{ path: '/user/center', query: { activeIndex: 0 }}">
<el-dropdown-item>
个人中心
</el-dropdown-item>
</router-link>
<router-link :to="{ path: '/user/center', query: { activeIndex: 1 }}">
<el-dropdown-item divided>
我的消息
</el-dropdown-item>
</router-link>
<span style="display:block;" @click="logoutVisible=true">
<el-dropdown-item divided>
退出登录
</el-dropdown-item>
</span>
</el-dropdown-menu>
</el-dropdown>
</div>
<!-- 退出登录 -->
<el-dialog title="退出登录" :modal-append-to-body="false" :close-on-click-modal="false" :visible.sync="logoutVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
<p><span>确定注销并退出系统吗</span></p>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="logoutVisible = false">取消</el-button>
<el-button type="primary" @click="logout">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import Logo from '@/layout/components/Sidebar/Logo'
// import Breadcrumb from '@/components/Breadcrumb'
// import Hamburger from '@/components/Hamburger'
// import Doc from '@/components/Doc'
// import Screenfull from '@/components/Screenfull'
// import SizeSelect from '@/components/SizeSelect'
// import Search from '@/components/HeaderSearch'
import Avatar from '@/assets/images/avatar.png'
import { getUserNotice, isread } from '@/api/system/logs'
export default {
inject: ['reload'],
components: {
// Breadcrumb,
// Hamburger,
// Screenfull,
// SizeSelect,
// Search,
// Doc,
Logo
},
data() {
return {
Avatar: Avatar,
defaultImg: 'this.src="' + require('@/assets/images/avatar.png') + '"',
logoutVisible: false,
msgList: []
}
},
computed: {
...mapGetters([
'sidebar',
'device',
'user',
'baseApi'
]),
show: {
get() {
return this.$store.state.settings.showSettings
},
set(val) {
this.$store.dispatch('settings/changeSetting', {
key: 'showSettings',
value: val
})
}
},
showLogo() {
return this.$store.state.settings.sidebarLogo
},
isCollapse() {
return !this.sidebar.opened
}
},
created() {
this.getMsgList()
},
methods: {
//
async getMsgList() {
const params = {
page: 0,
size: 10,
// createTime: [],
sort: 'createTime,desc'
}
const list = []
const allList = await this.getAllNoRead(params, list)
allList.forEach(item => {
item.pushUserName = item.noticeUsers[0].pushUserName
item.isRead = item.noticeUsers[0].isRead
})
const arr = allList.filter(item => { return !item.isRead })
if (arr.length > 20) {
this.msgList = arr.slice(0, 20)
} else {
this.msgList = arr
}
},
//
async handleAllRead() {
const params = {
page: 0,
size: 10,
// createTime: [],
sort: 'createTime,desc'
}
const list = []
const ids = []
const allList = await this.getAllNoRead(params, list)
allList.forEach(item => {
item.noticeUsers.forEach(i => {
ids.push(i.id)
})
})
isread(ids).then(res => {
if (res) {
this.msgList = []
// this.$router.go(0)
if (this.$route.path.includes('user/center') || this.$route.path.includes('system/notifyManage')) {
this.reload()
}
}
})
},
//
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
},
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
},
toAllMessage() {
// this.$router.push('/system/messageCenter')
this.$router.push({ path: '/user/center', query: { activeIndex: 1 }})
this.$refs.messageDrop.hide()
},
// open() {
// this.$confirm('退', '', {
// confirmButtonText: '',
// cancelButtonText: '',
// type: 'warning'
// }).then(() => {
// this.logout()
// })
// },
logout() {
this.$store.dispatch('LogOut').then(() => {
location.reload()
})
},
handleClose(done) {
done()
}
}
}
</script>
<style lang="scss" scoped>
.navbar {
display: flex;
justify-content: space-between;
width: 100%;
height: 100px;
overflow: hidden;
position: relative;
// background: #fff;
// box-shadow: 0 1px 4px rgba(0,21,41,.08);
box-shadow: 5px 2px 10px 1px rgba(15,164,222,0.16);
.hamburger-container {
line-height: 46px;
height: 100%;
float: left;
cursor: pointer;
transition: background .3s;
-webkit-tap-highlight-color:transparent;
&:hover {
background: rgba(0, 0, 0, .025)
}
}
.errLog-container {
display: inline-block;
vertical-align: top;
}
.right-menu {
// height: 100%;
display: flex;
padding-top: 25px;
line-height: 50px;
&:focus {
outline: none;
}
.right-menu-item {
display: inline-block;
padding: 0 8px;
height: 100%;
font-size: 18px;
color: #5a5e66;
vertical-align: text-bottom;
&.hover-effect {
cursor: pointer;
transition: background .3s;
&:hover {
background: rgba(0, 0, 0, .025)
}
}
}
.message-center{
margin-right: 26px;
margin-top: 4px;
}
.avatar-container {
margin-right: 60px;
.avatar-wrapper {
margin-top: 5px;
position: relative;
.user-img-cover{
width: 40px;
height: 40px;
}
.user-avatar {
cursor: pointer;
width: 40px;
height: 40px;
border-radius: 10px;
}
.el-icon-caret-bottom {
cursor: pointer;
position: absolute;
right: -20px;
top: 25px;
font-size: 12px;
}
}
}
}
}
</style>
<template>
<div class="navbar">
<!-- <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> -->
<!-- <breadcrumb id="breadcrumb-container" class="breadcrumb-container" /> -->
<logo v-if="showLogo" :collapse="isCollapse" />
<div class="right-menu">
<!-- <template v-if="device!=='mobile'">
<search id="header-search" class="right-menu-item" />
<el-tooltip content="项目文档" effect="dark" placement="bottom">
<Doc class="right-menu-item hover-effect" />
</el-tooltip>
<el-tooltip content="全屏缩放" effect="dark" placement="bottom">
<screenfull id="screenfull" class="right-menu-item hover-effect" />
</el-tooltip>
<el-tooltip content="布局设置" effect="dark" placement="bottom">
<size-select id="size-select" class="right-menu-item hover-effect" />
</el-tooltip>
</template> -->
<!-- <div class="message-center">
<span class="iconfont icon-xiaoxi" />
</div> -->
<!-- 消息中心 -->
<el-dropdown ref="messageDrop" class="message-center right-menu-item hover-effect" trigger="click">
<div class="message-icon">
<span class="iconfont icon-xiaoxi" />
<i v-if="msgList.length > 0" class="message-num">{{ msgList.length }}</i>
</div>
<el-dropdown-menu slot="dropdown" class="message-dropdown" style="width: 420px;">
<div style="display: flex; justify-content: flex-end; padding: 0 20px; height: 40px; line-height: 40px; color: #339CFF; font-size: 14px; border-bottom: 1px solid #339CFF;">
<span style="cursor: pointer;" @click="handleAllRead">全部标记为已读</span>
<!-- 消息中心router -->
<span style="color:#fff; margin-left: 10px; cursor: pointer;" @click="toAllMessage">去查看</span>
</div>
<div style="max-height: 450px; overflow: hidden; overflow-y: scroll;">
<el-dropdown-item v-if="msgList.length===0" class="message-list-item">
<div style="text-align:center">暂无最新消息</div>
</el-dropdown-item>
<el-dropdown-item v-for="(item,index) in msgList" :key="index" class="message-list-item">
<router-link :to="{ path: '/user/center', query: { activeIndex: 1 }}">
<p>{{ item.noticeContent }}</p>
<span>{{ item.createTime | parseTime }}</span>
<i class="el-icon-arrow-right" />
</router-link>
</el-dropdown-item>
</div>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<div class="user-img-cover">
<img :src="user.avatarName ? baseApi + '/avatar/' + user.avatarName : Avatar" class="user-avatar" :onerror="defaultImg">
</div>
<i class="el-icon-caret-bottom" />
</div>
<el-dropdown-menu slot="dropdown">
<!-- <span style="display:block;" @click="show = true">
<el-dropdown-item>
布局设置
</el-dropdown-item>
</span> -->
<!-- <router-link to="/user/center"> -->
<router-link :to="{ path: '/user/center', query: { activeIndex: 0 }}">
<el-dropdown-item>
个人中心
</el-dropdown-item>
</router-link>
<router-link :to="{ path: '/user/center', query: { activeIndex: 1 }}">
<el-dropdown-item divided>
我的消息
</el-dropdown-item>
</router-link>
<span style="display:block;" @click="logoutVisible=true">
<el-dropdown-item divided>
退出登录
</el-dropdown-item>
</span>
</el-dropdown-menu>
</el-dropdown>
</div>
<!-- 退出登录 -->
<el-dialog title="退出登录" :modal-append-to-body="false" :close-on-click-modal="false" :visible.sync="logoutVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
<p><span>确定注销并退出系统吗</span></p>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="logoutVisible = false">取消</el-button>
<el-button type="primary" @click="logout">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import Logo from '@/layout/components/Sidebar/Logo'
// import Breadcrumb from '@/components/Breadcrumb'
// import Hamburger from '@/components/Hamburger'
// import Doc from '@/components/Doc'
// import Screenfull from '@/components/Screenfull'
// import SizeSelect from '@/components/SizeSelect'
// import Search from '@/components/HeaderSearch'
import Avatar from '@/assets/images/avatar.png'
// import { isread } from '@/api/system/logs'
import { FetchMyNotice, FetchMyReadAll } from '@/api/system/user'
export default {
inject: ['reload'],
components: {
// Breadcrumb,
// Hamburger,
// Screenfull,
// SizeSelect,
// Search,
// Doc,
Logo
},
data() {
return {
Avatar: Avatar,
defaultImg: 'this.src="' + require('@/assets/images/avatar.png') + '"',
logoutVisible: false,
msgList: []
}
},
computed: {
...mapGetters([
'sidebar',
'device',
'user',
'baseApi'
]),
show: {
get() {
return this.$store.state.settings.showSettings
},
set(val) {
this.$store.dispatch('settings/changeSetting', {
key: 'showSettings',
value: val
})
}
},
showLogo() {
return this.$store.state.settings.sidebarLogo
},
isCollapse() {
return !this.sidebar.opened
}
},
created() {
this.getMsgList()
},
methods: {
//
async getMsgList() {
const params = {
page: 0,
size: 10
// createTime: [],
// sort: 'createTime,desc'
}
const list = []
const allList = await this.getAllNoRead(params, list)
// allList.forEach(item => {
// item.pushUserName = item.noticeUsers[0].pushUserName
// item.isRead = item.noticeUsers[0].isRead
// })
const arr = allList.filter(item => { return !item.isRead })
if (arr.length > 20) {
this.msgList = arr.slice(0, 20)
} else {
this.msgList = arr
}
},
//
async handleAllRead() {
// const params = {
// page: 0,
// size: 10
// // createTime: [],
// // sort: 'createTime,desc'
// }
// const list = []
// const ids = []
// const allList = await this.getAllNoRead(params, list)
// allList.forEach(item => {
// item.noticeUsers.forEach(i => {
// ids.push(i.id)
// })
// })
FetchMyReadAll().then(res => {
if (res) {
this.msgList = []
// this.$router.go(0)
if (this.$route.path.includes('user/center') || this.$route.path.includes('system/notifyManage')) {
this.reload()
}
}
})
},
//
async getAllNoRead(params, list) {
const allList = await FetchMyNotice(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
},
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
},
toAllMessage() {
// this.$router.push('/system/messageCenter')
this.$router.push({ path: '/user/center', query: { activeIndex: 1 }})
this.$refs.messageDrop.hide()
},
// open() {
// this.$confirm('退', '', {
// confirmButtonText: '',
// cancelButtonText: '',
// type: 'warning'
// }).then(() => {
// this.logout()
// })
// },
logout() {
this.$store.dispatch('LogOut').then(() => {
location.reload()
})
},
handleClose(done) {
done()
}
}
}
</script>
<style lang="scss" scoped>
.navbar {
display: flex;
justify-content: space-between;
width: 100%;
height: 100px;
overflow: hidden;
position: relative;
// background: #fff;
// box-shadow: 0 1px 4px rgba(0,21,41,.08);
box-shadow: 5px 2px 10px 1px rgba(15,164,222,0.16);
.hamburger-container {
line-height: 46px;
height: 100%;
float: left;
cursor: pointer;
transition: background .3s;
-webkit-tap-highlight-color:transparent;
&:hover {
background: rgba(0, 0, 0, .025)
}
}
.errLog-container {
display: inline-block;
vertical-align: top;
}
.right-menu {
// height: 100%;
display: flex;
padding-top: 25px;
line-height: 50px;
&:focus {
outline: none;
}
.right-menu-item {
display: inline-block;
padding: 0 8px;
height: 100%;
font-size: 18px;
color: #5a5e66;
vertical-align: text-bottom;
&.hover-effect {
cursor: pointer;
transition: background .3s;
&:hover {
background: rgba(0, 0, 0, .025)
}
}
}
.message-center{
margin-right: 26px;
margin-top: 4px;
}
.avatar-container {
margin-right: 60px;
.avatar-wrapper {
margin-top: 5px;
position: relative;
.user-img-cover{
width: 40px;
height: 40px;
}
.user-avatar {
cursor: pointer;
width: 40px;
height: 40px;
border-radius: 10px;
}
.el-icon-caret-bottom {
cursor: pointer;
position: absolute;
right: -20px;
top: 25px;
font-size: 12px;
}
}
}
}
}
</style>

68
src/views/storeManage/taskManage/index.vue

@ -33,12 +33,13 @@
<!-- 如果是都选中了就是整点和半点每间隔30分钟执行一次 -->
<div v-if="scope.row.timerType===4 && scope.row.timeInterval === '1'">整点</div>
<div v-if="scope.row.timerType===4 && scope.row.timeInterval === '2'">半点</div>
<div v-if="scope.row.timerType===4 && (scope.row.timeInterval && scope.row.timeInterval.split(',').length === 2)">整点/半点</div>
<div v-if="scope.row.timerType===4 && (scope.row.timeInterval && scope.row.timeInterval.indexOf(',') !== -1 && scope.row.timeInterval.split(',').length === 2)">整点/半点</div>
</template>
</el-table-column>
<el-table-column prop="nextExecute" label="下次运行">
<template slot-scope="scope">
<div>{{ scope.row.nextExecute | parseTime }}</div>
<div v-if="scope.row.nextExecute">{{ scope.row.nextExecute | parseTime }}</div>
<div v-else> - </div>
</template>
</el-table-column>
<el-table-column prop="lastExecute" label="最后运行">
@ -209,9 +210,9 @@ import pagination from '@crud/Pagination'
import Detail from './module/detail'
import { parseTime, timeToTimestamp } from '@/utils/index.js'
import { getAllDev } from '@/api/system/logs'
import qs from 'qs'
import { exportFile } from '@/utils/index'
import { mapGetters } from 'vuex'
// import qs from 'qs'
// import { exportFile } from '@/utils/index'
// import { mapGetters } from 'vuex'
const defaultForm = { id: null, taskType: null, deviceId: null, taskName: null, timerType: 2, timeInterval: 1, status: 1, startTime2: parseTime(new Date().getTime()), endTime2: null, nowTime: null, longTime: true, remark: null, halfOrPart: [] }
@ -364,10 +365,10 @@ export default {
computed: {
isRequired() {
return this.form.longTime === false
},
...mapGetters([
'baseApi'
])
}
// ...mapGetters([
// 'baseApi'
// ])
},
created() {
},
@ -387,17 +388,18 @@ export default {
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
if (form.endTime === null) {
form.longTime = true
}
if (form.timerType === 4 && form.timeInterval) {
form.halfOrPart = form.timeInterval.split(',')
form.halfOrPart = form.timeInterval.split(',').map(Number)
}
if (form.startTime) {
this.form.startTime2 = parseTime(form.startTime)
}
if (form.endTime) {
this.form.endTime2 = parseTime(form.endTime)
form.longTime = false
} else {
this.form.endTime2 = null
form.longTime = true
}
},
[CRUD.HOOK.beforeValidateCU](crud, form) {
@ -426,7 +428,6 @@ export default {
delete crud.form.endTime2
delete crud.form.nowTime
delete crud.form.halfOrPart
console.log(crud.form)
return true
},
changeFormTab(index) {
@ -467,6 +468,8 @@ export default {
if (val === 4) {
this.form.timeInterval = null
this.form.halfOrPart = [1]
} else {
this.form.timeInterval = 1
}
},
//
@ -499,6 +502,10 @@ export default {
//
handleDbClick(row) {
this.$refs.detailRefs.detailVisible = true
this.$refs.detailRefs.detailTitle = row.taskName + '-日志'
this.$refs.detailRefs.currentTaskId = row.id
this.$refs.detailRefs.page.page = 1
this.$refs.detailRefs.getInitTimedTasksLog(row.id)
},
//
changeStatus(data, val) {
@ -511,26 +518,25 @@ export default {
'id': data.id,
'status': val
}
console.log('params', params)
// crudTask.FetchStatus(params).then(res => {
// this.crud.notify('', CRUD.NOTIFICATION_TYPE.SUCCESS)
// }).catch(() => {
// data.status = !data.status
// })
crudTask.FetchStatus(params).then(res => {
this.crud.notify('状态修改成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(() => {
data.status = !data.status
})
}).catch(() => {
// data.status = !data.status
data.status = !data.status
})
},
//
downloadApi(data) {
const ids = data.map(item => { return item.id })
const params = {
'logIds': ids
}
console.log(params)
// /case/exportCaseLogList
exportFile(this.baseApi + '/api?' + qs.stringify(params, { indices: false }))
}
//
// downloadApi(data) {
// const ids = data.map(item => { return item.id })
// const params = {
// 'logIds': ids
// }
// console.log(params)
// // /case/exportCaseLogList
// exportFile(this.baseApi + '/api?' + qs.stringify(params, { indices: false }))
// }
}
}
</script>

40
src/views/storeManage/taskManage/module/detail.vue

@ -1,20 +1,27 @@
<template>
<div>
<el-dialog class="detail-dialog" title="xxx通风任务1-日志" :visible.sync="detailVisible" append-to-body>
<el-dialog class="detail-dialog" :title="detailTitle" :visible.sync="detailVisible" append-to-body>
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-table :data="tableData" max-height="400px" style="margin-top:15px;">
<el-table-column prop="categoryName" label="任务类型" align="center" />
<el-table-column prop="archiveNo" label="目标设备" align="center" />
<el-table-column prop="maintitle" label="执行结果" align="center" />
<el-table-column prop="caseName" label="执行时间" align="center">
<el-table v-loading="loading" :data="tableData" max-height="400px" style="margin-top:15px;">
<el-table-column prop="taskType" label="任务类型" align="center">
<template slot-scope="scope">
<div v-if="scope.row.taskType===1">通风任务</div>
<div v-else>其他任务</div>
</template>
</el-table-column>
<el-table-column prop="deviceName" label="目标设备" align="center" />
<el-table-column prop="actionResult" label="执行结果" align="center" />
<el-table-column prop="createTime" label="执行时间" align="center">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<el-pagination
v-if="tableData.length!==0"
style="margin: 50px 0 30px 0 !important;"
:current-page="page.page"
:total="page.total"
:page-size="page.size"
@ -29,11 +36,15 @@
</template>
<script>
import { FetchInitTimedTasksLog } from '@/api/storeManage/taskManage/index'
export default {
name: 'Detail',
mixins: [],
data() {
return {
loading: false,
currentTaskId: null,
detailTitle: '通风日志',
detailVisible: false,
tableData: [],
page: {
@ -44,14 +55,29 @@ export default {
}
},
methods: {
getInitTimedTasksLog(taskId) {
this.loading = true
const params = {
'taskId': taskId,
'page': this.page.page - 1,
'size': this.page.size
}
FetchInitTimedTasksLog(params).then(res => {
this.tableData = res.content
this.page.total = res.totalElements
this.loading = false
})
},
//
sizeChangeHandler(e) {
this.page.size = e
this.page.page = 1
this.getInitTimedTasksLog(this.currentTaskId)
},
//
pageChangeHandler(e) {
this.page.page = e
this.getInitTimedTasksLog(this.currentTaskId)
}
}
}
@ -62,7 +88,7 @@ export default {
::v-deep .el-dialog{
width: 800px !important;
.el-dialog__body{
padding: 20px 0 60px 0;
padding: 20px 0;
}
.el-dialog__header .el-dialog__close::before{
position: absolute;

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

@ -36,9 +36,9 @@
</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">
<el-table-column prop="createTime" label="推送时间" align="center" min-width="180">
<template slot-scope="scope">
<div>{{ scope.row.create_time | parseTime }}</div>
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
@ -67,22 +67,24 @@
<script>
import DateRangePicker from '@/components/DateRangePicker'
import { getUserNotice, isread, userMsgDel } from '@/api/system/logs'
import CRUD, { presenter, header, crud } from '@crud/crud'
// getUserNotice
import { isread, userMsgDel } from '@/api/system/logs'
import { FetchMyNotice, FetchMyReadAll } from '@/api/system/user'
// import CRUD, { presenter, header, crud } from '@crud/crud'
import { mapGetters } from 'vuex'
export default {
name: 'MessageCenter',
inject: ['reload'],
components: { DateRangePicker },
mixins: [presenter(), crud(), header()],
cruds() {
return CRUD({
url: 'api/users/notice',
sort: [],
optShow: {}
})
},
// mixins: [presenter(), crud(), header()],
// cruds() {
// return CRUD({
// url: 'api/users/myNotice',
// sort: [],
// optShow: {}
// })
// },
data() {
return {
tableData: [],
@ -125,14 +127,14 @@ export default {
methods: {
getTableData() {
this.isLoading = true
getUserNotice(this.getParams()).then(res => {
FetchMyNotice(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
// const table = res.content
// table.forEach(item => {
// item.pushUserName = item.noticeUsers[0].pushUserName
// item.isRead = item.noticeUsers[0].isRead
// })
this.tableData = res.content
this.isLoading = false
})
},
@ -140,20 +142,16 @@ export default {
const params = {
page: this.page.page - 1,
size: this.page.size,
createTime: this.query.createTime,
startTime: this.query.createTime ? this.query.createTime[0] : null,
endTime: this.query.createTime ? this.query.createTime[1] : null,
isRead: this.query.isRead
// sort: 'createTime,desc'
}
return params
},
getUserMsgId(list) {
const ids = []
list.forEach(item => {
item.noticeUsers.forEach(i => {
// if (i.userId === this.user.id) {
ids.push(i.id)
// }
})
ids.push(item.noticeUserId)
})
return ids
},
@ -163,39 +161,41 @@ export default {
if (res) {
// this.getTableData()
this.reload()
this.$route.query.activeIndex = 1
}
})
},
//
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 => {
// const params = {
// page: 0,
// size: 10
// // createTime: [],
// // sort: 'createTime,desc'
// }
// const list = []
// const allList = await this.getAllNoRead(params, list)
FetchMyReadAll().then(res => {
if (res) {
this.reload()
// this.getTableData()
this.$route.query.activeIndex = 1
}
})
},
//
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
},
// async getAllNoRead(params, list) {
// const allList = await FetchMyNotice(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 => {
@ -210,6 +210,7 @@ export default {
} else {
this.$message.error('删除失败')
}
this.$route.query.activeIndex = 1
})
},
clickRowHandler(row) {

Loading…
Cancel
Save