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.

404 lines
10 KiB

3 years ago
<template>
<div class="component-container time-line">
<!-- 类型筛查 -->
<div class="type-screen">
<el-collapse v-model="activeNames" @change="collapseChange">
<el-collapse-item name="1">
<template slot="title">
<!-- 头部 -->
<div class="type-screen-head">
<div class="type-screen-left">
<span class="type-screen-left-title">类型筛查</span>
<img :src="require('@/assets/img/type_screen_bgc_l.png')" alt="">
</div>
<div
class="type-screen-right"
@mouseover="IsTypeScreenRightShow=true"
@mouseout="IsTypeScreenRightShow=false"
@click="typeScreenClick"
>
<svg-icon icon-class="icon-screen" />
<img
class="type-screen-right-img"
:src="require('@/assets/img/type_screen_bgc_r.png')"
alt=""
>
</div>
</div>
</template>
<!-- 类型内容 -->
<div class="type-screen-content">
<el-checkbox-group v-model="typeScreenCheckArr">
<el-checkbox
v-for="(item,index) in checkboxLableArr"
:key="index"
:label="item"
@change="checkboxChange"
/>
</el-checkbox-group>
</div>
</el-collapse-item>
</el-collapse>
</div>
<div v-if="timeAxisData.length>0" :class="activeNames==1 ? 'scroll-father-open':'scroll-father-close'">
<el-scrollbar class="scrollbar-wrapper" style="height:100%;padding-bottom: 30px">
<div v-for="(item,index) in timeAxisData" :key="index">
<!-- 年份 -->
<div class="time-line-year">
<div class="time-line-item-tail" />
<div class="time-line-item-date">
<div class="time-line-background" />
<div class="time-line-title">{{ item.year }}</div>
</div>
</div>
<div v-for="(itemData, itemDataIndex) in item.data" :key="itemDataIndex" class="time-line-item">
<!-- 节点 -->
<div class="time-line-item-node">
<i v-show="false" class="node" />
<div class="node" :class="itemCurrentIndex == itemDataIndex && currentIndex == index ? 'nodeActive' : ''" />
</div>
<!-- 节点尾 -->
<div class="time-line-item-tail" />
<!-- 内容 -->
<div class="time-line-item-wrapper">
<!-- 抬头 -->
<div class="time-line-item-wrapper-title">
<span class="title">
<span class="title-time">{{ itemData.date|convertDate }}</span>
</span>
</div>
<!-- 内容 -->
<div
v-for="(item2, itemListIndex) in itemData.itemList"
:key="itemListIndex"
class="time-line-item-wrapper-item"
:class="itemCurrentIndex == itemDataIndex && currentIndex == index && itemListCurrentIndex==itemListIndex ? 'activeTitle' : ''"
@click="sclectMentItem(item2,index,itemDataIndex,itemListIndex)"
>
<img :src="require('@/assets/img/icon-timeZ.png')" alt="">
<span class="time-line-item-wrapper-item-title">{{ item2.type }}
</span>
</div>
</div>
</div>
</div>
</el-scrollbar>
</div>
<div v-else class="empty"></div>
</div>
</template>
<script>
export default {
name: 'TimeLine',
props: {
timeAxisData: {
type: Array,
required: true
}
},
data() {
return {
IsTypeScreenRightShow: false,
drgsName: window.localStorage.getItem('identity'),
typeScreenCheckArr: ['诊断', '手术', '用药', '住院', '出院', '检查', '随访'],
checkboxLableArr: ['诊断', '手术', '用药', '住院', '出院', '检查', '随访'],
currentIndex: 0,
itemCurrentIndex: 0,
itemListCurrentIndex: 0,
activeNames: ['1']
}
},
watch: {
timeAxisData(val) {
this.timeAxisData = val
}
},
methods: {
collapseChange(e) {
},
// 点击日期
selectMenu(index, itemDataIndex) {
},
// 点击子节点
sclectMentItem(item, index, itemDataIndex, itemListIndex) {
console.log('123', item)
this.currentIndex = index
this.itemCurrentIndex = itemDataIndex
this.itemListCurrentIndex = itemListIndex
// 1是随访 0不是随访
item.isVisit === '1' ? this.$listeners.getVisitRecordInfo(item) : this.$listeners.getTimeAxisNodeInfo(item, item.date, item.type)
},
// 点击类型筛选
typeScreenClick() {
},
checkboxChange() {
this.$listeners.getTimeAxisData(this.typeScreenCheckArr)
},
setCheckArr() {
this.typeScreenCheckArr = JSON.parse(JSON.stringify(this.checkboxLableArr))
}
}
}
</script>
<style lang="scss" scoped>
$color: #fff;
// $containerBgColor: #f8fafa;
$containerBgColor: #0c1016;
$borderColor: #424242;
$paddingRight: 0px;
.empty {
color: #000;
}
.time-line {
margin: 0;
font-size: 14px;
color: $color;
background-color: $containerBgColor;
.time-line-item-wrapper-item-title{
vertical-align: middle;
margin-left: 5px;
}
.type-screen-head {
display: flex;
justify-content: space-between;
.type-screen-left {
position: relative;
width: 193px;
height: 32px;
line-height: 32px;
.type-screen-left-title {
position: absolute;
color: #fff;
z-index:99;
padding-left: 12px;
}
img {
position: absolute;
height: 32px;
width: 165px;
}
}
.type-screen-right {
position: relative;
.svg-icon {
width: 16px;
height: 16px;
position: absolute;
left: -25px;
top: 8px;
z-index: 99;
}
.type-screen-right-img {
width: 50px;
height: 32px;
position: absolute;
left: -50px;
}
}
}
.type-screen-content {
padding-left: 10px;
margin-top: 8px;
.el-checkbox {
margin-right: 10px;
margin-bottom: 10px;
}
}
.time-line-year {
position: relative;
height: 50px;
.time-line-item-date {
position: relative;
}
// 年份
.time-line-background {
position: absolute;
top: 26px;
left: -20px;
padding-left: 15px;
// margin-left: -10px;
// margin-right: -$paddingRight;
width: 93px;
height: 32px;
transform: skew(-30deg);
line-height: 32px;
font-size: 16px;
font-style: oblique;
font-family: fantasy;
background: linear-gradient(
210deg,
rgba(0, 70, 251, 0.6) 0%,
rgba(49, 107, 255, 0.1) 100%
);
letter-spacing: 1px;
}
.time-line-title {
position: absolute;
top: 28px;
left: 10px;
font-size: 20px;
font-weight: bold;
font-family: Roboto;
font-style: italic;
}
}
.time-line-item {
position: relative;
padding-bottom: 10px;
// 节点
.time-line-item-node {
z-index: 3;
display: inline-block;
position: absolute;
left: 16px;
top: 25px;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
width: 16px;
height: 15px;
background-color: #fff;
border-color: $borderColor;
.node {
width: 6px;
height: 6px;
border-radius: 50%;
// background-color: #959595;
}
}
// 节点尾(竖线)
.time-line-item-tail {
}
.time-line-item-wrapper:hover {
color: #fff;
opacity: 0.6;
}
// wrapper
.time-line-item-wrapper {
position: relative;
padding-left: 80px;
top: 20px;
left: -40px;
z-index:999;
// 抬头
.time-line-item-wrapper-title {
color: $color;
.title-date {
display: inline-block;
padding-right: 30px;
margin-left: -70px;
color: #ecb36d;
}
.title {
display: inline-block;
color: #fff;
cursor: pointer;
border-radius: 3px;
font-size: 16px;
.title-time {
padding-right: 16px;
color: #fff;
letter-spacing: 1px;
}
}
}
// 内容
.time-line-item-wrapper-item {
cursor: pointer;
margin: 5px 0 0 8px;
padding: 6px 0px;
background: rgba(255, 255, 255, 0.2);
color: #fff;
width: 138px;
padding-left: 15px;
letter-spacing: .2em;
border-radius: 3px;
font-size: 14px;
.svg-icon {
margin-right: 8px;
}
}
.activeTitle {
color: #fff;
background: #1c69dc;
}
}
.transitionCon {
position: relative;
}
}
}
// 节点尾(竖线)
.time-line-item-tail {
position: absolute;
left: 23px;
top: 4px;
height: 100%;
border-left: 3px solid;
border-color: rgba(255, 255, 255, 0.2);
}
.nodeActive {
background-color: #3e9fff !important;
}
// .time-line .time-line-item:last-child .time-line-item-tail {
// display: none;
// }
.scroll-father-close {
height: calc(100% - 40px);
}
.scroll-father-open {
height: calc(100% - 148px);
}
</style>
<style lang="scss">
.time-line {
overflow: hidden;
.el-collapse {
border: none;
// margin-bottom: 10px;
}
.el-collapse-item__header {
background-color: rgba(0, 0, 0, 0);
border: none;
display: block;
height: 32px;
}
.el-icon-arrow-right:before {
content: "";
}
.el-collapse-item__wrap {
background-color: rgba(0, 0, 0, 0);
border: none;
}
.el-collapse-item__content {
padding-bottom: 0;
line-height:0;
}
.el-scrollbar__wrap {
// padding-bottom: 100px;
}
.el-scrollbar__bar {
right: 6px;
}
}
</style>