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) {
return request({
url: '/voyage/reg/page.htm',

View File

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

View File

@ -10,7 +10,7 @@
</el-row>
<el-row>
<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-option v-for="item in voyageOptions" :key="item.tsy_id" :label="item.voyage_name" :value="item.tsy_id"/>
</el-select>
@ -304,7 +304,7 @@ export default {
return {
//
disabled: false,
//
//
voyageOptions: [],
//
platformDicts: [],
@ -411,7 +411,7 @@ export default {
this.getVoyageList()
},
methods: {
//
//
getVoyageList() {
voyageRegList().then(res => {
this.voyageOptions = res.page.records
@ -453,7 +453,7 @@ export default {
this.mainMemberOptions = mainArr
})
},
//
//
changeVoyage(val) {
this.getMemberList(val)
this.showPlatform = val ? true : false

View File

@ -32,7 +32,7 @@
</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-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="voyage_start_date" label="航次开始">
<template slot-scope="scope">
@ -82,7 +82,7 @@
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row>
<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-form-item>
</el-col>

View File

@ -287,7 +287,7 @@ export default {
}
},
voyageList: [], //
currentVoyage: null, //
currentVoyage: null, //
highlightLayer: null, //
dataUpdateList: [],
sampleDataUpdateList: [],
@ -368,7 +368,7 @@ export default {
//
handleSelectionChange(val) {
//
//
const newVoyages = val.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-row :gutter="20">
<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-option
v-for="item in voyageList"
@ -850,7 +850,7 @@ export default {
voyageList: [],
rules: {
voyageName: [
{ required: true, message: '请输入航次名称', trigger: 'blur' }
{ required: true, message: '请输入航次编号', trigger: 'blur' }
],
platformName: [
{ required: true, message: '请输入平台名称', trigger: 'blur' }

View File

@ -41,7 +41,7 @@
width="55"
/>
<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="status" label="计划状态" /> -->
<el-table-column prop="submariner" label="潜次号" />

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -133,7 +133,7 @@
</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-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="voyage_start_date" label="航次开始">
<template slot-scope="scope">

View File

@ -10,7 +10,7 @@
</div>
<div class="filter-container">
<div class="filter-item">
<span class="label">航次名称</span>
<span class="label">航次编号</span>
<el-input
v-model="search.voyageName"
auto-complete="off"
@ -43,7 +43,7 @@
type="selection"
width="55"
/>
<el-table-column prop="voyageName" label="航次名称" />
<el-table-column prop="voyageName" label="航次编号" />
<el-table-column prop="ship" label="科考船舶" />
<!-- <el-table-column prop="status" 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-row :gutter="20">
<el-col :span="8">
<el-form-item label="航次名称" prop="voyageName">
<el-form-item label="航次编号" prop="voyageName">
<el-input
v-model="addFrom.voyageName"
size="medium"
@ -273,7 +273,7 @@ export default {
],
rules: {
voyageName: [
{ required: true, message: '请输入航次名称', trigger: 'blur' }
{ required: true, message: '请输入航次编号', trigger: 'blur' }
],
ship: [
{ required: true, message: '请输入科考船舶', trigger: 'blur' }

View File

@ -23,7 +23,7 @@
</div>
<div class="filter-container">
<div class="filter-item">
<span class="label">航次名称</span>
<span class="label">航次编号</span>
<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-select>
@ -38,7 +38,7 @@
width="50"
label="序号"
/>
<el-table-column prop="voyageName" label="航次名称" />
<el-table-column prop="voyageName" label="航次编号" />
<el-table-column prop="ship" label="科考船舶" />
<!-- <el-table-column prop="status" label="计划状态" /> -->
<el-table-column prop="isSecret" label="是否涉密">