Merge branch 'master-dev' into feature-Beta-dev-renpy
This commit is contained in:
commit
ed159cbb0b
BIN
src/assets/images/station-operation/icon-route-active.png
Normal file
BIN
src/assets/images/station-operation/icon-route-active.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
BIN
src/assets/images/station-operation/icon-route.png
Normal file
BIN
src/assets/images/station-operation/icon-route.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
|
@ -32,7 +32,9 @@ const sample = {
|
||||||
|
|
||||||
REMOVE_SAMPLE_DATA: (state, inputFileName) => {
|
REMOVE_SAMPLE_DATA: (state, inputFileName) => {
|
||||||
const findIndex = state.sampleList.findIndex(item => item.inputFileName == inputFileName)
|
const findIndex = state.sampleList.findIndex(item => item.inputFileName == inputFileName)
|
||||||
|
if(-1 !== findIndex) {
|
||||||
state.sampleList.splice(findIndex, 1)
|
state.sampleList.splice(findIndex, 1)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
CLEAR_SAMPLE_DATA: (state) => {
|
CLEAR_SAMPLE_DATA: (state) => {
|
||||||
|
|
|
@ -111,7 +111,7 @@
|
||||||
<img src="@/assets/images/abnormalAlarm/email-split.png" alt="" />
|
<img src="@/assets/images/abnormalAlarm/email-split.png" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="email-top-content-li-right">
|
<div class="email-top-content-li-right">
|
||||||
<div class="email-top-content-li-right-title">An Unread Mail</div>
|
<div class="email-top-content-li-right-title">Unread Mail</div>
|
||||||
<div class="email-top-content-li-right-val" style="color: #ade6ee; font-size: 26px; margin-top: 36px">
|
<div class="email-top-content-li-right-val" style="color: #ade6ee; font-size: 26px; margin-top: 36px">
|
||||||
{{ emailSpace.unreadMsg || 0 }}
|
{{ emailSpace.unreadMsg || 0 }}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -7,17 +7,17 @@
|
||||||
Detailed-Information
|
Detailed-Information
|
||||||
<beta-gamma-detailed-infomation slot="content" :data="spectrumData" />
|
<beta-gamma-detailed-infomation slot="content" :data="spectrumData" />
|
||||||
</pop-over-with-icon>
|
</pop-over-with-icon>
|
||||||
<pop-over-with-icon placement="bottomLeft">
|
|
||||||
QC Flags
|
|
||||||
<beta-gamma-qc-flags slot="content" :data="qcFlags" @click="handleQcFlagClick" />
|
|
||||||
</pop-over-with-icon>
|
|
||||||
<custom-select
|
<custom-select
|
||||||
v-model="spectraType"
|
v-model="spectraType"
|
||||||
:options="SampleType"
|
:options="SampleType"
|
||||||
@change="changeChartByType"
|
@change="changeChartByType"
|
||||||
style="width: 246px"
|
style="width: 154px"
|
||||||
class="sample-select"
|
class="sample-select"
|
||||||
></custom-select>
|
></custom-select>
|
||||||
|
<pop-over-with-icon placement="right" v-model="qcFlagsVisible">
|
||||||
|
QC Flags
|
||||||
|
<beta-gamma-qc-flags slot="content" :data="qcFlags" @click="handleQcFlagClick" />
|
||||||
|
</pop-over-with-icon>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 二级交互栏结束 -->
|
<!-- 二级交互栏结束 -->
|
||||||
|
@ -161,6 +161,8 @@ const SampleType = [
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const sortList = ['Xe131m', 'Xe133', 'Xe133m', 'Xe135']
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
BetaGammaChartContainer,
|
BetaGammaChartContainer,
|
||||||
|
@ -226,14 +228,24 @@ export default {
|
||||||
statisticsType: StatisticsType['Collection Time'],
|
statisticsType: StatisticsType['Collection Time'],
|
||||||
currSample: {},
|
currSample: {},
|
||||||
copyXeData: null,
|
copyXeData: null,
|
||||||
|
qcFlagsVisible: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.$bus.$on('ReAnalyses', this.handleReAnalyse)
|
this.$bus.$on('ReAnalyses', this.handleReAnalyse)
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
this.qcFlagsTimer = setTimeout(() => {
|
||||||
|
this.qcFlagsVisible = true
|
||||||
|
}, 100)
|
||||||
|
},
|
||||||
destroyed() {
|
destroyed() {
|
||||||
this.cancelLastRequest()
|
this.cancelLastRequest()
|
||||||
this.$bus.$off('ReAnalyses', this.handleReAnalyse)
|
this.$bus.$off('ReAnalyses', this.handleReAnalyse)
|
||||||
|
|
||||||
|
if (this.qcFlagsTimer) {
|
||||||
|
clearTimeout(this.qcFlagsTimer)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 重新绘制矩形框
|
// 重新绘制矩形框
|
||||||
|
@ -440,6 +452,8 @@ export default {
|
||||||
? this.resultDisplay
|
? this.resultDisplay
|
||||||
: XeData
|
: XeData
|
||||||
|
|
||||||
|
this.sortResultDisplay()
|
||||||
|
|
||||||
this.$emit('sendInfo', this.resultDisplay, this.spectrumData.stationCode, savedAnalysisResult)
|
this.$emit('sendInfo', this.resultDisplay, this.spectrumData.stationCode, savedAnalysisResult)
|
||||||
|
|
||||||
this.qcFlags = {
|
this.qcFlags = {
|
||||||
|
@ -623,6 +637,15 @@ export default {
|
||||||
this.$refs.lineChart4Ref.setRange(minX, maxX)
|
this.$refs.lineChart4Ref.setRange(minX, maxX)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 排序result display
|
||||||
|
sortResultDisplay() {
|
||||||
|
this.resultDisplay.sort((a, b) => {
|
||||||
|
const index1 = sortList.indexOf(a.nuclideName)
|
||||||
|
const index2 = sortList.indexOf(b.nuclideName)
|
||||||
|
return index1 - index2
|
||||||
|
})
|
||||||
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
sample: {
|
sample: {
|
||||||
|
@ -653,7 +676,7 @@ export default {
|
||||||
handler(newVal, oldVal) {
|
handler(newVal, oldVal) {
|
||||||
// this.currResultDisplay = newVal.XeData
|
// this.currResultDisplay = newVal.XeData
|
||||||
this.resultDisplay = newVal.XeData || []
|
this.resultDisplay = newVal.XeData || []
|
||||||
|
this.sortResultDisplay()
|
||||||
this.$store.commit('UPDATE_SAMPLE_DATA', {
|
this.$store.commit('UPDATE_SAMPLE_DATA', {
|
||||||
inputFileName: this.sample.inputFileName,
|
inputFileName: this.sample.inputFileName,
|
||||||
key: 'XeData',
|
key: 'XeData',
|
||||||
|
@ -689,6 +712,31 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 二级操作栏开始
|
||||||
|
.spectrum-analysis-sub-operators {
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-bottom: 19px;
|
||||||
|
display: flex;
|
||||||
|
gap: 11px;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
overflow: auto;
|
||||||
|
height: 46px;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.pop-over-with-icon {
|
||||||
|
height: 32px;
|
||||||
|
|
||||||
|
&:nth-child(1) {
|
||||||
|
width: 224px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(3) {
|
||||||
|
width: 125px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 二级操作栏结束
|
||||||
|
|
||||||
.sample-select {
|
.sample-select {
|
||||||
::v-deep {
|
::v-deep {
|
||||||
.ant-select-selection {
|
.ant-select-selection {
|
||||||
|
@ -699,7 +747,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
&-main {
|
&-main {
|
||||||
height: calc(100% - 51px);
|
height: calc(100% - 65px);
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 30px;
|
gap: 30px;
|
||||||
overflow: auto hidden;
|
overflow: auto hidden;
|
||||||
|
|
|
@ -46,8 +46,6 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { cloneDeep } from 'lodash'
|
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
title: 'Flag',
|
title: 'Flag',
|
||||||
|
@ -96,8 +94,6 @@ const columns = [
|
||||||
width: 34,
|
width: 34,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
const sortList = ['Xe131m', 'Xe133', 'Xe133m', 'Xe135']
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
data: {
|
data: {
|
||||||
|
@ -125,8 +121,7 @@ export default {
|
||||||
data: {
|
data: {
|
||||||
handler(val) {
|
handler(val) {
|
||||||
if (val && Array.isArray(val)) {
|
if (val && Array.isArray(val)) {
|
||||||
const list = cloneDeep(val)
|
val.forEach((item) => {
|
||||||
list.forEach((item) => {
|
|
||||||
if (item.conc < 0) {
|
if (item.conc < 0) {
|
||||||
item.className = 'error'
|
item.className = 'error'
|
||||||
} else if (item.conc > 0 && item.conc < item.mdc) {
|
} else if (item.conc > 0 && item.conc < item.mdc) {
|
||||||
|
@ -135,15 +130,8 @@ export default {
|
||||||
item.className = 'success'
|
item.className = 'success'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
this.source1 = val.slice(0, 2)
|
||||||
list.sort((a, b) => {
|
this.source2 = val.slice(2, 4)
|
||||||
const index1 = sortList.indexOf(a.nuclideName)
|
|
||||||
const index2 = sortList.indexOf(b.nuclideName)
|
|
||||||
return index1 - index2
|
|
||||||
})
|
|
||||||
|
|
||||||
this.source1 = list.slice(0, 2)
|
|
||||||
this.source2 = list.slice(2, 4)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
immediate: true,
|
immediate: true,
|
||||||
|
|
|
@ -57,20 +57,23 @@ export default {
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
.qc-flags {
|
.qc-flags {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
max-width: calc(100vw - 685px);
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
&-item {
|
&-item {
|
||||||
background-color: #46738e;
|
background-color: #46738e;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: 150px;
|
|
||||||
height: 30px;
|
height: 30px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
padding: 0 10px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
&:not(:last-child) {
|
&:not(:last-child) {
|
||||||
margin-right: 2px;
|
margin-right: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
margin-left: 20px;
|
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
width: 14px;
|
width: 14px;
|
||||||
height: 14px;
|
height: 14px;
|
||||||
|
|
|
@ -1,14 +1,21 @@
|
||||||
<template>
|
<template>
|
||||||
<a-popover :placement="placement" overlayClassName="popover-with-icon" v-model="innerVisible">
|
<a-popover
|
||||||
|
v-bind="$attrs"
|
||||||
|
:placement="placement"
|
||||||
|
overlayClassName="popover-with-icon"
|
||||||
|
:visible="innerVisible"
|
||||||
|
:getPopupContainer="(ele) => ele"
|
||||||
|
@click="handleClick"
|
||||||
|
>
|
||||||
<div class="pop-over-with-icon">
|
<div class="pop-over-with-icon">
|
||||||
<span class="text">
|
<span class="text">
|
||||||
<slot />
|
<slot />
|
||||||
</span>
|
</span>
|
||||||
<img src="@/assets/images/global/select-down.png" alt="" />
|
<img src="@/assets/images/global/select-down.png" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<template slot="content">
|
<div slot="content" @click.stop>
|
||||||
<slot name="content" />
|
<slot name="content" />
|
||||||
</template>
|
</div>
|
||||||
</a-popover>
|
</a-popover>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
@ -16,27 +23,32 @@ export default {
|
||||||
props: {
|
props: {
|
||||||
placement: {
|
placement: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'bottom'
|
default: 'bottom',
|
||||||
},
|
},
|
||||||
value: {
|
value: {
|
||||||
type: Boolean
|
type: Boolean,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
innerVisible: false
|
innerVisible: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
methods: {
|
||||||
|
handleClick() {
|
||||||
|
this.innerVisible = !this.innerVisible
|
||||||
|
},
|
||||||
|
},
|
||||||
watch: {
|
watch: {
|
||||||
value: {
|
value: {
|
||||||
handler(val) {
|
handler(val) {
|
||||||
this.innerVisible = val
|
this.innerVisible = val
|
||||||
},
|
},
|
||||||
immediate: true
|
immediate: true,
|
||||||
},
|
},
|
||||||
innerVisible(val) {
|
innerVisible(val) {
|
||||||
this.$emit('input', val)
|
this.$emit('input', val)
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -15,31 +15,34 @@ export default {
|
||||||
props: {
|
props: {
|
||||||
data: {
|
data: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => []
|
default: () => [],
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.items = items
|
this.items = items
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
.qc-flags {
|
.qc-flags {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
max-width: calc(100vw - 1120px);
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
&-item {
|
&-item {
|
||||||
background-color: #46738e;
|
background-color: #46738e;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: 150px;
|
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
padding: 0 10px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
&:not(:last-child) {
|
&:not(:last-child) {
|
||||||
margin-right: 2px;
|
margin-right: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
margin-left: 20px;
|
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
width: 14px;
|
width: 14px;
|
||||||
height: 14px;
|
height: 14px;
|
||||||
|
@ -58,7 +61,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
&.BLUE {
|
&.BLUE {
|
||||||
background: radial-gradient(circle, #00E57D 0, #00E57D 100%);
|
background: radial-gradient(circle, #00e57d 0, #00e57d 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.YELLOW {
|
&.YELLOW {
|
||||||
|
|
|
@ -7,10 +7,6 @@
|
||||||
Detailed-Information
|
Detailed-Information
|
||||||
<detailed-infomation slot="content" :data="detailedInfomation" />
|
<detailed-infomation slot="content" :data="detailedInfomation" />
|
||||||
</pop-over-with-icon>
|
</pop-over-with-icon>
|
||||||
<pop-over-with-icon placement="bottomLeft">
|
|
||||||
QC Flags
|
|
||||||
<qc-flags slot="content" :data="qcFlags" />
|
|
||||||
</pop-over-with-icon>
|
|
||||||
<pop-over-with-icon>
|
<pop-over-with-icon>
|
||||||
Graph Assistance
|
Graph Assistance
|
||||||
<graph-assistance
|
<graph-assistance
|
||||||
|
@ -20,24 +16,20 @@
|
||||||
@reset="handleResetChart"
|
@reset="handleResetChart"
|
||||||
/>
|
/>
|
||||||
</pop-over-with-icon>
|
</pop-over-with-icon>
|
||||||
<a-popover
|
<pop-over-with-icon v-model="subOperatorsState.nuclideLibraryVisible">
|
||||||
overlayClassName="popover-with-icon"
|
Nuclide Library
|
||||||
:visible="nuclideLibraryVisible"
|
|
||||||
@click="handleChangeNuclideVisible"
|
|
||||||
placement="bottom"
|
|
||||||
>
|
|
||||||
<div class="pop-over-with-icon">
|
|
||||||
<span class="text"> Nuclide Library </span>
|
|
||||||
<img src="@/assets/images/global/select-down.png" alt="" />
|
|
||||||
</div>
|
|
||||||
<a-spin slot="content" :spinning="isLoadingNuclide">
|
<a-spin slot="content" :spinning="isLoadingNuclide">
|
||||||
<nuclide-library :list="nuclideLibraryList" @dblclick="handleNuclideDblClick" />
|
<nuclide-library :list="nuclideLibraryList" @dblclick="handleNuclideDblClick" />
|
||||||
</a-spin>
|
</a-spin>
|
||||||
</a-popover>
|
</pop-over-with-icon>
|
||||||
|
|
||||||
<div class="peak-info">
|
<div class="peak-info">
|
||||||
<button-with-switch-icon @change="handlePeakInfoChange" @click="handleTogglePeak"></button-with-switch-icon>
|
<button-with-switch-icon @change="handlePeakInfoChange" @click="handleTogglePeak"></button-with-switch-icon>
|
||||||
</div>
|
</div>
|
||||||
|
<pop-over-with-icon placement="right" v-model="subOperatorsState.qcFlagsVisible">
|
||||||
|
QC Flags
|
||||||
|
<qc-flags slot="content" :data="qcFlags" />
|
||||||
|
</pop-over-with-icon>
|
||||||
</div>
|
</div>
|
||||||
<!-- 二级交互栏结束 -->
|
<!-- 二级交互栏结束 -->
|
||||||
<!-- 主体部分 -->
|
<!-- 主体部分 -->
|
||||||
|
@ -184,7 +176,12 @@ export default {
|
||||||
detailedInfomation: [],
|
detailedInfomation: [],
|
||||||
qcFlags: [],
|
qcFlags: [],
|
||||||
graphAssistance: cloneDeep(graphAssistance),
|
graphAssistance: cloneDeep(graphAssistance),
|
||||||
|
|
||||||
|
// 子菜单状态
|
||||||
|
subOperatorsState: {
|
||||||
nuclideLibraryVisible: false,
|
nuclideLibraryVisible: false,
|
||||||
|
qcFlagsVisible: false,
|
||||||
|
},
|
||||||
|
|
||||||
channelData: {
|
channelData: {
|
||||||
peakGroup: [],
|
peakGroup: [],
|
||||||
|
@ -263,13 +260,22 @@ export default {
|
||||||
|
|
||||||
window.removeEventListener('keydown', this.handleKeyboardEvent)
|
window.removeEventListener('keydown', this.handleKeyboardEvent)
|
||||||
window.removeEventListener('click', this.closePeakInfomationTooltip)
|
window.removeEventListener('click', this.closePeakInfomationTooltip)
|
||||||
|
|
||||||
|
if (this.qcFlagsTimer) {
|
||||||
|
clearTimeout(this.qcFlagsTimer)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
deactivated() {
|
deactivated() {
|
||||||
this.nuclideLibraryVisible = false
|
// Object.keys(this.subOperatorsState).forEach(k => {
|
||||||
|
// this.subOperatorsState[k] = false
|
||||||
|
// })
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.option.brush = { toolbox: [] }
|
this.option.brush = { toolbox: [] }
|
||||||
this.initWebSocket()
|
this.initWebSocket()
|
||||||
|
this.qcFlagsTimer = setTimeout(() => {
|
||||||
|
this.subOperatorsState.qcFlagsVisible = true
|
||||||
|
}, 100)
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 键盘事件
|
// 键盘事件
|
||||||
|
@ -519,8 +525,11 @@ export default {
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error)
|
console.error(error)
|
||||||
|
const isCancel = axios.isCancel(error)
|
||||||
|
if(!isCancel) {
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async getSampleDetail_file() {
|
async getSampleDetail_file() {
|
||||||
|
@ -555,6 +564,7 @@ export default {
|
||||||
cancelLastRequest() {
|
cancelLastRequest() {
|
||||||
if (this._cancelToken && typeof this._cancelToken == 'function') {
|
if (this._cancelToken && typeof this._cancelToken == 'function') {
|
||||||
this._cancelToken()
|
this._cancelToken()
|
||||||
|
this._cancelToken = undefined
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -900,7 +910,7 @@ export default {
|
||||||
changeSeriesType() {},
|
changeSeriesType() {},
|
||||||
|
|
||||||
handleChangeNuclideVisible() {
|
handleChangeNuclideVisible() {
|
||||||
this.nuclideLibraryVisible = !this.nuclideLibraryVisible
|
this.subOperatorsState.nuclideLibraryVisible = !this.subOperatorsState.nuclideLibraryVisible
|
||||||
},
|
},
|
||||||
|
|
||||||
// 根据seriesName重绘线
|
// 根据seriesName重绘线
|
||||||
|
@ -1024,7 +1034,7 @@ export default {
|
||||||
sampleId,
|
sampleId,
|
||||||
channel,
|
channel,
|
||||||
fileName,
|
fileName,
|
||||||
energy
|
energy,
|
||||||
})
|
})
|
||||||
if (success) {
|
if (success) {
|
||||||
const { possible } = result
|
const { possible } = result
|
||||||
|
@ -1042,7 +1052,7 @@ export default {
|
||||||
|
|
||||||
// Nuclide Library 单项双击
|
// Nuclide Library 单项双击
|
||||||
handleNuclideDblClick(nuclide) {
|
handleNuclideDblClick(nuclide) {
|
||||||
this.nuclideLibraryVisible = false
|
this.subOperatorsState.nuclideLibraryVisible = false
|
||||||
this.nuclideReview.nuclide = nuclide
|
this.nuclideReview.nuclide = nuclide
|
||||||
this.nuclideReview.visible = true
|
this.nuclideReview.visible = true
|
||||||
},
|
},
|
||||||
|
@ -1802,6 +1812,7 @@ export default {
|
||||||
return success
|
return success
|
||||||
} else {
|
} else {
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
|
this.reprocessingModalVisible = false
|
||||||
if (showMessage) {
|
if (showMessage) {
|
||||||
const arr = message.split('\n')
|
const arr = message.split('\n')
|
||||||
this.$warning({
|
this.$warning({
|
||||||
|
@ -2051,6 +2062,8 @@ export default {
|
||||||
this.handleResetState()
|
this.handleResetState()
|
||||||
const sampleData = await this.$store.dispatch('GET_SAMPLE_DATA', newVal.inputFileName)
|
const sampleData = await this.$store.dispatch('GET_SAMPLE_DATA', newVal.inputFileName)
|
||||||
if (sampleData) {
|
if (sampleData) {
|
||||||
|
this.cancelLastRequest()
|
||||||
|
this.isLoading = false
|
||||||
this.dataProcess(sampleData.data, sampleData.from)
|
this.dataProcess(sampleData.data, sampleData.from)
|
||||||
} else {
|
} else {
|
||||||
if (newVal.sampleId) {
|
if (newVal.sampleId) {
|
||||||
|
@ -2102,8 +2115,44 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 二级操作栏开始
|
||||||
|
.spectrum-analysis-sub-operators {
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-bottom: 19px;
|
||||||
|
display: flex;
|
||||||
|
gap: 11px;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
overflow: auto;
|
||||||
|
height: 46px;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.pop-over-with-icon {
|
||||||
|
height: 32px;
|
||||||
|
|
||||||
|
&:nth-child(1) {
|
||||||
|
width: 216px;
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
width: 182px;
|
||||||
|
}
|
||||||
|
&:nth-child(3) {
|
||||||
|
width: 170px;
|
||||||
|
}
|
||||||
|
&:nth-child(5) {
|
||||||
|
width: 156px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.peak-info {
|
||||||
|
width: 226px;
|
||||||
|
height: 32px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 二级操作栏结束
|
||||||
|
|
||||||
&-main {
|
&-main {
|
||||||
height: calc(100% - 51px);
|
height: calc(100% - 65px);
|
||||||
display: flex;
|
display: flex;
|
||||||
overflow: auto hidden;
|
overflow: auto hidden;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
|
@ -1776,49 +1776,10 @@ export default {
|
||||||
}
|
}
|
||||||
// 顶部操作栏结束
|
// 顶部操作栏结束
|
||||||
|
|
||||||
::v-deep {
|
|
||||||
// 二级操作栏开始
|
|
||||||
.spectrum-analysis-sub-operators {
|
|
||||||
flex-shrink: 0;
|
|
||||||
margin-bottom: 19px;
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
overflow: auto;
|
|
||||||
|
|
||||||
.pop-over-with-icon {
|
|
||||||
height: 32px;
|
|
||||||
|
|
||||||
&:not(:last-child) {
|
|
||||||
margin-right: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:nth-child(1) {
|
|
||||||
width: 256px;
|
|
||||||
}
|
|
||||||
&:nth-child(2) {
|
|
||||||
width: 186px;
|
|
||||||
}
|
|
||||||
&:nth-child(3) {
|
|
||||||
width: 246px;
|
|
||||||
}
|
|
||||||
&:nth-child(4) {
|
|
||||||
width: 246px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.peak-info {
|
|
||||||
width: 306px;
|
|
||||||
height: 32px;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 二级操作栏结束
|
|
||||||
}
|
|
||||||
|
|
||||||
// 主体部分开始
|
// 主体部分开始
|
||||||
&-main {
|
&-main {
|
||||||
margin-top: 15px;
|
padding-top: 5px;
|
||||||
height: calc(100% - 45px);
|
height: calc(100% - 15px);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
// 主体部分结束
|
// 主体部分结束
|
||||||
|
|
|
@ -11,6 +11,14 @@ import Map from 'ol/Map'
|
||||||
import XYZ from 'ol/source/XYZ'
|
import XYZ from 'ol/source/XYZ'
|
||||||
import View from 'ol/View'
|
import View from 'ol/View'
|
||||||
import { fromLonLat } from 'ol/proj'
|
import { fromLonLat } from 'ol/proj'
|
||||||
|
import Stroke from 'ol/style/Stroke'
|
||||||
|
import { MarkerIcon, MarkerType } from './markerEnum'
|
||||||
|
import Icon from 'ol/style/Icon'
|
||||||
|
import VectorSource from 'ol/source/Vector'
|
||||||
|
import VectorLayer from 'ol/layer/Vector'
|
||||||
|
import { LineString, Point } from 'ol/geom'
|
||||||
|
import { Feature } from 'ol'
|
||||||
|
import Style from 'ol/style/Style'
|
||||||
|
|
||||||
const mapSourceUrl = process.env.VUE_APP_MAP_BASE_URL
|
const mapSourceUrl = process.env.VUE_APP_MAP_BASE_URL
|
||||||
export default {
|
export default {
|
||||||
|
@ -57,9 +65,17 @@ export default {
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
const layers = [this.tileLayer]
|
this.animationSource = new VectorSource({
|
||||||
|
features: [],
|
||||||
|
})
|
||||||
|
|
||||||
const view = new View({
|
this.animationLayer = new VectorLayer({
|
||||||
|
source: this.animationSource,
|
||||||
|
})
|
||||||
|
|
||||||
|
const layers = [this.tileLayer, this.animationLayer]
|
||||||
|
|
||||||
|
this.view = new View({
|
||||||
projection: 'EPSG:3857', // 使用这个坐标系
|
projection: 'EPSG:3857', // 使用这个坐标系
|
||||||
center: fromLonLat([longitude, latitude]),
|
center: fromLonLat([longitude, latitude]),
|
||||||
zoom: this.zoom,
|
zoom: this.zoom,
|
||||||
|
@ -71,7 +87,7 @@ export default {
|
||||||
this.map = new Map({
|
this.map = new Map({
|
||||||
target: this.$refs.mapContainerRef,
|
target: this.$refs.mapContainerRef,
|
||||||
layers,
|
layers,
|
||||||
view,
|
view: this.view,
|
||||||
controls: [],
|
controls: [],
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
@ -120,6 +136,110 @@ export default {
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 按路线运动
|
||||||
|
animateByRoute(coordinates) {
|
||||||
|
if (!coordinates) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!coordinates.length) {
|
||||||
|
this.stopRouteAnimation()
|
||||||
|
this.removeAnimationFeatures()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.startRouteAnimation(
|
||||||
|
coordinates,
|
||||||
|
{
|
||||||
|
stroke: new Stroke({
|
||||||
|
color: '#17f85c',
|
||||||
|
lineDash: [6],
|
||||||
|
width: 2,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
image: new Icon({
|
||||||
|
src: MarkerIcon[MarkerType.Car],
|
||||||
|
anchor: [0.65, 0.5],
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
[100, 430, 100, 450]
|
||||||
|
)
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 沿轨迹运动
|
||||||
|
* @param {Array<any>} route 轨迹路线
|
||||||
|
* @param {Object} marker 运动的物体
|
||||||
|
*/
|
||||||
|
startRouteAnimation(route, lineStyleOptions, markerStyleOptions, padding = []) {
|
||||||
|
// 清理上次的动画
|
||||||
|
this.stopRouteAnimation()
|
||||||
|
|
||||||
|
// 清理动画图层
|
||||||
|
this.removeAnimationFeatures()
|
||||||
|
|
||||||
|
const lineString = new LineString(route.map((item) => fromLonLat(item)))
|
||||||
|
const extent = lineString.getExtent()
|
||||||
|
this.view.fit(extent, {
|
||||||
|
padding,
|
||||||
|
duration: 1000,
|
||||||
|
})
|
||||||
|
|
||||||
|
// 创建轨迹线
|
||||||
|
const routeFeature = new Feature({
|
||||||
|
geometry: lineString,
|
||||||
|
})
|
||||||
|
|
||||||
|
// 设置轨迹线样式,并添加到地图上
|
||||||
|
routeFeature.setStyle(new Style(lineStyleOptions))
|
||||||
|
this.animationSource.addFeature(routeFeature)
|
||||||
|
|
||||||
|
// 创建标记物,并设置位置到轨迹路线的初始位置
|
||||||
|
const markerFeature = new Feature({
|
||||||
|
geometry: new Point(lineString.getFirstCoordinate()),
|
||||||
|
})
|
||||||
|
|
||||||
|
// 设置标记物样式,并添加到地图上
|
||||||
|
markerFeature.setStyle(new Style(markerStyleOptions))
|
||||||
|
this.animationSource.addFeature(markerFeature)
|
||||||
|
|
||||||
|
let lastTime = Date.now(),
|
||||||
|
distance = 0
|
||||||
|
this.postRenderCallback = (event) => {
|
||||||
|
const speed = 60
|
||||||
|
const time = event.frameState.time
|
||||||
|
const elapsedTime = time - lastTime
|
||||||
|
distance = (distance + (speed * elapsedTime) / 1e6) % 2
|
||||||
|
lastTime = time
|
||||||
|
|
||||||
|
if (distance >= 1) {
|
||||||
|
this.stopRouteAnimation()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentCoordinate = lineString.getCoordinateAt(distance > 1 ? 2 - distance : distance)
|
||||||
|
markerFeature.setGeometry(new Point(currentCoordinate))
|
||||||
|
|
||||||
|
// tell OpenLayers to continue the postrender animation
|
||||||
|
this.map.render()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.animationLayer.on('postrender', this.postRenderCallback)
|
||||||
|
},
|
||||||
|
|
||||||
|
// 移除动画层所有元素
|
||||||
|
removeAnimationFeatures() {
|
||||||
|
this.animationSource.clear()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 停止轨迹动画
|
||||||
|
stopRouteAnimation() {
|
||||||
|
if (this.postRenderCallback) {
|
||||||
|
this.animationLayer.un('postrender', this.postRenderCallback)
|
||||||
|
this.postRenderCallback = null
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -32,6 +32,14 @@
|
||||||
/>
|
/>
|
||||||
<img v-else src="@/assets/images/station-operation/filter-station.png" @click="onPaneChange(2)" />
|
<img v-else src="@/assets/images/station-operation/filter-station.png" @click="onPaneChange(2)" />
|
||||||
</div>
|
</div>
|
||||||
|
<div title="Route">
|
||||||
|
<img
|
||||||
|
v-if="active == 3 && showPane"
|
||||||
|
src="@/assets/images/station-operation/icon-route-active.png"
|
||||||
|
@click="showPane = !showPane"
|
||||||
|
/>
|
||||||
|
<img v-else src="@/assets/images/station-operation/icon-route.png" @click="onPaneChange(3)" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="map-pane-operators-zoom">
|
<div class="map-pane-operators-zoom">
|
||||||
|
@ -149,6 +157,41 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 站点筛选结束 -->
|
<!-- 站点筛选结束 -->
|
||||||
|
|
||||||
|
<!-- 路径 -->
|
||||||
|
<div class="route" v-show="active == 3">
|
||||||
|
<div class="map-pane-content-header">Route</div>
|
||||||
|
<div class="map-pane-content-main">
|
||||||
|
<div class="route-form-item">
|
||||||
|
<div class="label">Station</div>
|
||||||
|
<custom-select v-model="routeParams.stationCode" :options="stationSelectOptions"></custom-select>
|
||||||
|
</div>
|
||||||
|
<div class="route-form-item">
|
||||||
|
<div class="label">Start Date</div>
|
||||||
|
<custom-date-picker
|
||||||
|
show-time
|
||||||
|
format="YYYY/MM/DD HH:mm:ss"
|
||||||
|
valueFormat="YYYY/MM/DD HH:mm:ss"
|
||||||
|
v-model="routeParams.startDate"
|
||||||
|
></custom-date-picker>
|
||||||
|
</div>
|
||||||
|
<div class="route-form-item">
|
||||||
|
<div class="label">End Date</div>
|
||||||
|
<custom-date-picker
|
||||||
|
show-time
|
||||||
|
format="YYYY/MM/DD HH:mm:ss"
|
||||||
|
valueFormat="YYYY/MM/DD HH:mm:ss"
|
||||||
|
v-model="routeParams.endDate"
|
||||||
|
></custom-date-picker>
|
||||||
|
</div>
|
||||||
|
<div class="route-form-item">
|
||||||
|
<a-button class="btn" type="primary" :loading="isSearchingRoute" @click="handleRouteSearch"
|
||||||
|
>Search</a-button
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 路径结束 -->
|
||||||
</div>
|
</div>
|
||||||
<!-- 主体部分结束 -->
|
<!-- 主体部分结束 -->
|
||||||
|
|
||||||
|
@ -274,6 +317,7 @@ import { MarkerType, FilterIcon } from './markerEnum'
|
||||||
import { Vector as VectorLayer } from 'ol/layer'
|
import { Vector as VectorLayer } from 'ol/layer'
|
||||||
import VectorSource from 'ol/source/Vector'
|
import VectorSource from 'ol/source/Vector'
|
||||||
import { cloneDeep } from 'lodash'
|
import { cloneDeep } from 'lodash'
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
// Filter中的筛选列表
|
// Filter中的筛选列表
|
||||||
const filterList = [
|
const filterList = [
|
||||||
|
@ -393,10 +437,13 @@ export default {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 500,
|
default: 500,
|
||||||
},
|
},
|
||||||
|
|
||||||
treeData: {
|
treeData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
},
|
},
|
||||||
|
originalDataList: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
CustomModal,
|
CustomModal,
|
||||||
|
@ -445,6 +492,14 @@ export default {
|
||||||
stationInfo: undefined,
|
stationInfo: undefined,
|
||||||
|
|
||||||
mapSource: 'online',
|
mapSource: 'online',
|
||||||
|
|
||||||
|
routeParams: {
|
||||||
|
stationCode: undefined,
|
||||||
|
startDate: dayjs().subtract(7, 'd').format('YYYY-MM-DD'),
|
||||||
|
endDate: dayjs().format('YYYY-MM-DD'),
|
||||||
|
},
|
||||||
|
|
||||||
|
isSearchingRoute: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
@ -492,18 +547,33 @@ export default {
|
||||||
// 面板改变
|
// 面板改变
|
||||||
onPaneChange(active) {
|
onPaneChange(active) {
|
||||||
this.showPane = true
|
this.showPane = true
|
||||||
|
this.prevPane = this.active // 记录上次是哪个面板
|
||||||
this.active = active
|
this.active = active
|
||||||
const source = this.circleLayer.getSource()
|
const source = this.circleLayer.getSource()
|
||||||
source.clear() // 清理图层
|
source.clear() // 清理图层
|
||||||
switch (active) {
|
|
||||||
case 1: // 核设施查询面板
|
// 如果切换到轨迹绘制页面,则使用上一次的轨迹先绘制一遍
|
||||||
|
if (active == 3) {
|
||||||
|
if (this.lastRoute) {
|
||||||
|
this.$emit('drawRoute', this.lastRoute)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$emit('changeMarker', [])
|
||||||
|
} else {
|
||||||
|
// 如果是从轨迹绘制切换到其他页面
|
||||||
|
if (this.prevPane == 3) {
|
||||||
|
this.$emit('drawRoute', [])
|
||||||
|
}
|
||||||
|
|
||||||
|
if (active == 1) {
|
||||||
this.emitDrawCircle(2)
|
this.emitDrawCircle(2)
|
||||||
this.emitStationChange()
|
this.emitStationChange()
|
||||||
break
|
}
|
||||||
case 2: // 筛选面板
|
|
||||||
|
if (active == 2) {
|
||||||
this.emitDrawCircle(1)
|
this.emitDrawCircle(1)
|
||||||
this.emitFilter()
|
this.emitFilter()
|
||||||
break
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -822,6 +892,39 @@ export default {
|
||||||
handleResize() {
|
handleResize() {
|
||||||
this.$refs.realtimeChartRef.resize()
|
this.$refs.realtimeChartRef.resize()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 查询路径
|
||||||
|
async handleRouteSearch() {
|
||||||
|
if (!this.routeParams.stationCode) {
|
||||||
|
this.$message.warn('Station Code Cannot Be Null')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isSearchingRoute = true
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { success, result, message } = await getAction('/stationOperation/getSelfStationGPS', {
|
||||||
|
...this.routeParams,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
if (!result.length) {
|
||||||
|
this.$message.warn('No Route Found')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lastRoute = result.map(({ lon, lat }) => [lon, lat])
|
||||||
|
|
||||||
|
this.$emit('drawRoute', this.lastRoute)
|
||||||
|
} else {
|
||||||
|
this.$message.error(message)
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
} finally {
|
||||||
|
this.isSearchingRoute = false
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
async dataStatusModalVisible(val) {
|
async dataStatusModalVisible(val) {
|
||||||
|
@ -840,6 +943,16 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
stationSelectOptions() {
|
||||||
|
return this.originalDataList
|
||||||
|
.filter(({ stationType }) => stationType == 'Car')
|
||||||
|
.map(({ stationName: label }) => ({
|
||||||
|
label,
|
||||||
|
value: label,
|
||||||
|
}))
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
|
@ -868,6 +981,8 @@ export default {
|
||||||
|
|
||||||
img {
|
img {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
}
|
}
|
||||||
&-main-operator {
|
&-main-operator {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
|
@ -1057,17 +1172,12 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-table-thead > tr th {
|
.ant-table-thead > tr th {
|
||||||
padding-top: 2px !important;
|
padding-top: 2px 6px !important;
|
||||||
padding-bottom: 2px !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-table-tbody .ant-table-row td {
|
.ant-table-tbody .ant-table-row td {
|
||||||
padding: 6px !important;
|
padding: 6px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-table-placeholder {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1135,6 +1245,27 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 路径
|
||||||
|
.route {
|
||||||
|
pointer-events: all;
|
||||||
|
|
||||||
|
&-form-item {
|
||||||
|
.label {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 50px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 地图右侧操作栏结束
|
// 地图右侧操作栏结束
|
||||||
|
|
|
@ -152,11 +152,13 @@
|
||||||
<MapPane
|
<MapPane
|
||||||
ref="mapPane"
|
ref="mapPane"
|
||||||
:treeData="treeData"
|
:treeData="treeData"
|
||||||
|
:originalDataList="originalDataList"
|
||||||
@changeMarker="onChangeMarker"
|
@changeMarker="onChangeMarker"
|
||||||
@filterMarker="onFilterMarker"
|
@filterMarker="onFilterMarker"
|
||||||
@drawCircle="onDrawCircle"
|
@drawCircle="onDrawCircle"
|
||||||
@mapSourceChange="handleMapSourceChange"
|
@mapSourceChange="handleMapSourceChange"
|
||||||
@focusStationChange="getFollowedStationList"
|
@focusStationChange="getFollowedStationList"
|
||||||
|
@drawRoute="handleDrawRoute"
|
||||||
/>
|
/>
|
||||||
</Map>
|
</Map>
|
||||||
</div>
|
</div>
|
||||||
|
@ -240,6 +242,7 @@ export default {
|
||||||
updataFilterType: [],
|
updataFilterType: [],
|
||||||
updataFilterDataQuality: [],
|
updataFilterDataQuality: [],
|
||||||
httpNum: 0,
|
httpNum: 0,
|
||||||
|
originalDataList: [],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
@ -546,7 +549,7 @@ export default {
|
||||||
// 地图图标点击
|
// 地图图标点击
|
||||||
onMarkerClick(stationInfo) {
|
onMarkerClick(stationInfo) {
|
||||||
const { stationType, stationName } = stationInfo
|
const { stationType, stationName } = stationInfo
|
||||||
const find = this.orgStationList.find(item => item.stationCode == stationName)
|
const find = this.orgStationList.find((item) => item.stationCode == stationName)
|
||||||
if (!find) {
|
if (!find) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -577,6 +580,11 @@ export default {
|
||||||
getDictSelectTagContainer() {
|
getDictSelectTagContainer() {
|
||||||
return document.body
|
return document.body
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 绘制轨迹
|
||||||
|
handleDrawRoute(routes) {
|
||||||
|
this.$refs.mapRef.animateByRoute(routes)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
</template>
|
</template>
|
||||||
<!-- 标题结束 -->
|
<!-- 标题结束 -->
|
||||||
<!-- 内容 -->
|
<!-- 内容 -->
|
||||||
<div class="scheduling-list-content">
|
<div class="scheduling-list-content" ref="listContainer">
|
||||||
<div class="scheduling-list-item" v-for="item of schedulingInfo" :key="item.id">
|
<div class="scheduling-list-item" v-for="item of schedulingInfo" :key="item.id">
|
||||||
<h4 class="title">
|
<h4 class="title">
|
||||||
<span>
|
<span>
|
||||||
|
@ -320,6 +320,9 @@ export default {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.schedulingInfo = this.scheduleList[date.format(dateFormat)]
|
this.schedulingInfo = this.scheduleList[date.format(dateFormat)]
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.listContainer.scrollTop = 0
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
|
@ -656,10 +659,13 @@ export default {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
//display: flex;
|
//display: flex;
|
||||||
/deep/.ant-spin-container {
|
::v-deep.ant-spin-nested-loading {
|
||||||
|
height: 100%;
|
||||||
|
.ant-spin-container {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
&-list {
|
&-list {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
width: 350px;
|
width: 350px;
|
||||||
|
@ -695,13 +701,15 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&-body {
|
&-body {
|
||||||
height: calc(100% - 103px);
|
height: calc(100% - 52px);
|
||||||
overflow: auto;
|
// overflow: auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&-content {
|
&-content {
|
||||||
|
height: 100%;
|
||||||
padding: 0 12px;
|
padding: 0 12px;
|
||||||
|
overflow: auto;
|
||||||
}
|
}
|
||||||
&-item {
|
&-item {
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user