| | |
| | | <div>其他</div> |
| | | </div> |
| | | </div> |
| | | <div class="contentBox"> |
| | | <div class="chartsBox" v-if="showList"> |
| | | <div |
| | | class="contentBox" |
| | | element-loading-text="年谱加载中" |
| | | element-loading-spinner="el-icon-loading" |
| | | element-loading-background="rgba(0, 0, 0, 0)" |
| | | v-loading="!showList" |
| | | > |
| | | <div class="chartsBox"> |
| | | <div |
| | | class="chartsItemBox" |
| | | v-for="(item, index) in contentList" |
| | |
| | | class="gradchild" |
| | | v-for="(citem, cindex) in item.list" |
| | | :style="{ background: citem.color }" |
| | | @mouseover="showDetail(index, cindex, 1)" |
| | | @click.self="showDetail(index, cindex, 1, $event)" |
| | | :key="cindex" |
| | | > |
| | | <div class="detailDialog" v-if="citem.showDetail"> |
| | | <!-- <div class="dialogContent" @click="gotoDetail(citem)"> --> |
| | | <div |
| | | class="detailDialog" |
| | | :style="popupStyle" |
| | | v-if="citem.showChildDetail" |
| | | > |
| | | <div |
| | | class="closeBtn" |
| | | @click="closeDetail(index, cindex, 0)" |
| | | @click.stop="closeDetail(index, cindex, 0)" |
| | | > |
| | | <i class="el-icon-close"></i> |
| | | </div> |
| | | <floatingWindow :info="citem" /> |
| | | <!-- </div> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="item-circle" @click="showYearWindow(index, 1)"></div> |
| | | |
| | | <div class="item-text"> |
| | | <div class=""> |
| | | {{ item.name.split(",")[0] }} |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | import moment from "moment"; |
| | | import floatingWindow from "./floatingWindow.vue"; |
| | | import yearWindow from "./yearWindow.vue"; |
| | | import { nextTick } from "vue"; |
| | | |
| | | export default { |
| | | components: { |
| | |
| | | newspaper: "#8d77b3", |
| | | other: "#009f9f", |
| | | }, |
| | | popupStyle: { |
| | | left: "0", |
| | | top: "0", |
| | | }, |
| | | }; |
| | | }, |
| | | |
| | |
| | | }, |
| | | |
| | | methods: { |
| | | showYearWindow(item) { |
| | | showYearWindow(item, event) { |
| | | console.log(item, "item"); |
| | | for (let i = 0; i < this.contentList.length; i++) { |
| | | const item = this.contentList[i]; |
| | |
| | | const listData = await this.getYearResource(item); |
| | | if (listData.length > 0) { |
| | | this.$set(item, "list", listData); |
| | | for (let j = 0; j < listData.length; j++) { |
| | | const element = listData[j]; |
| | | this.$set(element, "showChildDetail", false); |
| | | } |
| | | console.log(item, "item"); |
| | | } |
| | | } |
| | | |
| | | console.log(this.contentList, "this.contentList"); |
| | | this.contentList = res.datas.reverse(); |
| | | this.contentList = res.datas; |
| | | this.showList = true; |
| | | }); |
| | | }, |
| | |
| | | const filterList = yearDataList.datas.filter((item) => { |
| | | return item.cmsItemType != "chronology" && item.cmsItemType != "AWARD"; |
| | | }); |
| | | |
| | | if (filterList && filterList.length > 0) { |
| | | for (let i = 0; i < filterList.length; i++) { |
| | | const item = filterList[i]; |
| | |
| | | const requestCtx = |
| | | this.config.requestCtx + `/file/api/ApiDownload?md5=${item.file}`; |
| | | this.$set(item, "fileLink", requestCtx); |
| | | console.log(item.fileLink, "item.fileLink"); |
| | | } |
| | | this.$set(item, "showDetail", false); |
| | | this.$set(item, "color", this.colorList[item.cmsItemType]); |
| | | } |
| | | } |
| | | |
| | | if (filterList.length > 0) { |
| | | console.log(filterList, "filterList"); |
| | | } |
| | | return filterList; |
| | | }, |
| | | closeDetail(index, cindex, type) { |
| | | console.log(index, cindex, type); |
| | | for (let i = 0; i < this.contentList.length; i++) { |
| | | const item = this.contentList[i]; |
| | | if (item && item.length > 0) { |
| | | if (item && item.list?.length > 0) { |
| | | for (let j = 0; j < item.list.length; j++) { |
| | | const citem = item.list[j]; |
| | | this.$set(citem, "showDetail", false); |
| | | this.$set(citem, "showChildDetail", false); |
| | | } |
| | | } |
| | | } |
| | | this.contentList[index].list[cindex].showDetail = false; |
| | | |
| | | console.log( |
| | | this.contentList[index].list, |
| | | "this.contentList[index].list[cindex]" |
| | | ); |
| | | }, |
| | | showDetail(index, cindex, type) { |
| | | showDetail(index, cindex, type, event) { |
| | | const rect = event.target.getBoundingClientRect(); |
| | | const screenWidth = window.innerWidth; |
| | | const popupWidth = 542; // 假设弹框宽度为200px |
| | | // 判断触发元素位置 |
| | | if (rect.left + rect.width / 2 < screenWidth / 2) { |
| | | // 左侧显示弹框在右侧 |
| | | this.popupStyle = { |
| | | left: `${rect.right}px`, |
| | | top: `${rect.bottom - 150}px`, |
| | | }; |
| | | } else { |
| | | // 右侧显示弹框在左侧 |
| | | this.popupStyle = { |
| | | left: `${rect.left - popupWidth}px`, |
| | | top: `${rect.bottom - 150}px`, |
| | | }; |
| | | } |
| | | console.log(this.popupStyle.top, "this.top"); |
| | | console.log(this.popupStyle.left, "this.left"); |
| | | // if (rect.left - popupWidth < 0) { |
| | | // // 左侧空间不足时强制右侧显示 |
| | | // this.popupStyle.left = `${rect.right}px`; |
| | | // } else if (rect.right + popupWidth > screenWidth) { |
| | | // // 右侧空间不足时强制左侧显示 |
| | | // this.popupStyle.left = `${rect.left - popupWidth}px`; |
| | | // } |
| | | for (let i = 0; i < this.contentList.length; i++) { |
| | | const item = this.contentList[i]; |
| | | if (item && item.length > 0) { |
| | | if (item && item.list?.length > 0) { |
| | | for (let j = 0; j < item.list.length; j++) { |
| | | const citem = item.list[j]; |
| | | this.$set(citem, "showDetail", false); |
| | | if (citem.showChildDetail) { |
| | | this.contentList[i].list[j].showDetail = false; |
| | | citem.showChildDetail = false; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (this.contentList[index].list[cindex].type) { |
| | | this.contentList[index].list[cindex].showDetail = true; |
| | | } else { |
| | | this.contentList[index].list[cindex].showDetail = false; |
| | | this.contentList[index].list[cindex].showChildDetail = true; |
| | | } |
| | | }, |
| | | }, |
| | |
| | | display: flex; |
| | | align-items: end; |
| | | overflow: auto; |
| | | |
| | | ::v-deep .el-loading-spinner .el-loading-text { |
| | | font-size: 14px; |
| | | color: #937950; |
| | | } |
| | | |
| | | .chartsBox { |
| | | white-space: nowrap; |
| | | padding: 0 80px; |
| | |
| | | // } |
| | | /* 对于WebKit浏览器和Blink引擎(如Chrome, Opera) */ |
| | | ::-webkit-scrollbar { |
| | | width: 16px; /* 滚动条的宽度 */ |
| | | width: 4px; /* 滚动条的宽度 */ |
| | | height: 16px; /* 滚动条的高度 */ |
| | | } |
| | | |
| | |
| | | |
| | | ::-webkit-scrollbar-thumb { |
| | | background: #b9a587; /* 滚动条滑块的颜色 */ |
| | | border-radius: 16px; /* 滚动条滑块的圆角 */ |
| | | border-radius: 2px; /* 滚动条滑块的圆角 */ |
| | | width: 4px; |
| | | } |
| | | |
| | | ::-webkit-scrollbar-thumb:hover { |
| | |
| | | position: relative; |
| | | } |
| | | |
| | | // .gradchild :hover { |
| | | // transform: scale(1.1); |
| | | // z-index: 999; |
| | | // } |
| | | |
| | | /* 重置子元素的样式 */ |
| | | // .gradchild:hover .detailDialog { |
| | | // transform: scale(1); |
| | | // z-index: 999; |
| | | // } |
| | | .item-circle :hover ::before { |
| | | background-color: #b9a587 !important; |
| | | } |
| | | .item-circle { |
| | | width: 100%; |
| | | height: 20px; |
| | |
| | | align-items: center; |
| | | } |
| | | .detailDialog { |
| | | position: absolute; |
| | | // left: -54px; |
| | | // bottom: 50px; |
| | | top: -550%; |
| | | width: 400px; |
| | | position: fixed; |
| | | width: 524px; |
| | | z-index: 9999; |
| | | cursor: pointer; |
| | | background: #fff; |
| | |
| | | border: 2px solid #cbbeaa; |
| | | box-shadow: 2px 2px 4px 1px rgba(0, 0, 0, 0.5); |
| | | } |
| | | .detailDialog .dialogContent { |
| | | width: 100%; |
| | | height: 100%; |
| | | background-color: #fff; |
| | | position: relative; |
| | | padding: 5px; |
| | | z-index: 20; |
| | | box-sizing: border-box; |
| | | } |
| | | // .detailDialog .dialogContent { |
| | | // width: 100%; |
| | | // height: 100%; |
| | | // background-color: #fff; |
| | | // position: relative; |
| | | // padding: 5px; |
| | | // z-index: 20; |
| | | // box-sizing: border-box; |
| | | // } |
| | | .closeBtn { |
| | | position: absolute; |
| | | width: 20px; |
| | |
| | | right: 5px; |
| | | z-index: 999; |
| | | } |
| | | ::v-deep .el-loading-spinner { |
| | | color: #937950 !important; |
| | | } |
| | | </style> |