This commit is contained in:
hym 2026-04-03 12:04:24 +08:00
commit d2579e839c
18 changed files with 68 additions and 62 deletions

View File

@ -27,7 +27,7 @@ export function getDataSearch(query) {
}) })
} }
// 获取航次名称列表 // 获取航次编号列表
export function voyageNameList(query) { export function voyageNameList(query) {
return request({ return request({
url: '/voyage/reg/page.htm', url: '/voyage/reg/page.htm',

View File

@ -3,7 +3,7 @@
<div class="shuju_con"> <div class="shuju_con">
<div v-show="show == false" class="left"> <div v-show="show == false" class="left">
<div class="tags"> <div class="tags">
<span class="tag" v-if="menu1">航次名称{{ menu1 }} <i class="el-icon-close" @click="menu1 = ''"></i></span> <span class="tag" v-if="menu1">航次编号{{ menu1 }} <i class="el-icon-close" @click="menu1 = ''"></i></span>
<span class="tag" v-if="menu2">平台类型{{ menu2 }} <i class="el-icon-close" @click="menu2 = ''"></i></span> <span class="tag" v-if="menu2">平台类型{{ menu2 }} <i class="el-icon-close" @click="menu2 = ''"></i></span>
<span class="tag" v-if="menu3">设备类型{{ menu3 }} <i class="el-icon-close" @click="menu3 = ''"></i></span> <span class="tag" v-if="menu3">设备类型{{ menu3 }} <i class="el-icon-close" @click="menu3 = ''"></i></span>
<span class="tag" v-if="menu4">数据样品类型{{ menu4 }} <i class="el-icon-close" @click="menu4 = ''"></i></span> <span class="tag" v-if="menu4">数据样品类型{{ menu4 }} <i class="el-icon-close" @click="menu4 = ''"></i></span>
@ -26,7 +26,7 @@
</el-radio-group> </el-radio-group>
</div> </div>
<div class="left4-sample-wrap" v-if="radio == '数据样品集'"> <div class="left4-sample-wrap" v-if="radio == '数据样品集'">
<p class="rule-text">编号规则:航次号_潜次号_设备类型_数据样品类型</p> <p class="rule-text">编号规则航次编号_平台类型_设备类型_数据样品类型</p>
<div class="left4"> <div class="left4">
<div v-for="(item, index) in dataList" :key="index" :id="item.tsy_id" class="left4_1" > <div v-for="(item, index) in dataList" :key="index" :id="item.tsy_id" class="left4_1" >
<div class="left4_top"> <div class="left4_top">
@ -144,13 +144,13 @@
</a> </a>
</div> </div>
</div> </div>
<!-- 航次名称弹窗--> <!-- 航次编号弹窗-->
<el-dialog title="请选择航次名称" :visible.sync="dialog1" width="1000px"> <el-dialog title="请选择航次编号" :visible.sync="dialog1" width="1000px">
<el-table ref="tableData1" border highlight-current-row @current-change="handleCurrentChange1" max-height="480" <el-table ref="tableData1" border highlight-current-row @current-change="handleCurrentChange1" max-height="480"
:data="tableData1" :header-cell-style="{ background: '#dddfe6', color: '#555960', textAlign: 'center' }" :data="tableData1" :header-cell-style="{ background: '#dddfe6', color: '#555960', textAlign: 'center' }"
:cell-style="{ textAlign: 'center' }"> :cell-style="{ textAlign: 'center' }">
<el-table-column type="index" label="#" width="50" /> <el-table-column type="index" label="#" width="50" />
<el-table-column prop="name" label="航次名称" /> <el-table-column prop="name" label="航次编号" />
</el-table> </el-table>
</el-dialog> </el-dialog>
<!-- 平台类型弹窗--> <!-- 平台类型弹窗-->
@ -248,7 +248,7 @@ export default {
filter: null, filter: null,
searchType: [ searchType: [
{ {
label: '航次名称', label: '航次编号',
disabled: false disabled: false
}, },
{ {
@ -273,7 +273,7 @@ export default {
disabled: false disabled: false
}, },
], ],
searchTypeValue: '航次名称', searchTypeValue: '航次编号',
radio: '航次', radio: '航次',
dialog1: false, dialog1: false,
tableData1: [], tableData1: [],
@ -320,7 +320,7 @@ export default {
this.dataList = [] this.dataList = []
}, },
searchTypeValue(val) { searchTypeValue(val) {
if (val == '航次名称' || val == '平台类型' || val == '设备类型' || val == '数据样品类型') { if (val == '航次编号' || val == '平台类型' || val == '设备类型' || val == '数据样品类型') {
this.menuShow = true this.menuShow = true
} else { } else {
this.menuShow = false this.menuShow = false
@ -380,7 +380,7 @@ export default {
equipment_type: this.menu3, equipment_type: this.menu3,
data_type: this.menu4 data_type: this.menu4
}).then(res => { }).then(res => {
if (this.searchTypeValue === '航次名称') { if (this.searchTypeValue === '航次编号') {
this.dialog1 = true this.dialog1 = true
this.tableData1 = res.page.records this.tableData1 = res.page.records
} else if (this.searchTypeValue === '平台类型') { } else if (this.searchTypeValue === '平台类型') {
@ -758,7 +758,12 @@ export default {
> .rule-text { > .rule-text {
flex-shrink: 0; flex-shrink: 0;
margin-top: 12px;
margin-bottom: 10px; margin-bottom: 10px;
font-size: 14px;
color: #999;
white-space: nowrap;
overflow-x: auto;
} }
> .left4 { > .left4 {
@ -997,8 +1002,4 @@ export default {
background: none !important; background: none !important;
} }
.rule-text {
font-size: 16px;
color: #212121;
}
</style> </style>

View File

@ -10,7 +10,7 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="航次名称" prop="voyage_id"> <el-form-item label="航次编号" prop="voyage_id">
<el-select v-model="form.voyage_id" filterable placeholder="" style="width: 100%;" @change="changeVoyage" :disabled="disabled"> <el-select v-model="form.voyage_id" filterable placeholder="" style="width: 100%;" @change="changeVoyage" :disabled="disabled">
<el-option v-for="item in voyageOptions" :key="item.tsy_id" :label="item.voyage_name" :value="item.tsy_id"/> <el-option v-for="item in voyageOptions" :key="item.tsy_id" :label="item.voyage_name" :value="item.tsy_id"/>
</el-select> </el-select>
@ -304,7 +304,7 @@ export default {
return { return {
// //
disabled: false, disabled: false,
// //
voyageOptions: [], voyageOptions: [],
// //
platformDicts: [], platformDicts: [],
@ -411,7 +411,7 @@ export default {
this.getVoyageList() this.getVoyageList()
}, },
methods: { methods: {
// //
getVoyageList() { getVoyageList() {
voyageRegList().then(res => { voyageRegList().then(res => {
this.voyageOptions = res.page.records this.voyageOptions = res.page.records
@ -453,7 +453,7 @@ export default {
this.mainMemberOptions = mainArr this.mainMemberOptions = mainArr
}) })
}, },
// //
changeVoyage(val) { changeVoyage(val) {
this.getMemberList(val) this.getMemberList(val)
this.showPlatform = val ? true : false this.showPlatform = val ? true : false

View File

@ -32,7 +32,7 @@
</div> </div>
<el-table ref="tableData" v-loading="loading" stripe border :data="tableData" :header-cell-style="{ background: '#dddfe6',color: '#555960',textAlign: 'center' }" :cell-style="{ textAlign: 'center' }"> <el-table ref="tableData" v-loading="loading" stripe border :data="tableData" :header-cell-style="{ background: '#dddfe6',color: '#555960',textAlign: 'center' }" :cell-style="{ textAlign: 'center' }">
<el-table-column type="index" label="#" width="50"/> <el-table-column type="index" label="#" width="50"/>
<el-table-column prop="voyage_name" label="航次名称" /> <el-table-column prop="voyage_name" label="航次编号" />
<el-table-column prop="ship_name" label="科考船舶" /> <el-table-column prop="ship_name" label="科考船舶" />
<el-table-column prop="voyage_start_date" label="航次开始"> <el-table-column prop="voyage_start_date" label="航次开始">
<template slot-scope="scope"> <template slot-scope="scope">
@ -82,7 +82,7 @@
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="航次名称" prop="voyage_name"> <el-form-item label="航次编号" prop="voyage_name">
<el-input v-model="form.voyage_name" /> <el-input v-model="form.voyage_name" />
</el-form-item> </el-form-item>
</el-col> </el-col>

View File

@ -287,7 +287,7 @@ export default {
} }
}, },
voyageList: [], // voyageList: [], //
currentVoyage: null, // currentVoyage: null, //
highlightLayer: null, // highlightLayer: null, //
dataUpdateList: [], dataUpdateList: [],
sampleDataUpdateList: [], sampleDataUpdateList: [],
@ -368,7 +368,7 @@ export default {
// //
handleSelectionChange(val) { handleSelectionChange(val) {
// //
const newVoyages = val.map(item => item.voyage_name); const newVoyages = val.map(item => item.voyage_name);
const oldVoyages = this.multipleSelection.map(item => item.voyage_name); const oldVoyages = this.multipleSelection.map(item => item.voyage_name);

View File

@ -25,7 +25,7 @@
<el-form ref="formPlat" :inline="true" class="filter-box" :rules="rules" label-width="120px" :model="addFrom"> <el-form ref="formPlat" :inline="true" class="filter-box" :rules="rules" label-width="120px" :model="addFrom">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="航次名称" prop="voyageName"> <el-form-item label="航次编号" prop="voyageName">
<el-select v-model="addFrom.voyageName" placeholder="" size="medium" :disabled="platFlag" @change="getAllOrg"> <el-select v-model="addFrom.voyageName" placeholder="" size="medium" :disabled="platFlag" @change="getAllOrg">
<el-option <el-option
v-for="item in voyageList" v-for="item in voyageList"
@ -850,7 +850,7 @@ export default {
voyageList: [], voyageList: [],
rules: { rules: {
voyageName: [ voyageName: [
{ required: true, message: '请输入航次名称', trigger: 'blur' } { required: true, message: '请输入航次编号', trigger: 'blur' }
], ],
platformName: [ platformName: [
{ required: true, message: '请输入平台名称', trigger: 'blur' } { required: true, message: '请输入平台名称', trigger: 'blur' }

View File

@ -41,7 +41,7 @@
width="55" width="55"
/> />
<el-table-column prop="sampleNumber" label="数据样品编号" /> <el-table-column prop="sampleNumber" label="数据样品编号" />
<el-table-column prop="voyageName" label="航次名称" /> <el-table-column prop="voyageName" label="航次编号" />
<el-table-column prop="platformType" label="平台类型" /> <el-table-column prop="platformType" label="平台类型" />
<!-- <el-table-column prop="status" label="计划状态" /> --> <!-- <el-table-column prop="status" label="计划状态" /> -->
<el-table-column prop="submariner" label="潜次号" /> <el-table-column prop="submariner" label="潜次号" />

View File

@ -292,10 +292,11 @@ export default {
background-color: #ebf1f7; background-color: #ebf1f7;
.banner { .banner {
background-color: #012458;
background-image: url(../../../static/images/bannerny1.jpg); background-image: url(../../../static/images/bannerny1.jpg);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
background-size: 100% 100%; background-size: contain;
width: 100%; width: 100%;
height: 480px; height: 480px;
display: flex; display: flex;

View File

@ -292,10 +292,11 @@ export default {
background-color: #ebf1f7; background-color: #ebf1f7;
.banner { .banner {
background-color: #012458;
background-image: url(../../../static/images/bannerny1.jpg); background-image: url(../../../static/images/bannerny1.jpg);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
background-size: 100% 100%; background-size: contain;
width: 100%; width: 100%;
height: 480px; height: 480px;
display: flex; display: flex;

View File

@ -291,10 +291,11 @@ export default {
background-color: #ebf1f7; background-color: #ebf1f7;
.banner { .banner {
background-color: #012458;
background-image: url(../../../static/images/bannerny1.jpg); background-image: url(../../../static/images/bannerny1.jpg);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
background-size: 100% 100%; background-size: contain;
width: 100%; width: 100%;
height: 480px; height: 480px;
display: flex; display: flex;

View File

@ -70,14 +70,13 @@
</template> </template>
<script> <script>
import Vue from 'vue'
import BarChart from './components/BarChart.vue' import BarChart from './components/BarChart.vue'
import PieChart from './components/PieChart.vue' import PieChart from './components/PieChart.vue'
import { reportList, shipTotal, shipUnit, shipUnitYear, shipVoyage } from '../../api/statistics' import { reportList, shipTotal, shipUnit, shipUnitYear, shipVoyage } from '../../api/statistics'
import { getYearRange, filterDictItems } from '../../utils/index' import { getYearRange, filterDictItems } from '../../utils/index'
import { initMapbox, handleWheel, initSprites, triggerLayerClick } from "@/utils/mapbox-utils"; import { initMapbox } from '@/utils/mapbox-utils'
import { loadVectorLayer, loadJsonLineFeature, loadJsonPointFeature, highlightFeaturesByProperty } from '@/utils/vector-layer-utils' import { loadVectorLayer, loadJsonPointFeature } from '@/utils/vector-layer-utils'
import { ColorGenerator } from '@/utils/color-generator'; import { ColorGenerator } from '@/utils/color-generator'
export default { export default {
components: { components: {
@ -134,20 +133,20 @@ export default {
this.getChartBar({ year: '2025' }) this.getChartBar({ year: '2025' })
}, },
mounted() { mounted() {
initMapbox("workUnitMap_ship", { initMapbox('workUnitMap_ship', {
tileKey: "gaode", tileKey: 'gaode',
zoom: 3, zoom: 3,
center: [110, 31], center: [110, 31],
minZoom: 2, minZoom: 2,
maxZoom: 29 maxZoom: 29
}); })
initMapbox("voyageMap_ship", { initMapbox('voyageMap_ship', {
tileKey: "GEBCO_basemap_NCEI", tileKey: 'GEBCO_basemap_NCEI',
zoom: 3, zoom: 3,
center: [113, 15], center: [113, 15],
minZoom: 2, minZoom: 2,
maxZoom: 29 maxZoom: 29
}); })
}, },
beforeDestroy() { beforeDestroy() {
const unitMap = Vue.config.maps && Vue.config.maps['workUnitMap_ship'] const unitMap = Vue.config.maps && Vue.config.maps['workUnitMap_ship']
@ -198,15 +197,15 @@ export default {
// //
getShipUnit() { getShipUnit() {
shipUnit().then(res => { shipUnit().then(res => {
let geojson = { const geojson = {
type: "FeatureCollection", type: 'FeatureCollection',
features: [] features: []
}; }
res.array.forEach(element => { res.array.forEach(element => {
geojson.features.push({ geojson.features.push({
type: "Feature", type: 'Feature',
geometry: { geometry: {
type: "Point", type: 'Point',
coordinates: [element.unit_lon, element.unit_lat] coordinates: [element.unit_lon, element.unit_lat]
}, },
properties: { properties: {
@ -215,9 +214,9 @@ export default {
create_time: element.create_time, create_time: element.create_time,
tsy_id: element.tsy_id tsy_id: element.tsy_id
} }
}); })
}); })
loadJsonPointFeature("workUnit", "blue", geojson, "unit_name", "workUnitMap_ship"); loadJsonPointFeature('workUnit', 'blue', geojson, 'unit_name', 'workUnitMap_ship')
const typeCount = res.array.reduce((acc, unit) => { const typeCount = res.array.reduce((acc, unit) => {
const type = unit.unit_type const type = unit.unit_type
@ -234,13 +233,13 @@ export default {
// //
gitShipVoyage(params = {}) { gitShipVoyage(params = {}) {
shipVoyage(params).then(res => { shipVoyage(params).then(res => {
let i = 0; let i = 0
const colors = ColorGenerator.generateDivergingColors(res.array.length); const colors = ColorGenerator.generateDivergingColors(res.array.length)
// //
res.array.forEach(item => { res.array.forEach(item => {
// //
loadVectorLayer(item.voyage_name, ["line", "symbol"], [colors[i], "#FFFFFF"], "visible", "voyageMap_ship", "dsds"); loadVectorLayer(item.voyage_name, ['line', 'symbol'], [colors[i], '#FFFFFF'], 'visible', 'voyageMap_ship', 'dsds')
i++; i++
}) })
}) })
}, },
@ -315,10 +314,11 @@ export default {
background-color: #ebf1f7; background-color: #ebf1f7;
.banner { .banner {
background-color: #012458;
background-image: url(../../../static/images/bannerny1.jpg); background-image: url(../../../static/images/bannerny1.jpg);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
background-size: 100% 100%; background-size: contain;
width: 100%; width: 100%;
height: 480px; height: 480px;
display: flex; display: flex;

View File

@ -266,10 +266,11 @@ export default {
background-color: #ebf1f7; background-color: #ebf1f7;
.banner { .banner {
background-color: #012458;
background-image: url(../../../static/images/bannerny1.jpg); background-image: url(../../../static/images/bannerny1.jpg);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
background-size: 100% 100%; background-size: contain;
width: 100%; width: 100%;
height: 480px; height: 480px;
display: flex; display: flex;

View File

@ -395,10 +395,11 @@ export default {
background-color: #ebf1f7; background-color: #ebf1f7;
.banner { .banner {
background-color: #012458;
background-image: url(../../../static/images/bannerny1.jpg); background-image: url(../../../static/images/bannerny1.jpg);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
background-size: 100% 100%; background-size: contain;
width: 100%; width: 100%;
height: 480px; height: 480px;
display: flex; display: flex;

View File

@ -57,7 +57,7 @@
</div> </div>
<div class="filter-container"> <div class="filter-container">
<div class="filter-item"> <div class="filter-item">
<span class="label">航次名称</span> <span class="label">航次编号</span>
<el-select v-model="search.voyageName" placeholder="请选择" size="medium" clearable> <el-select v-model="search.voyageName" placeholder="请选择" size="medium" clearable>
<el-option <el-option
v-for="item in voyageList" v-for="item in voyageList"
@ -109,7 +109,7 @@
/> />
<el-table-column prop="sampleNumber" label="数据样品编号" /> <el-table-column prop="sampleNumber" label="数据样品编号" />
<el-table-column prop="sampleType" label="数据样品类型" /> <el-table-column prop="sampleType" label="数据样品类型" />
<el-table-column prop="voyageName" label="航次名称" /> <el-table-column prop="voyageName" label="航次编号" />
<el-table-column prop="platformType" label="平台类型" /> <el-table-column prop="platformType" label="平台类型" />
<el-table-column prop="platformName" label="平台名称" /> <el-table-column prop="platformName" label="平台名称" />
<el-table-column prop="equipmentType" label="设备类型" /> <el-table-column prop="equipmentType" label="设备类型" />

View File

@ -133,7 +133,7 @@
</div> </div>
<el-table ref="tableData" v-loading="regLoading" stripe border :data="regData" max-height="500" @selection-change="handleSelectionChange" :header-cell-style="{ background: '#dddfe6',color: '#555960',textAlign: 'center' }" :cell-style="{ textAlign: 'center' }"> <el-table ref="tableData" v-loading="regLoading" stripe border :data="regData" max-height="500" @selection-change="handleSelectionChange" :header-cell-style="{ background: '#dddfe6',color: '#555960',textAlign: 'center' }" :cell-style="{ textAlign: 'center' }">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column prop="voyage_name" label="航次名称" /> <el-table-column prop="voyage_name" label="航次编号" />
<el-table-column prop="ship_name" label="科考船舶" /> <el-table-column prop="ship_name" label="科考船舶" />
<el-table-column prop="voyage_start_date" label="航次开始"> <el-table-column prop="voyage_start_date" label="航次开始">
<template slot-scope="scope"> <template slot-scope="scope">

View File

@ -10,7 +10,7 @@
</div> </div>
<div class="filter-container"> <div class="filter-container">
<div class="filter-item"> <div class="filter-item">
<span class="label">航次名称</span> <span class="label">航次编号</span>
<el-input <el-input
v-model="search.voyageName" v-model="search.voyageName"
auto-complete="off" auto-complete="off"
@ -43,7 +43,7 @@
type="selection" type="selection"
width="55" width="55"
/> />
<el-table-column prop="voyageName" label="航次名称" /> <el-table-column prop="voyageName" label="航次编号" />
<el-table-column prop="ship" label="科考船舶" /> <el-table-column prop="ship" label="科考船舶" />
<!-- <el-table-column prop="status" label="计划状态" /> --> <!-- <el-table-column prop="status" label="计划状态" /> -->
<el-table-column prop="isSecret" label="是否涉密"> <el-table-column prop="isSecret" label="是否涉密">

View File

@ -19,7 +19,7 @@
<el-form ref="form" :inline="true" class="filter-box" :rules="rules" label-width="130px" :model="addFrom" :disabled="status=='view'"> <el-form ref="form" :inline="true" class="filter-box" :rules="rules" label-width="130px" :model="addFrom" :disabled="status=='view'">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="航次名称" prop="voyageName"> <el-form-item label="航次编号" prop="voyageName">
<el-input <el-input
v-model="addFrom.voyageName" v-model="addFrom.voyageName"
size="medium" size="medium"
@ -273,7 +273,7 @@ export default {
], ],
rules: { rules: {
voyageName: [ voyageName: [
{ required: true, message: '请输入航次名称', trigger: 'blur' } { required: true, message: '请输入航次编号', trigger: 'blur' }
], ],
ship: [ ship: [
{ required: true, message: '请输入科考船舶', trigger: 'blur' } { required: true, message: '请输入科考船舶', trigger: 'blur' }

View File

@ -23,7 +23,7 @@
</div> </div>
<div class="filter-container"> <div class="filter-container">
<div class="filter-item"> <div class="filter-item">
<span class="label">航次名称</span> <span class="label">航次编号</span>
<el-select v-model="search.voyageName" size="medium" placeholder="请选择" @change="dimensionChange"> <el-select v-model="search.voyageName" size="medium" placeholder="请选择" @change="dimensionChange">
<el-option v-for="item in namelist" :key="item.name" :label="item.name" :value="item.name" /> <el-option v-for="item in namelist" :key="item.name" :label="item.name" :value="item.name" />
</el-select> </el-select>
@ -38,7 +38,7 @@
width="50" width="50"
label="序号" label="序号"
/> />
<el-table-column prop="voyageName" label="航次名称" /> <el-table-column prop="voyageName" label="航次编号" />
<el-table-column prop="ship" label="科考船舶" /> <el-table-column prop="ship" label="科考船舶" />
<!-- <el-table-column prop="status" label="计划状态" /> --> <!-- <el-table-column prop="status" label="计划状态" /> -->
<el-table-column prop="isSecret" label="是否涉密"> <el-table-column prop="isSecret" label="是否涉密">