城阳pc工作端前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

595 lines
17 KiB

<template>
<div class="analyse-container">
<div class="analyse-wr list-wr">
<div class="analys-col">
<div class="analys-family">
<div class="family-title">(家属)</div>
<div v-for="(item, index) in userList"
:key="index"
class="family-item"
@click="handleUser(item)">{{item.icUserName}}</div>
<!-- <div class="family-item">王亚男哈</div>
<div class="family-item">王亚男</div>
<div class="family-item">王亚男哈</div>
<div class="family-item">王亚</div> -->
</div>
</div>
<div class="analys-col">
<img class="analys-arrow"
src="../../../../assets/img/shuju/measure/zuo@2x.png" />
</div>
<div class="analys-col">
<div class="analys-person">
<div class="personal-name">{{userName}}</div>
<div class="personal-tips">(案件居民)</div>
</div>
</div>
<template v-if="hasEvent">
<div class="analys-col analys-col-posi">
<img class="analys-up"
src="../../../../assets/img/shuju/measure/up-right.png" />
<img class="analys-up analys-down"
src="../../../../assets/img/shuju/measure/down-right.png" />
</div>
<div class="analys-col">
<div class="cate-list cate-list-more">
<div class="cate-row">
<div class="analys-col">
<div class="analys-cate"
@click="handleTabs('group')">
<div class="label">{{ singleTitle }}</div>
<div class="tips">(反应渠道)</div>
<div class="icon">
<img src="../../../../assets/img/shuju/measure/gantanhao.png" />
</div>
</div>
</div>
<div v-if="sourceTab === 'group'"
class="analys-col">
<img class="analys-arrow"
src="../../../../assets/img/shuju/measure/you@2x.png" />
</div>
</div>
<div class="cate-row">
<div class="analys-col">
<div class="analys-cate"
@click="handleTabs('event')">
<div class="label">{{ moreTitle }}</div>
<div class="tips">(反应渠道)</div>
<div class="icon">
<img src="../../../../assets/img/shuju/measure/gantanhao.png" />
</div>
</div>
</div>
<div v-if="sourceTab === 'event'"
class="analys-col">
<img class="analys-arrow"
src="../../../../assets/img/shuju/measure/you@2x.png" />
</div>
</div>
</div>
</div>
<div class="analys-col analys-col-wr analys-col-more list-wr"
id="scroll-wr">
<div class="cate-list cate-list-child" :style="'padding-top:' + computedPd(tempList)">
<div v-for="(item, index) in tempList"
:key="index"
class="cate-row">
<div class="cate-col">
<div class="analys-cate">
<div class="label">{{item.categoryName}}</div>
<div class="tips">(同类案件)</div>
<div class="icon"
@click="handleShow(item)">
<img src="../../../../assets/img/shuju/measure/gantanhao.png" />
</div>
</div>
</div>
<div class="cate-col cate-col-arrow">
<img v-show="item.showItem"
class="analys-arrow"
src="../../../../assets/img/shuju/measure/you@2x.png" />
</div>
<div class="cate-col cate-col-w100">
<div class="cate-list-w0"
:class="item.showItem && 'cate-list-w100'">
<div class="list list-wr">
<template v-if="item.projectList && item.projectList.length > 0">
<div v-for="(n, i) in item.projectList"
:key="i"
class="item"
@click="handleProject(n)">
<div class="item-status"
:class="'item-status-'+n.status">{{filterStatus(n.status)}}</div>
<div class="item-content">{{n.title}}</div>
</div>
</template>
<div v-else class="no-data">暂无数据</div>
<!-- <div class="item">
<div class="item-status">已结案</div>
<div class="item-content">合肥路与安宁路交合肥路与安宁路交</div>
</div> -->
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<template v-else>
<div class="analys-col">
<img class="analys-arrow"
src="../../../../assets/img/shuju/measure/you@2x.png" />
</div>
<div class="analys-col">
<div class="analys-cate">
<div class="label">{{ singleTitle }}</div>
<div class="tips">(反应渠道)</div>
<!-- <div class="icon">
<img src="../../../../assets/img/shuju/measure/gantanhao.png" />
</div> -->
</div>
</div>
<div class="analys-col">
<img v-if="tempList.length > 1"
class="analys-up"
src="../../../../assets/img/shuju/measure/up-right.png" />
<img v-if="tempList.length != 2"
class="analys-arrow"
src="../../../../assets/img/shuju/measure/you@2x.png" />
<img v-if="tempList.length > 1"
class="analys-up analys-down"
src="../../../../assets/img/shuju/measure/down-right.png" />
</div>
<div class="analys-col list-wr"
:class="tempList.length > 2 && 'analys-col-wr' || 'analys-single'"
:style="'padding-top:' + (tempList.length - 3) * 190 + 'px;'">
<div class="cate-list">
<div v-for="(item, index) in tempList"
:key="index"
class="cate-row">
<div class="cate-col">
<div class="analys-cate">
<div class="label">{{item.categoryName}}</div>
<div class="tips">(同类案件)</div>
<div class="icon"
@click="handleShow(item)">
<img src="../../../../assets/img/shuju/measure/gantanhao.png" />
</div>
</div>
</div>
<div class="cate-col cate-col-arrow">
<img v-show="item.showItem"
class="analys-arrow"
src="../../../../assets/img/shuju/measure/you@2x.png" />
</div>
<div class="cate-col cate-col-w100">
<div class="cate-list-w0"
:class="item.showItem && 'cate-list-w100'">
<div class="list list-wr">
<template v-if="item.projectList && item.projectList.length > 0">
<div v-for="(n, i) in item.projectList"
:key="i"
class="item"
@click="handleProject(n)">
<div class="item-status"
:class="'item-status-'+n.status">
{{ n.statusName || filterStatus(n.status)}}
</div>
<div class="item-content">{{n.title}}</div>
</div>
</template>
<div v-else class="no-data">暂无数据</div>
<!-- <div class="item">
<div class="item-status">已结案</div>
<div class="item-content">合肥路与安宁路交合肥路与安宁路交</div>
</div> -->
</div>
</div>
</div>
</div>
</div>
</div>
</template>
</div>
</div>
</template>
<script>
// singleList: [
// {
// categoryName: '辨明服务',
// categoryCode: '1',
// showItem: true,
// projectList: [
// {
// title: '不知道写了什么哈哈哈',
// status: 'closed',
// statusName: '',
// projectId: '1'
// }
// ]
// }
// ]
export default {
name: 'Analyse',
props: {
hasEvent: {
type: Boolean, // 楼院小组和事件上报同时存在时 为 true
default: false
},
moreTitle: String, // hasEvent 为true 时 传入
moreList: Array, // hasEvent 为true 时 传入
singleTitle: { // 默认,必传 单个来源或多个来源
type: String,
default: '楼院小组'
},
userList: Array, // 默认,必传 单个来源或多个来源
userName: String, // 默认,必传 单个来源或多个来源
singleList: Array, // 默认,必传 单个来源或多个来源
},
data () {
return {
sourceTab: 'group',
tempList: []
}
},
created () {
this.tempList = [...this.singleList]
},
methods: {
filterStatus (status) {
const statusObj = {
pending: '待处理',
closed: '已结案'
}
return statusObj[status]
},
computedPd(list) {
if (this.sourceTab == 'group') return '60px'
if (list.length == 1) return '330px'
else if (list.length == 2) return '240px'
else return '60px'
},
handleTabs (type) {
if (type === 'group') this.tempList = [...this.singleList]
else if (type === 'event') this.tempList = [...this.moreList]
this.sourceTab = type
const _dom = document.getElementById('scroll-wr')
_dom.scrollTop = 0
this.computedPd(this.tempList)
},
handleProject (item) {
this.$emit('project', item)
},
handleUser (item) {
this.$emit('user', item)
},
handleShow (item) {
item.showItem = !item.showItem
}
}
}
</script>
<style lang="scss" scoped>
.analyse-container {
color: #fff;
.analyse-wr {
display: flex;
align-items: center;
width: 100%;
max-height: 560px;
box-sizing: border-box;
overflow: auto;
.analys-col {
position: relative;
cursor: pointer;
.analys-family {
text-align: center;
.family-title {
margin-bottom: 8px;
}
.family-item {
width: 76px;
box-sizing: border-box;
margin-bottom: 28px;
padding: 8px 0;
font-size: 14px;
color: #fff;
text-align: center;
background: rgba(255, 255, 255, 0);
border: 1px solid #1257c9;
border-radius: 2px;
box-shadow: 0 0 5px 2px rgba(18, 87, 201, 1) inset;
}
}
.analys-up {
display: block;
width: 64px;
height: 99px;
box-sizing: border-box;
margin-bottom: 85px;
}
.analys-down {
margin-top: 85px;
margin-bottom: 0;
}
.analys-arrow {
display: block;
width: 32px;
height: 18px;
box-sizing: border-box;
margin: 0 6px;
}
.analys-person {
width: 154px;
height: 152px;
box-sizing: border-box;
padding-top: 60px;
color: #fff;
text-align: center;
background: url("../../../../assets/img/shuju/measure/zhuhu@2x.png")
no-repeat center;
background-size: cover;
.personal-name {
font-size: 18px;
font-weight: 500;
}
.personal-tips {
margin-top: 6px;
font-size: 14px;
}
}
.analys-cate {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
width: 120px;
min-height: 64px;
box-sizing: border-box;
padding: 14px 20px;
text-align: center;
color: #fff;
cursor: pointer;
background: rgba(255, 255, 255, 0);
border: 1px solid #1257c9;
border-radius: 4px;
box-shadow: 1px 1px 10px 5px rgba(18, 87, 201, 1) inset;
.label {
font-size: 18px;
font-weight: 500;
}
.tips {
margin-top: 6px;
font-size: 14px;
}
.icon {
position: absolute;
right: 4px;
bottom: 4px;
width: 12px;
height: 12px;
img {
display: block;
width: 100%;
height: 100%;
}
}
}
.cate-list {
// padding-top: 200px;
// display: flex;
// flex-direction: column;
// justify-content: space-between;
.cate-row {
display: flex;
align-items: center;
margin-bottom: 20px;
// margin-top: 0;
.cate-col-arrow {
width: 32px;
height: 18px;
// box-sizing: border-box;
margin: 0 6px;
.analys-arrow {
display: block;
width: 32px;
height: 100%;
box-sizing: border-box;
margin: 0 auto;
}
}
.cate-col-w100 {
width: 230px;
.cate-list-w0 {
width: 0;
transition: width 0.2s;
overflow: hidden;
// border: 0;
// padding: 0;
}
.cate-list-w100 {
width: 230px;
// padding: 4px 14px 10px;
// // background: rgba(255, 255, 255, 0);
// border: 1px solid #1257C9;
// overflow: auto;
transition: width 0.2s;
}
}
}
}
.cate-list-more {
// padding-top: 300px;
.cate-row {
margin-bottom: 200px;
// margin-top: 0;
}
.cate-row:last-child {
margin-bottom: 0;
}
}
.cate-list-child {
padding-top: 60px;
}
.list {
width: 230px;
height: 165px;
box-sizing: border-box;
padding: 4px 14px 10px;
background: rgba(255, 255, 255, 0);
border: 1px solid #1257c9;
overflow: auto;
border-radius: 4px;
box-shadow: 1px 1px 10px 5px rgba(18, 87, 201, 1) inset;
.item {
display: flex;
align-items: center;
width: 100%;
box-sizing: border-box;
padding: 8px 0;
color: #fff;
border-bottom: 1px dashed rgba(131, 152, 217, 1);
.item-status {
min-width: 50px;
// height: 15px;
box-sizing: border-box;
margin-right: 8px;
padding: 4px 0 2px;
font-size: 10px;
text-align: center;
// line-height: 15px;
background: #0c5cfe;
border-radius: 2px;
&-pending,
&-canceled {
background: rgba(224, 84, 0, 1);
}
&-assigned,
&-have_order {
background: rgba(9, 163, 125, 1);
}
}
.item-content {
font-size: 14px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
}
}
}
.analys-col-wr {
height: 100%;
box-sizing: border-box;
padding-right: 30px;
overflow: auto;
}
.analys-col-more {
height: 560px;
}
.analys-single {
.list {
height: 235px;
}
.cate-list {
.cate-row {
margin-bottom: 0;
}
}
}
.analys-col-posi {
// .analys-up, .analys-down {
// position: absolute;
// }
.analys-up {
// top: -200px;
// left: -30px;
// margin-bottom: 160px;
}
.analys-down {
// margin-top: 160px;
// margin-bottom: 0;
// top: unset;
// bottom: -200px;
// left: -30px;
}
}
}
}
.no-data {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
color: #fff;
text-align: center;
line-height: 100%;
}
.pad10 {
padding-top: 10px;
}
.list-wr::-webkit-scrollbar {
width: 8px;
// background: linear-gradient(270deg, #0063FE, #0095FF);
}
.list-wr::-webkit-scrollbar-corner,
/* 滚动条角落 */
.list-wr::-webkit-scrollbar-thumb,
.list-wr::-webkit-scrollbar-track {
/*滚动条的轨道*/
border-radius: 4px;
}
.list-wr::-webkit-scrollbar-corner,
.list-wr::-webkit-scrollbar-track {
/* 滚动条轨道 */
background: rgba(12, 129, 254, 0.24);
// box-shadow: inset 0 0 1px rgba(180, 160, 120, 0.5);
}
.list-wr::-webkit-scrollbar-thumb {
/* 滚动条手柄 */
background: linear-gradient(270deg, #0063fe, #0095ff);
}
</style>