217 lines
9.8 KiB
Vue
217 lines
9.8 KiB
Vue
<!--
|
|
* @Author: gtz
|
|
* @Date: 2022-03-03 09:16:10
|
|
* @LastEditors: gtz
|
|
* @LastEditTime: 2022-03-18 16:29:33
|
|
* @Description: file content
|
|
* @FilePath: \mt-ck-wms-ui\src\views\dashboard\index.vue
|
|
-->
|
|
<template>
|
|
<div class="dashboard-container">
|
|
<el-card class="dashboard-main">
|
|
<el-row class="dashboard-title">
|
|
<div class="dashboard-header-line" />
|
|
<div class="dashboard-header-title">{{ $t('module.dashboard.title') }}</div>
|
|
</el-row>
|
|
<el-row class="dashboard-legend">
|
|
<div v-for="item in cassetteStatusList" :key="'cassette' + item.id" class="dashboard-legend-cassette">
|
|
<div class="dashboard-legend-cassette-cricle" :style="{background: item.color}" />
|
|
{{ item.name }}
|
|
</div>
|
|
|
|
|
<div v-for="item in portAttributeList" :key="'port' + item.id" class="dashboard-legend-port" :style="{background: item.color}">
|
|
{{ item.name }}
|
|
</div>
|
|
<div class="dashboard-legend-search">
|
|
<el-select v-model="current" size="mini" @change="handleChange">
|
|
<el-option v-for="item in totalPage" :key="'select' + item" :label="$t('module.dashboard.pageHeader') + item + $t('module.dashboard.pageFooter')" :value="item" />
|
|
</el-select>
|
|
<el-button type="primary" @click="refresh">{{ 'btn.refresh' | i18nFilter }}</el-button>
|
|
</div>
|
|
</el-row>
|
|
<el-row v-if="current * 80 < shelfVoList[0].rowVoList[0].portVoList.length" class="dashboard-layout" :gutter="12">
|
|
<el-col v-for="item in 4" :key="'shelfbox' + item" class="dashboard-layout-shelf-box" :span="6">
|
|
<el-row>
|
|
<el-col v-for="(i, index) in shelfVoList" :key="item + 'shelf' + i.id" :span="12" class="dashboard-layout-shelf">
|
|
<el-row>
|
|
<el-col v-for="z in i.rowVoList" :key="item + 'shelf' + i + 'row' + z.id" :span="12" class="dashboard-layout-row">
|
|
<div v-for="x in 20" :key="item + 'shelf' + i + 'row' + z + 'item' + x" class="dashboard-layout-item" :style="{background: portAttributeObj[z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute], cursor: z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute === '3' ? 'not-allowed' : 'pointer', color: z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute === '3' ? '#A2A8B5' : ''}" @click="handlePort(z, x)">
|
|
<div v-if="z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute !== '3'" class="dashboard-layout-item-cricle" :style="{background: z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].cassetteVoList[0] ? cassetteStatusObj[z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].cassetteVoList[0].status] : ''}" />
|
|
{{ z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute !== '3' ? z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].name : 'XXXX' }}
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
<div class="dashboard-layout-footer">
|
|
{{ $t(rowIndex[index]) + '(' + ((current - 1) * 4 + item) + ')' }}
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row v-else class="dashboard-layout" :gutter="12">
|
|
<el-col v-for="item in Math.ceil((shelfVoList[0].rowVoList[0].portVoList.length - (current - 1) * 80) / 20)" :key="'shelfbox' + item" class="dashboard-layout-shelf-box" :span="6">
|
|
<el-row>
|
|
<el-col v-for="(i, index) in shelfVoList" :key="item + 'shelf' + i.id" :span="12" class="dashboard-layout-shelf">
|
|
<el-row v-if="item < Math.ceil((shelfVoList[0].rowVoList[0].portVoList.length - (current - 1) * 80) / 20)">
|
|
<el-col v-for="z in i.rowVoList" :key="item + 'shelf' + i + 'row' + z.id" :span="12" class="dashboard-layout-row">
|
|
<div v-for="x in 20" :key="item + 'shelf' + i + 'row' + z + 'item' + x" class="dashboard-layout-item" :style="{background: portAttributeObj[z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute], cursor: z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute === '3' ? 'not-allowed' : 'pointer', color: z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute === '3' ? '#A2A8B5' : ''}" @click="handlePort(z, x)">
|
|
<div v-if="z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute !== '3'" class="dashboard-layout-item-cricle" :style="{background: z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].cassetteVoList[0] ? cassetteStatusObj[z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].cassetteVoList[0].status] : ''}" />
|
|
{{ z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute !== '3' ? z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].name : 'XXXX' }}
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row v-else>
|
|
<el-col v-for="z in i.rowVoList" :key="item + 'shelf' + i + 'row' + z.id" :span="12" class="dashboard-layout-row">
|
|
<div v-for="x in shelfVoList[0].rowVoList[0].portVoList.length - (item - 1) * 20 - (current - 1) * 80" :key="item + 'shelf' + i + 'row' + z + 'item' + x" class="dashboard-layout-item" :style="{background: portAttributeObj[z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute], cursor: z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute === '3' ? 'not-allowed' : 'pointer', color: z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute === '3' ? '#A2A8B5' : ''}" @click="handlePort(z, x)">
|
|
<div v-if="z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute !== '3'" class="dashboard-layout-item-cricle" :style="{background: z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].cassetteVoList[0] ? cassetteStatusObj[z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].cassetteVoList[0].status] : ''}" />
|
|
{{ z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].attribute !== '3' ? z.portVoList[(current - 1) * 80 + (item - 1) * 20 + (x - 1)].name : 'XXXX' }}
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
<div class="dashboard-layout-footer">
|
|
{{ $t(rowIndex[index]) + '(' + ((current - 1) * 4 + item) + ')' }}
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
</el-col>
|
|
</el-row>
|
|
</el-card>
|
|
<port-detail ref="addOrUpdate" />
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import testdata from './testdata'
|
|
import { getPortList, getPortDetail } from '@/api/dashboard'
|
|
import portDetail from './components/PortDetail'
|
|
|
|
export default {
|
|
name: 'Dashboard',
|
|
components: { portDetail },
|
|
data() {
|
|
return testdata
|
|
},
|
|
created() {
|
|
this.totalPage = Math.ceil(this.shelfVoList[0].rowVoList[0].portVoList.length / 80)
|
|
this.init()
|
|
},
|
|
methods: {
|
|
init() {
|
|
getPortList().then(res => {
|
|
this.shelfVoList = res.data[0].shelfVoList
|
|
this.totalPage = Math.ceil(this.shelfVoList[0].rowVoList[0].portVoList.length / 80)
|
|
})
|
|
},
|
|
handleChange(v) {
|
|
console.log(v)
|
|
},
|
|
handlePort(z, x) {
|
|
getPortDetail(z.portVoList[x - 1].id).then(res => {
|
|
this.addOrUpdateVisible = true
|
|
this.$nextTick(() => {
|
|
this.$refs.addOrUpdate.init({ ...(res.data), ...z.portVoList[x - 1] })
|
|
})
|
|
})
|
|
},
|
|
refresh() {
|
|
this.init()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.dashboard-container {
|
|
background: #F2F4F9;
|
|
min-height: calc(100vh - 134px);
|
|
overflow-x: scroll;
|
|
padding: 0 16px;
|
|
padding-top: 24px;
|
|
font-size: 14px;
|
|
.dashboard-main {
|
|
width: 100%;
|
|
min-width: 1380px;
|
|
background-color: #fff;
|
|
border-radius: 8px;
|
|
min-height: calc(100vh - 186px);
|
|
.dashboard-title {
|
|
.dashboard-header-line{
|
|
display: inline-block;
|
|
width: 4px;
|
|
height: 16px;
|
|
background: #0B58FF;
|
|
border-radius: 1px;
|
|
position: relative;
|
|
top: 2px;
|
|
margin-right: 4px;
|
|
}
|
|
.dashboard-header-title{
|
|
display: inline-block;
|
|
font-size: 16px;
|
|
font-family: PingFangSC-Regular, PingFang SC;
|
|
font-weight: 400;
|
|
color: #000000;
|
|
line-height: 16px;
|
|
}
|
|
}
|
|
.dashboard-legend {
|
|
margin-top: 20px;
|
|
.dashboard-legend-cassette {
|
|
display: inline-block;
|
|
margin-right: 24px;
|
|
.dashboard-legend-cassette-cricle {
|
|
display: inline-block;
|
|
width: 12px;
|
|
height: 12px;
|
|
border-radius: 6px;
|
|
}
|
|
}
|
|
.dashboard-legend-port {
|
|
display: inline-block;
|
|
height: 24px;
|
|
line-height: 24px;
|
|
border-radius: 4px;
|
|
padding: 0 16px;
|
|
margin-left: 24px;
|
|
}
|
|
.dashboard-legend-search {
|
|
float: right;
|
|
}
|
|
}
|
|
.dashboard-layout {
|
|
margin: 20px 0;
|
|
.dashboard-layout-shelf-box {
|
|
.dashboard-layout-footer {
|
|
text-align: center;
|
|
margin-top: 12px;
|
|
}
|
|
.dashboard-layout-shelf {
|
|
padding: 0 8px;
|
|
.dashboard-layout-row {
|
|
padding: 0 1px;
|
|
.dashboard-layout-item {
|
|
width: 100%;
|
|
text-align: center;
|
|
height: 32px;
|
|
box-shadow: 0px 3px 6px 0px rgba(166, 174, 190, 0.8);
|
|
border-radius: 2px 4px 4px 2px;
|
|
margin-bottom: 8px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
.dashboard-layout-item-cricle{
|
|
display: inline-block;
|
|
width: 12px;
|
|
height: 12px;
|
|
border-radius: 6px;
|
|
margin-right: 6px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|