秀山工作台入库
This commit is contained in:
560
project/xiushan/apps/AppConsole/AppConsole.vue
Normal file
560
project/xiushan/apps/AppConsole/AppConsole.vue
Normal file
@@ -0,0 +1,560 @@
|
|||||||
|
<template>
|
||||||
|
<section class="AppConsole">
|
||||||
|
<div class="top">
|
||||||
|
<div class="left">
|
||||||
|
<!-- <img :src="user.info.avatar"> -->
|
||||||
|
<div class="user">
|
||||||
|
<h2 class="mar-b10">您好,{{ user.info.name }},欢迎回来!</h2>
|
||||||
|
<p v-if="user.financeUser" v-text="financeInfo"/>
|
||||||
|
<span>上次登录时间:{{ user.info.lastLoginTime }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<div class="right-item" v-for="row in info" :key="row.name" @click="$router.push({name:row.menuId,query:{status:row.dictValue}})">
|
||||||
|
<div class="top">
|
||||||
|
<i v-if="row.countNumber>0"/>
|
||||||
|
<span v-text="row.name"/>
|
||||||
|
</div>
|
||||||
|
<h2 v-text="row.countNumber"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="middle" v-if="!isFinanceUser">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title">
|
||||||
|
<h2>群众留言</h2>
|
||||||
|
<div @click="$router.push({name:routeNames.AppMassMessage})">
|
||||||
|
<span>全部留言</span>
|
||||||
|
<img src="./assets/right.png">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list">
|
||||||
|
<div class="comment-item" v-for="(item, index) in comments" :key="index"
|
||||||
|
@click="$router.push({name:routeNames.AppMassMessage,query:{id:item.id}})">
|
||||||
|
<h3>{{ item.title }}</h3>
|
||||||
|
<div class="comment-item__bottom">
|
||||||
|
<span>{{ dict.getLabel('leaveMessageType', item.type) }}</span>
|
||||||
|
<i>{{ item.createTime }}</i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ai-empty class="w100" v-if="!comments.length"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<div class="title">
|
||||||
|
<h2>政策动态</h2>
|
||||||
|
<div @click="$router.push({name:routeNames.AppNewsCenter})">
|
||||||
|
<span>全部动态</span>
|
||||||
|
<img src="./assets/right.png">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list">
|
||||||
|
<div class="dynamic-item" v-for="(item, index) in news" :key="index" @click="$router.push({
|
||||||
|
name: routeNames.AppNewsCenter,
|
||||||
|
query: {
|
||||||
|
id: item.id
|
||||||
|
},
|
||||||
|
hash: '#' + (item.type === '0' ? 'news' : 'video')
|
||||||
|
})">
|
||||||
|
<i></i>
|
||||||
|
<div class="dynamic-item__right">
|
||||||
|
<h3>{{ item.title }}</h3>
|
||||||
|
<p>{{ item.createTime }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ai-empty class="w100" v-if="!news.length"></ai-empty>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="bottom" v-else>
|
||||||
|
<div class="title">
|
||||||
|
<h2>需求抢单</h2>
|
||||||
|
<div @click="$router.push({name:routeNames.AppFinancingNeeds})">
|
||||||
|
<span>查看全部</span>
|
||||||
|
<img src="./assets/right.png">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list">
|
||||||
|
<div class="item" v-for="(item, index) in list" :key="index">
|
||||||
|
<div class="item-top">
|
||||||
|
<div class="item-top__left fill">
|
||||||
|
<h2 class="nowrap">{{ item.enterpriseName || item.name }}</h2>
|
||||||
|
<p>{{ item.areaName }}</p>
|
||||||
|
</div>
|
||||||
|
<img @click="$router.push({name:routeNames.AppFinancingNeeds,query:{id:item.id}})"
|
||||||
|
src="./assets/qd.png">
|
||||||
|
</div>
|
||||||
|
<div class="item-bottom">
|
||||||
|
<div class="item-bottom__item">
|
||||||
|
<span>需求金额</span>
|
||||||
|
<h3>{{ item.loanAmount }}万</h3>
|
||||||
|
</div>
|
||||||
|
<div class="item-bottom__item">
|
||||||
|
<span>使用时长</span>
|
||||||
|
<h3 v-text="dict.getLabel('productRepaymentTimeline',item.hopeLifespan)"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ai-empty class="pad-b48 w100" v-if="!list.length"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {mapState} from "vuex";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "AppConsole",
|
||||||
|
props: {
|
||||||
|
instance: Function,
|
||||||
|
dict: Object,
|
||||||
|
permissions: Function
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(['user']),
|
||||||
|
isFinanceUser() {
|
||||||
|
return !!this.user?.financeUser?.id
|
||||||
|
},
|
||||||
|
financeInfo() {
|
||||||
|
let {organizationName, userRole} = this.user.financeUser
|
||||||
|
return [organizationName, this.dict.getLabel("financialOrganizationUserRole", userRole)].join(" | ")
|
||||||
|
},
|
||||||
|
routeNames() {
|
||||||
|
return {
|
||||||
|
AppMassMessage: "c66857ca597f49aab9c1aeb8a8e3e7c0",
|
||||||
|
AppNewsCenter: '6a56c8fdb09a437098f837a03a5fccb0',
|
||||||
|
AppFinancingNeeds: "27338cb83e77461dbd44356a6760df85",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
comments: [],
|
||||||
|
news: [],
|
||||||
|
list: [],
|
||||||
|
info: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.dict.load('leaveMessageType', 'financialOrganizationUserRole', 'productRepaymentTimeline').then(() => {
|
||||||
|
this.getComments()
|
||||||
|
this.getNewsList()
|
||||||
|
this.getList()
|
||||||
|
this.getInfo()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
getComments() {
|
||||||
|
this.instance.post('/appleavemessage/list?current=1&size=10').then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.comments = res.data.records
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
getInfo() {
|
||||||
|
this.instance.post("/todo/queryToDoList").then(res => {
|
||||||
|
if (res?.data) {
|
||||||
|
this.info = res.data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
getNewsList() {
|
||||||
|
this.instance.post('/appnews/list?current=1&size=10').then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.news = res.data.records
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
getList() {
|
||||||
|
this.instance.post('/appfinancingdemand/list?current=1&size=8', null, {
|
||||||
|
params: {status: 0}
|
||||||
|
}).then(res => {
|
||||||
|
if (res?.data) {
|
||||||
|
this.list = res.data.records
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.AppConsole {
|
||||||
|
height: 100%;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding: 0 20px;
|
||||||
|
overflow-y: auto;
|
||||||
|
|
||||||
|
.w100 {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-top__left {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nowrap {
|
||||||
|
width: 100%;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 56px;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
color: #222222;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
margin-right: 4px;
|
||||||
|
color: #999999;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
& > .top {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 152px;
|
||||||
|
margin: 20px 0;
|
||||||
|
padding: 0 40px 0 16px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15);
|
||||||
|
border-radius: 2px;
|
||||||
|
|
||||||
|
.left {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 64px;
|
||||||
|
height: 64px;
|
||||||
|
margin-right: 16px;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
color: #666666;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 0 0 8px;
|
||||||
|
color: #46669D;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.right-item {
|
||||||
|
margin-right: 64px;
|
||||||
|
text-align: right;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 32px;
|
||||||
|
color: #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
|
||||||
|
i {
|
||||||
|
width: 6px;
|
||||||
|
height: 6px;
|
||||||
|
margin-right: 8px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #FA9D50;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
color: #666666;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.middle {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
|
||||||
|
.left {
|
||||||
|
width: 480px;
|
||||||
|
height: 360px;
|
||||||
|
padding: 0 16px 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
background: #FFFFFF;
|
||||||
|
box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15);
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
.comment-item {
|
||||||
|
padding: 16px 0;
|
||||||
|
border-bottom: 1px solid #EEEEEE;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
line-height: 1.2;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
color: #333333;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: normal;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #2266FF;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
i {
|
||||||
|
color: #999999;
|
||||||
|
font-size: 14px;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
height: 20px;
|
||||||
|
margin-right: 8px;
|
||||||
|
padding: 0 8px;
|
||||||
|
color: #2266FF;
|
||||||
|
font-size: 12px;
|
||||||
|
background: #E8EFFF;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
height: calc(100% - 56px);
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
flex: 1;
|
||||||
|
height: 360px;
|
||||||
|
margin-left: 20px;
|
||||||
|
padding: 0 16px 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
background: #FFFFFF;
|
||||||
|
box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15);
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
.dynamic-item {
|
||||||
|
display: flex;
|
||||||
|
padding: 16px 0;
|
||||||
|
border-bottom: 1px solid #EEEEEE;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
position: relative;
|
||||||
|
top: 8px;
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
margin-right: 8px;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: 2px solid #2266FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynamic-item__right {
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
color: #333;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #2266FF;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
color: #999999;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding: 0 16px 20px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15);
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
.list {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
width: 372px;
|
||||||
|
height: 132px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
margin-right: 16px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.02);
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid #EEEEEE;
|
||||||
|
|
||||||
|
// &:nth-of-type(3n) {
|
||||||
|
// margin-right: 0;
|
||||||
|
// }
|
||||||
|
|
||||||
|
.item-bottom {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 56px;
|
||||||
|
|
||||||
|
.item-bottom__item {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
&:first-child::after {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 50%;
|
||||||
|
z-index: 1;
|
||||||
|
width: 1px;
|
||||||
|
height: 24px;
|
||||||
|
background: #EEEEEE;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
content: ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
margin-right: 12px;
|
||||||
|
color: #999999;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
color: #333333;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-top {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 76px;
|
||||||
|
padding: 0 16px;
|
||||||
|
border-bottom: 1px solid #EEEEEE;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
color: #333333;
|
||||||
|
font-size: 17px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
color: #999999;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
BIN
project/xiushan/apps/AppConsole/assets/qd.png
Normal file
BIN
project/xiushan/apps/AppConsole/assets/qd.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
BIN
project/xiushan/apps/AppConsole/assets/right.png
Normal file
BIN
project/xiushan/apps/AppConsole/assets/right.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 346 B |
Reference in New Issue
Block a user