江夏区图书馆自助查询机
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.
 
 
 
 
 

145 lines
4.3 KiB

<template>
<div class="ranking">
<h4 class="filter-header">热门书架</h4>
<ul class="ranking-list-bottom shelf-list">
<li v-for="(item,index) in shelfHot" :key="index" @click="handleShelfPosition(item)">
<span>{{ 'TOP'+ (index+1) }}</span>
<p class="title-item-only place-detail">{{ removeAreaPrefix(item.grid_name) }}</p>
</li>
</ul>
<el-dialog class="positionDialog" append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="handleCloseDialog" :visible="positionVisible" :title="positionTitle">
<div class="setting-dialog">
<ul class="book-detail">
<li><span>所属楼层</span>{{ positionContent.floorName }}</li>
<li><span>所属区域</span>{{ positionContent.regionName }}</li>
<li><span>所属书架</span>{{ positionContent.gridName }}</li>
</ul>
<div class="position-content">
<div class="position-left">
<h5>平面图</h5>
<div class="venue-preview">
<div v-show="currentMarkData && currentMarkData.signPoint ">
<canvas :id="`canvasPreview${currentMarkData && currentMarkData.id}hot`" :width="width" :height="height" />
</div>
<img v-if="currentMarkData && !currentMarkData.signPoint" :src="imageUrl" :onerror="defaultImg" alt="">
<img v-if="!currentMarkData" :src="imageUrl" :onerror="defaultImg" alt="">
</div>
</div>
<div class="position-right">
<h5>书架图</h5>
<div class="shelf-top" :style="rowStyle">
<p v-for="(item,index) in reversedRackNum" :key="index" :style="{width: `calc(${'100%/' + rackNum} - 4px )`}"><span>{{ item + '架' }}</span></p>
</div>
<ul class="data-shelf-row" :style="rowStyle">
<li
v-for="(cell,i) in booShelfGrid"
:key="i"
:class="{ active: i === cellIndex }"
class="data-shelf-cell"
:style="cellStyle"
>
<span class="cell-name">{{ removeLayerPrefix(cell.gridName) }}</span>
</li>
</ul>
</div>
</div>
</div>
<div class="book-bottom" @click="handleCloseDialog">
<span>关闭</span>
</div>
</el-dialog>
</div>
</template>
<script>
import { FetchInitHotShelfList } from '@/api/inquiryMachine'
import { positionCrud } from '../mixins/index.js'
export default {
name: 'Ranking',
components: {
},
mixins: [positionCrud],
props: {
},
data() {
return {
defaultImg: 'this.src="' + require('@/assets/images/default-img.png') + '"',
shelfHot: []
}
},
computed: {
},
created() {
this.getInitHotShelfList()
},
mounted() {
},
methods: {
removeLayerPrefix(gridNames) {
const index = gridNames.indexOf('面')
if (index !== -1) {
return gridNames.substring(index + 1)
}
return gridNames
},
handleShelfPosition(item) {
this.positionContent = {
'floorName': item.floorName,
'regionName': item.regionName,
'gridName': item.grid_name
}
this.handlePosition(item, 'hot')
},
removeAreaPrefix(gridNames) {
const index = gridNames.indexOf('区')
if (index !== -1) {
return gridNames.substring(index + 1)
}
return gridNames
},
getInitHotShelfList() {
const params = {
'fondsCode': this.libcode,
'size': 5
}
FetchInitHotShelfList(params).then(res => {
this.shelfHot = res
}).catch(() => {
this.$message.error('接口错误')
})
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/index.scss";
.shelf-list{
height: 434px;
}
::v-deep .el-dialog{
width: 930px;
border-radius: 16px;
background: #F8F8FD;
box-shadow: 0px 3px 20px 1px rgba(0,0,0,0.05);
.el-dialog__body{
padding: 20px 0 23px 0;
}
}
::v-deep .el-dialog__headerbtn{
display: none;
}
::v-deep .el-dialog__title{
font-weight: bold;
}
::v-deep .el-dialog__header{
border-bottom: 1px solid #EDEFF3;
}
.place-detail{
padding-right: 46px;
background-size: 29px 30px;
}
</style>