Browse Source

个人中心

master
xuhuajiao 2 years ago
parent
commit
ce046042d8
  1. 50
      src/assets/styles/mixin.scss
  2. 37
      src/assets/styles/yxk-admin.scss
  3. 2
      src/views/system/processManage/runningProcess/module/businessDetails/index.vue
  4. 242
      src/views/system/user/messageCenter/index.vue
  5. 133
      src/views/system/user/processCenter/index.vue
  6. 93
      src/views/system/user/processCenter/module/detail.vue

50
src/assets/styles/mixin.scss

@ -980,3 +980,53 @@
box-shadow: -3px 3px 11px 0px rgba(0,0,0,0.08);
}
}
// 个人中心
@mixin process-left-style{
[data-theme="dark"] & {
box-shadow: 5px 2px 10px 1px rgba(15,164,222,.16);
color: #339cff;
li{
&.active-li{
color: #fff;
&::before{
background-color: #fff;
}
}
&:hover{
background-image: $subMenuHover;
}
}
}
[data-theme="light"] & {
color: #0C0E1E;
box-shadow: 4px 0px 4px 0px rgba(0,0,0,0.04);
li{
&.active-li{
color: #0348F3;
&::before{
background-color: #0348F3;
}
}
&:hover{
background-color:#E8F2FF;
color: #0C0E1E;
}
}
}
}
[data-theme=dark] .process-center {
height: calc(100vh - 202px);
margin-top: -30px;
.process-right{
padding-right: 20px;
width: calc(100vw - 944px);
}
}
[data-theme=light] .process-center {
height: calc(100vh - 193px);
.process-right{
width: calc(100vw - 964px);
}
}

37
src/assets/styles/yxk-admin.scss

@ -2130,3 +2130,40 @@ input[type ='number'] {
height: calc(100vh - 380px);
}
// 个人中心
.process-center{
display: flex;
justify-content: space-between;
height: 100%;
overflow: hidden;
.process-left{
width: 240px;
padding: 26px 0;
@include process-left-style;
li{
height: 50px;
line-height: 50px;
padding-left: 40px;
cursor: pointer;
&.active-li{
position: relative;
&::before{
position: absolute;
left: 0;
top: 50%;
content: "";
width: 3px;
height: 28px;
margin-top: -14px;
}
}
}
}
.head-container{
margin: 20px 0 !important;
}
.user-search-btn{
@include btn_blue_style;
}
}

2
src/views/system/processManage/runningProcess/module/businessDetails/index.vue

@ -1,7 +1,7 @@
<template>
<div>
<el-table :data="tableData" style="width: 100%" height="300" @cell-dblclick="tableDoubleClick">
<el-table-column type="selection" align="center" width="55" />
<el-table-column type="index" align="center" width="55" />
<el-table-column prop="groups" label="所属全宗" />
<el-table-column prop="name" label="门类名称" />
<el-table-column prop="type" label="整理方式" />

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

@ -1,62 +1,44 @@
<template>
<div>
<div class="process-center">
<ul class="process-left">
<li class="active-li">系统通知</li>
<li>档案流程管理</li>
<li>流程完成提醒</li>
<li>赋权提醒</li>
</ul>
<div class="process-right">
<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>
<!-- <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-input v-model="query.keyword" clearable size="small" placeholder="输入标题关键字搜索" prefix-icon="el-icon-search" class="filter-item" style="width: 225px;" />
<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>
<el-button icon="el-icon-search" size="mini" class="user-search-btn" @click="getTableData">搜索</el-button>
<el-button class="iconfont icon-quanbuyidu" size="mini" @click="handleAllRead">全部已读</el-button>
</div>
<div class="message-center-list">
<div class="message-item">
<div class="message-date">2020-10-01 10:00:00</div>
<div class="message-cont">
<div class="message-cont-info">
<span class="message-type-title">系统通知</span>
<span class="is-read-tip">未读</span>
<div class="message-title">这是系统通知标题</div>
<ul class="message-list-info">
<li>创建人admin</li>
<li>创建时间2020-10-01 10:00:00</li>
</ul>
</div>
<div class="message-more">查看详情<i class="iconfont icon-chakan" /></div>
</div>
</div>
<el-table
ref="table"
v-loading="isLoading"
:data="tableData"
style="width: 100%;"
:row-class-name="cell"
@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 { getUserNotice, isread } from '@/api/system/logs'
import CRUD, { presenter, header, crud } from '@crud/crud'
export default {
@ -73,55 +55,16 @@ export default {
},
data() {
return {
tableData: [],
selections: [],
query: {
createTime: []
},
page: {
total: 0,
size: 10,
page: 1
},
isLoading: false,
delVisible: false
createTime: [],
keyword: null
}
}
},
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 => {
@ -160,72 +103,77 @@ export default {
}
})
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>
.head-container {
padding-top: 0;
.date-item{
margin: -1px 20px 0 12px;
.message-center-list{
height: calc(100% - 90px);
padding: 16px 30px;
margin-bottom: 20px;
background-color: #F5F5F5;
.message-item{
font-size: 14px;
.message-date{
text-align: center;
color: #A6ADB6;
}
.message-cont{
margin: 12px 0 16px 0;
background-color: #fff;
.message-cont-info{
position: relative;
padding: 16px 20px;
color: #545B65;
.message-type-title{
display: block;
padding-left: 33px;
height: 33px;
line-height: 33px;
background: url('~@/assets/images/icon/xttz.png') no-repeat left center;
background-size: 23px 23px;
}
.is-read-tip{
position: absolute;
right: 20px;
top: 16px;
font-size: 12px;
height: 20px;
line-height: 20px;
padding: 0 7px;
color: #ED4A41;
background-color: #FDEFEE;
border-radius: 3px;
}
.message-title{
margin: 8px 0 20px 0;
font-weight: 400;
color: #0C0E1E;
}
.message-list-info{
font-size: 12px;
line-height: 24px;
}
}
.message-more{
position: relative;
padding: 0 20px;
height: 40px;
line-height: 40px;
color: #545B65;
border-top: 1px solid #E6E8ED;
cursor: pointer;
i{
position: absolute;
right: 10px;
top: 0;
font-size: 12px;
color: #888D94;
}
}
.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>

133
src/views/system/user/processCenter/index.vue

@ -16,7 +16,7 @@
<div>
<el-input v-model="query.keyword" clearable size="small" placeholder="输入关键字搜索" prefix-icon="el-icon-search" class="filter-item" style="width: 225px;" />
<date-range-picker v-model="query.createTime" class="date-item" />
<el-button icon="el-icon-search" size="mini" @click="getTableData">搜索</el-button>
<el-button icon="el-icon-search" size="mini" class="user-search-btn" @click="getTableData">搜索</el-button>
</div>
<el-select v-model="value" placeholder="请选择" style="width: 97px;">
<el-option
@ -75,12 +75,11 @@
<script>
import DateRangePicker from '@/components/DateRangePicker'
import { getUserNotice, isread } from '@/api/system/logs'
import { getUserNotice } from '@/api/system/logs'
import CRUD, { presenter, header, crud } from '@crud/crud'
import detail from './module/detail.vue'
export default {
name: 'MessageCenter',
inject: ['reload'],
name: 'ProcessCenter',
components: { DateRangePicker, detail },
mixins: [presenter(), crud(), header()],
cruds() {
@ -146,54 +145,6 @@ export default {
}
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
},
clickRowHandler(row) {
// this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row) //
@ -226,84 +177,6 @@ export default {
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/mixin.scss";
@mixin process-left-style{
[data-theme="dark"] & {
box-shadow: 5px 2px 10px 1px rgba(15,164,222,.16);
color: #339cff;
li{
&.active-li,
&:hover{
color: #fff;
&::before{
background-color: #fff;
}
}
}
}
[data-theme="light"] & {
color: #0C0E1E;
box-shadow: 4px 0px 4px 0px rgba(0,0,0,0.04);
li{
&.active-li,
&:hover{
color: #0348F3;
&::before{
background-color: #0348F3;
}
}
}
}
}
[data-theme=dark] .process-center {
height: calc(100vh - 202px);
margin-top: -30px;
.process-right{
padding-right: 20px;
width: calc(100vw - 944px);
}
}
[data-theme=light] .process-center {
height: calc(100vh - 193px);
.process-right{
width: calc(100vw - 964px);
}
}
.process-center{
display: flex;
justify-content: space-between;
height: 100%;
overflow: hidden;
.process-left{
width: 240px;
padding: 26px 0;
@include process-left-style;
li{
height: 28px;
line-height: 28px;
padding-left: 40px;
margin-bottom: 20px;
cursor: pointer;
&.active-li,
&:hover{
position: relative;
&::before{
position: absolute;
left: 0;
top: 0;
content: "";
width: 3px;
height: 28px;
}
}
}
}
.head-container{
margin: 20px 0 !important;
}
}
.deal-state,
.deal-off{
display: block;

93
src/views/system/user/processCenter/module/detail.vue

@ -7,7 +7,6 @@
<li :class="{'active-tab-nav': activeIndex == 1 }" @click="changeActiveTab(1)">流程图</li>
<li :class="{'active-tab-nav': activeIndex == 2 }" @click="changeActiveTab(2)">业务详情</li>
</ul>
<!-- <component :is="comName" class="component-cont" /> -->
</div>
<div v-if="activeIndex == 0">
<div class="detail-info">
@ -18,31 +17,42 @@
</div>
<div class="opinion">
<h5>归档审批</h5>
<div>
<div class="opinion-form">
<span>审批意见</span>
<el-input v-model="opinionTxt" type="textarea" :rows="4" />
<el-input v-model="opinionTxt" placeholder="请输入" type="textarea" :rows="10" />
</div>
</div>
</div>
<div v-if="activeIndex == 1" class="detail-img">
<img src="~@/assets/images/system/process-img.png" alt="">
</div>
<div v-if="activeIndex == 2">
<div class="detail-list">
<p><span>业务类型</span>归档审批</p>
<p><span>原始位置</span>全宗A-整理库-门类A</p>
<p><span>目标位置</span>全宗A-整理库-门类A</p>
<p><span>赋权类型</span>-</p>
<p><span>起始时间</span>-</p>
<p><span>终止时间</span>-</p>
<p><span>利用目的</span>-</p>
<p><span>利用次数</span>-</p>
</div>
<businessDetails />
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="detailVisible=false">确定</el-button>
<el-button>驳回</el-button>
<el-button type="primary" @click="detailVisible=false">审批</el-button>
</div>
</div>
</el-dialog>
</template>
<script>
// import processImg from './processImg/index.vue'
// import businessDetails from './businessDetails/index.vue'
// import taskList from './taskList/index.vue'
// import approvalList from './approvalList/index.vue'
import businessDetails from '@/views/system/processManage/runningProcess/module/businessDetails/index.vue'
export default {
name: 'Detail',
components: {
// processImg,
// businessDetails,
// taskList,
// approvalList
businessDetails
},
data() {
return {
@ -52,16 +62,6 @@ export default {
}
},
computed: {
// comName: function() {
// if (this.activeIndex === 0) {
// return 'processImg'
// } else if (this.activeIndex === 1) {
// return 'businessDetails'
// } else if (this.activeIndex === 2) {
// return 'taskList'
// }
// return 'processImg'
// }
},
methods: {
changeActiveTab(data) {
@ -93,30 +93,45 @@ export default {
}
}
}
.service-detail{
padding: 8px 12px;
background-color: #F6F8FC;
font-size: 14px;
h4{
position: relative;
padding-left: 10px;
.opinion{
margin-top: 28px;
h5{
margin-bottom: 18px;
font-size: 16px;
color: #0C0E1E;
&::before {
content: "";
position: absolute;
left: 0;
top: 50%;
width: 3px;
height: 14px;
background-color: #0348F3;
transform: translateY(-50%);
text-align: center;
}
.opinion-form{
display: flex;
justify-content: space-between;
span{
display: block;
width: 83px;
margin-right: 12px;
line-height: 30px;
text-align: right;
color: #545B65;
}
::v-deep .el-textarea__inner{
border-color: #E6E8ED;
}
}
}
.detail-img{
width: 818px;
height: 404px;
overflow: hidden;
overflow-y: scroll;
img{
display: block;
width: 100%;
}
}
.detail-list{
margin-bottom: 16px;
p{
width: 33%;
}
}
}
}
</style>
Loading…
Cancel
Save