194 lines
6.0 KiB
Vue
194 lines
6.0 KiB
Vue
<template>
|
||
<div :class="from" class="list-page">
|
||
<!-- 主页面 -->
|
||
<div class="main-list">
|
||
<!-- 顶部工具栏 -->
|
||
<div class="main-modal"></div>
|
||
<div class="main-container">
|
||
<div class="top-tools">
|
||
<div class="top-tool-left" style="min-width: 300px">
|
||
<slot name="top-tool-left"></slot>
|
||
<div v-if="showLayout.indexOf('searchInput') > -1" class="top-tool-search margin-r-20" :class="{'project-search alert-table asset-table endpoint-table': searchRight}">
|
||
<search-input ref="searchInput" :from="from" :inTransform="bottomBox.inTransform" :searchMsg="searchMsg" @search="search"></search-input>
|
||
</div>
|
||
</div>
|
||
<div :class="{'top-tool-main-right-to-left': bottomBox.showSubList}" class="top-tool-right">
|
||
<slot name="top-tool-right"></slot>
|
||
<el-dropdown
|
||
type="primary"
|
||
v-if="showLayout.indexOf('detailViewSet') > -1"
|
||
trigger="click"
|
||
@command="changeDetailType">
|
||
<button class="top-tool-btn table-column-setting"
|
||
type="button">
|
||
<i class="nz-icon nz-icon-detail-view" />
|
||
</button>
|
||
<el-dropdown-menu slot="dropdown" class="right-public-box-select-top right-public-box-dropdown-top">
|
||
<el-dropdown-item :command="'list'" :class="detailType === 'list' ? 'active' : ''">{{$t('asset.detail.list')}}</el-dropdown-item>
|
||
<el-dropdown-item :command="'view'" :class="detailType === 'view' ? 'active' : ''">{{$t('asset.detail.detail')}}</el-dropdown-item>
|
||
</el-dropdown-menu>
|
||
</el-dropdown>
|
||
</div>
|
||
<!-- 顶部分页组件,当打开底部上滑框时出现 -->
|
||
<!-- <div v-if="showLayout.indexOf('pagination') > -1" class="pagination-top pagination-top-hide display-none"></div>-->
|
||
</div>
|
||
<div :style="{ height: nzTableHeight }" class="nz-detail-view" :class="dataLength?'':'nz-detail-view-no-data'">
|
||
<div class="nz-detail-view-left" v-if="dataLength">
|
||
<slot name="nz-detail-view-list"></slot>
|
||
<div v-if="showLayout.indexOf('pagination') > -1" class="nz-detail-view-pagination">
|
||
<slot name="pagination"></slot>
|
||
</div>
|
||
</div>
|
||
<div v-else class="no-data">
|
||
<svg class="icon" aria-hidden="true">
|
||
<use xlink:href="#nz-icon-no-data-list"></use>
|
||
</svg>
|
||
<div class="table-no-data__title">No results found</div>
|
||
</div>
|
||
<div class="nz-detail-view-right" v-if="detailViewRightObj">
|
||
<detailViewRight
|
||
@getTableData = 'getTableData'
|
||
ref="detailViewRight"
|
||
v-if="detailViewRightObj"
|
||
:from="from"
|
||
:obj="detailViewRightObj"
|
||
:target-tab="'panelTab'"
|
||
/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { fromRoute } from '@/components/common/js/constants'
|
||
import { bottomBoxWindow } from '@/components/common/js/tools'
|
||
import detailViewRight from '@/components/common/detailView/view/detailViewRight'
|
||
|
||
export default {
|
||
name: 'nzDataList',
|
||
components: {
|
||
detailViewRight
|
||
},
|
||
props: {
|
||
from: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
tableTitle: {
|
||
type: Array
|
||
},
|
||
detailType: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
customTableTitle: {
|
||
type: Array
|
||
},
|
||
dataLength: {
|
||
type: Number,
|
||
default: 1
|
||
},
|
||
layout: {
|
||
type: Array,
|
||
default () { return [] }
|
||
},
|
||
searchMsg: {
|
||
type: Object
|
||
},
|
||
nzTableHeightOffset: Number,
|
||
searchRight: Boolean,
|
||
operationRecord: Boolean,
|
||
detailViewRightObj: {}
|
||
},
|
||
computed: {
|
||
nzTableHeight () {
|
||
if (this.nzTableHeightOffset) {
|
||
if (this.layout.indexOf('clickSearch') > -1) {
|
||
return `calc(100% - ${this.nzTableHeightOffset}px`
|
||
}
|
||
}
|
||
return ''
|
||
}
|
||
},
|
||
data () {
|
||
return {
|
||
fromRoute: fromRoute,
|
||
/* 二级页面相关 */
|
||
bottomBox: {
|
||
object: {},
|
||
mainResizeShow: true, // dom高度改变时是否展示|隐藏
|
||
subResizeShow: true,
|
||
isFullScreen: false, // 全屏状态
|
||
showSubList: false, // 是否显示二级列表
|
||
targetTab: '', // 显示二级列表中的哪个页签
|
||
inTransform: false // 搜索框相关,搜索条件下拉框是否在transform里
|
||
},
|
||
tools: {
|
||
toTopBtnTop: this.$tableHeight.toTopBtnTop, // to-top按钮的top属性
|
||
tableHover: false, // 控制滚动条和top按钮同时出现
|
||
showCustomTableTitle: false // 自定义列弹框是否显示
|
||
},
|
||
showLayout: []
|
||
}
|
||
},
|
||
methods: {
|
||
updateCustomTableTitle (custom) {
|
||
this.$emit('update:customTableTitle', custom)
|
||
},
|
||
// 全屏
|
||
fullScreen () {
|
||
const vm = this
|
||
bottomBoxWindow.fullScreen(vm)
|
||
},
|
||
// 退出全屏
|
||
exitFullScreen () {
|
||
const vm = this
|
||
bottomBoxWindow.exitFullScreen(vm)
|
||
},
|
||
// 鼠标拖动二级列表
|
||
listResize (e) {
|
||
const vm = this
|
||
bottomBoxWindow.listResize(vm, e)
|
||
},
|
||
showBottomBox (targetTab, row) {
|
||
this.bottomBox.targetTab = targetTab
|
||
this.bottomBox.object = JSON.parse(JSON.stringify(row))
|
||
this.bottomBox.showSubList = true
|
||
},
|
||
search (searchObj) {
|
||
this.$emit('search', searchObj)
|
||
},
|
||
getTableData () {
|
||
this.$emit('getTableData')
|
||
},
|
||
changeDetailType (item) {
|
||
this.$emit('changeDetailType', item)
|
||
}
|
||
},
|
||
watch: {
|
||
'bottomBox.showSubList': function (n) {
|
||
const vm = this
|
||
bottomBoxWindow.showSubListWatch(vm, n)
|
||
},
|
||
layout: {
|
||
immediate: true,
|
||
deep: true,
|
||
handler (n) {
|
||
this.showLayout = [...n]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
@import './detailView.scss';
|
||
.active{
|
||
color: #fa901c;
|
||
}
|
||
.nz-detail-view-no-data{
|
||
border-top: 1px solid #E7EAED;
|
||
}
|
||
</style>
|