This commit is contained in:
yyhouc 2023-04-19 20:53:44 +08:00
commit be9637e1b1
12 changed files with 1115 additions and 343 deletions

View File

@ -8,6 +8,36 @@ export function getList(params) {
params,
});
}
export function getPage(current,size,params) {
return request({
url: '/api/'+moduleName+'/ui/disasterInfo/list',
method: 'get',
params:{
current,
size,
...params
},
});
}
export function updateDisasterManage(data){
return request({
url: '/api/'+moduleName+'/ui/disasterInfo/updateBatch',
method: 'put',
data: data,
});
}
export function removeManage(data){
return request({
url: '/api/'+moduleName+'/ui/disasterInfo/removeManage',
method: 'put',
data: data,
});
}
//review
export function review(data) {
return request({

View File

@ -9,9 +9,22 @@ export const getRemoteSensingSourceData = (param) => {
});
};
export const getSelectionCondition = (param) => {
export const getRemoteSensingSourceDataByCondition = (current, size, optionsJson) => {
return request({
url: '/api/' + moduleName + '/ui/disasterInfo/selectCondition',
url: '/api/' + moduleName + '/ui/remoteSensing/Condition',
method: 'get',
contentType: 'application/json',
params: {
optionsJson,
current,
size,
},
});
};
export const getPagesRemoteSensingSourceData = (param) => {
return request({
url: '/api/' + moduleName + '/ui/remoteSensing/PagesData',
method: 'get',
params: param,
});

View File

@ -1,5 +1,5 @@
<template>
<el-dialog title="edit picture" v-model="state.isShowDialog" width="700px" close-on-click-modal="false">
<el-dialog title="edit picture" v-model="state.isShowDialog" width="700px" :close-on-click-modal="false" @close="closeDialog">
<el-form :model="state.ruleForm" size="default" label-width="150px" :rules="rules" ref="adminAddFormRef">
<el-form-item label="upload picture" prop="img">
<el-upload

View File

@ -37,7 +37,8 @@
</el-col>
<el-col :span="14">
<div class="system-role-padding layout-padding-auto layout-padding-view">
<div class="system-user-search mb15" style="display: flex;margin-left: 10px;margin-top: 10px;">
<div class="system-user-search mb15"
style="display: flex;margin-left: 10px;margin-top: 10px;">
<!-- <el-input size="default" placeholder="please enter username" style="max-width: 180px" v-model="state.searchName"
clearable></el-input>
<el-button size="default" type="primary" class="ml10" @click="getTableData">
@ -46,13 +47,19 @@
</el-icon>
search
</el-button>-->
<el-button size="default" type="success" class="ml10" @click="uploadData">
<el-button size="default"
type="success"
class="ml10"
@click="uploadData">
<el-icon>
<ele-Upload />
</el-icon>
upload
</el-button>
<el-button size="default" type="danger" class="ml10" @click="batchDel">
<el-button size="default"
type="danger"
class="ml10"
@click="batchDel">
<el-icon>
<ele-Delete />
</el-icon>
@ -64,7 +71,8 @@
v-loading="state.tableData.loading"
@selection-change="handleSelectionChange"
style="width: 100%">
<el-table-column type="selection" width="55" />
<el-table-column type="selection"
width="55" />
<el-table-column type="index"
label="ID"
width="50" />
@ -79,17 +87,24 @@
label="image"
show-overflow-tooltip>
<template #default="scope">
<el-popover trigger="hover" placement="right" popper-class="max-h-300px overflow-auto" :width="330">
<el-popover trigger="hover"
placement="right"
popper-class="max-h-300px overflow-auto"
:width="330">
<!-- table中原本显示的图片 -->
<template #reference>
<img :src="scope.row.link" :alt="scope.row.link" style="max-height: 130px;max-width: 130px">
<img :src="scope.row.link"
:alt="scope.row.link"
style="max-height: 130px;max-width: 130px">
</template>
<!-- 鼠标移入时弹出的图片 -->
<img :src="scope.row.link" alt="" style="height: 150px;width: 300px">
<img :src="scope.row.link"
alt=""
style="height: 150px;width: 300px">
</el-popover>
</template>
</el-table-column>
<el-table-column prop="size"
<!-- <el-table-column prop="size"
label="size"
show-overflow-tooltip>
<template #default="scope">
@ -98,13 +113,19 @@
</el-table-column>
<el-table-column prop="type"
label="type"
show-overflow-tooltip></el-table-column>
show-overflow-tooltip></el-table-column>-->
<el-table-column prop="Operate"
label="Operate"
show-overflow-tooltip>
<template #default="scope">
<el-button size="small" text type="primary" @click="editData(scope.row)">Edit</el-button>
<el-button size="small" text type="primary" @click="del(scope.row)">Delete</el-button>
<el-button size="small"
text
type="primary"
@click="editData(scope.row)">Edit</el-button>
<el-button size="small"
text
type="primary"
@click="del(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
@ -125,8 +146,10 @@
</el-config-provider>
<RoleDialog ref="roleDialogRef"
@refresh="getTableData()" />
<Upload ref="uploadRef" @callback="getTableData"/>
<EditPicture ref="editUploadRef" @callback="getTableData"/>
<Upload ref="uploadRef"
@callback="getTableData" />
<EditPicture ref="editUploadRef"
@callback="getTableData" />
</div>
</template>
@ -135,7 +158,7 @@ import type { TabsPaneContext } from 'element-plus';
import Upload from './component/upload.vue';
import EditPicture from './component/editPicture.vue';
import { getPicturePage, getDisasterPage, delPicture } from '/@/api/data/pictureInfo.js';
import en from 'element-plus/dist/locale/en.mjs'
import en from 'element-plus/dist/locale/en.mjs';
const activeName = ref('first');
//
@ -174,39 +197,44 @@ const state = reactive({
},
});
const handleSelectionChange = (val) => {
state.multipleSelection = val
}
state.multipleSelection = val;
};
//
const formatName = (name) => {
if (name) {
return name.substr(0,name.indexOf("."));
return name.substr(0, name.indexOf('.'));
}
return name;
}
};
const auditData = (row) => {
let id = row.id
auditRef.value.openDialog([{"id":id}]);
}
let id = row.id;
auditRef.value.openDialog([{ id: id }]);
};
//
const formatSize = (size) => {
var data = "";
if (size < 0.1 * 1024) { //0.1KBB
data = size.toFixed(2) + "B";
} else if (size < 0.1 * 1024 * 1024) {//0.1MBKB
data = (size / 1024).toFixed(2) + "KB";
} else if (size < 0.1 * 1024 * 1024 * 1024) { //0.1GBMB
data = (size / (1024 * 1024)).toFixed(2) + "MB";
} else { //GB
data = (size / (1024 * 1024 * 1024)).toFixed(2) + "GB";
var data = '';
if (size < 0.1 * 1024) {
//0.1KBB
data = size.toFixed(2) + 'B';
} else if (size < 0.1 * 1024 * 1024) {
//0.1MBKB
data = (size / 1024).toFixed(2) + 'KB';
} else if (size < 0.1 * 1024 * 1024 * 1024) {
//0.1GBMB
data = (size / (1024 * 1024)).toFixed(2) + 'MB';
} else {
//GB
data = (size / (1024 * 1024 * 1024)).toFixed(2) + 'GB';
}
var sizestr = data + "";
var len = sizestr.indexOf("\.");
var sizestr = data + '';
var len = sizestr.indexOf('.');
var dec = sizestr.substr(len + 1, 2);
if (dec == "00") {//00
if (dec == '00') {
//00
return sizestr.substring(0, len) + sizestr.substr(len + 3, 2);
}
return sizestr;
}
};
const formatSizeUnits = (size) => {
if (size === 0 || size === -1) return '0 B';
var k = 1000, // or 1024
@ -214,29 +242,31 @@ const formatSizeUnits = (size) => {
i = Math.floor(Math.log(size) / Math.log(k));
return (size / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];
}
};
//
const tableClick = (row, column, event) => {
state.disasterId = row.disasterId;
getTableData();
}
};
//
const getDisasterData = () => {
state.disasterData.loading = true;
getDisasterPage(state.disasterData.param.pageNum,state.disasterData.param.pageSize,{}).then(res=>{
getDisasterPage(state.disasterData.param.pageNum, state.disasterData.param.pageSize, {}).then((res) => {
state.disasterData.data = res.records;
state.disasterData.total = res.total;
state.disasterData.loading = false;
})
}
});
};
//
const getTableData = () => {
state.tableData.loading = true;
getPicturePage(state.tableData.param.pageNum,state.tableData.param.pageSize,{"disasterId_equal":state.disasterId,"isDeleted_equal":0}).then(res=>{
getPicturePage(state.tableData.param.pageNum, state.tableData.param.pageSize, { disasterId_equal: state.disasterId, isDeleted_equal: 0 }).then(
(res) => {
state.tableData.data = res.records;
state.tableData.total = res.total;
})
}
);
setTimeout(() => {
state.tableData.loading = false;
}, 500);
@ -244,7 +274,7 @@ const getTableData = () => {
//
const uploadData = () => {
if (state.disasterId == null) {
ElMessage.warning("Please select the disaster first")
ElMessage.warning('Please select the disaster first');
return false;
}
uploadRef.value.openDialog(state.disasterId);
@ -256,7 +286,7 @@ const editData = (row) => {
//
const batchDel = () => {
if (state.multipleSelection.length == 0) {
ElMessage.warning("Select the data to be operated first");
ElMessage.warning('Select the data to be operated first');
return false;
}
ElMessageBox.confirm(`This action batch deletes the picture dataWhether to continue?`, 'tip', {
@ -265,14 +295,14 @@ const batchDel = () => {
type: 'warning',
})
.then(() => {
let id = state.multipleSelection.map(item=>item.id)
delPicture(id.join()).then(res=>{
let id = state.multipleSelection.map((item) => item.id);
delPicture(id.join()).then((res) => {
getTableData();
ElMessage.success('delete successfully');
})
});
})
.catch(() => {});
}
};
//
const del = (row) => {
ElMessageBox.confirm(`This action will delete the picture${row.name}Whether to continue?`, 'tip', {
@ -281,10 +311,10 @@ const del = (row) => {
type: 'warning',
})
.then(() => {
delPicture(row.id).then(res=>{
delPicture(row.id).then((res) => {
getTableData();
ElMessage.success('delete successfully');
})
});
})
.catch(() => {});
};

View File

@ -1,8 +1,46 @@
<template>
<div>
<div class="system-user-search mb15">
<el-row :gutter="22">
<el-col :span="10">
<div class="system-role-padding layout-padding-auto layout-padding-view">
<span style="margin:2%;font-weight: 600;font-size: 18px;">Disaster Info</span>
<el-table :data="state.disasterData.data"
v-loading="state.disasterData.loading"
style="width: 100%"
highlight-current-row
@row-click="tableClick">
<el-table-column type="index"
label="ID"
width="50" />
<el-table-column prop="disasterType"
label="Disaster type"
show-overflow-tooltip></el-table-column>
<el-table-column prop="disasterCountry"
label="disaster country"
show-overflow-tooltip></el-table-column>
<el-table-column prop="disasterTime"
label="disaster time"
show-overflow-tooltip></el-table-column>
</el-table>
<el-pagination @size-change="onHandleDisasterSizeChange"
@current-change="onHandleDisasterCurrentChange"
class="mt15"
:pager-count="5"
:page-sizes="[10, 20, 30]"
v-model:current-page="state.disasterData.param.pageNum"
background
v-model:page-size="state.disasterData.param.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="state.disasterData.total">
</el-pagination>
</div>
</el-col>
<el-col :span="14">
<div class="system-role-padding layout-padding-auto layout-padding-view">
<div class="system-user-search mb15"
style="display: flex;margin-left: 10px;margin-top: 10px;">
<!-- 选择灾害类型 -->
<el-select v-model="state.value_disasterType"
<!-- <el-select v-model="state.value_disasterType"
size="default"
clearable
placeholder="Select disaster type"
@ -11,18 +49,18 @@
:key="item.value"
:label="item.label"
:value="item.value" />
</el-select>
</el-select> -->
<!-- 选择灾害时间 -->
<el-date-picker v-model="state.value_disasterDate"
<!-- <el-date-picker v-model="state.value_disasterDate"
type="date"
placeholder="Select disaster time"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
class="ml10"
size="default"
@focus="searchDisasterDate" />
@focus="searchDisasterDate" /> -->
<!-- 选择受灾地 -->
<el-select v-model="state.value_disasterCountry"
<!-- <el-select v-model="state.value_disasterCountry"
size="default"
clearable
placeholder="Select disaster country"
@ -32,8 +70,33 @@
:key="item.value"
:label="item.label"
:value="item.value" />
</el-select>
</el-select> -->
<el-row>
<el-col :span="8">
<el-tree-select v-model="state.value_satelliteType"
:data="state.options_satelliteType"
multiple
collapse-tags
collapse-tags-tooltip
:render-after-expand="false"
show-checkbox
clearable
placeholder="Select satellite type" />
</el-col>
<el-col :span="8"
style="padding-left:1%;">
<el-tree-select v-model="state.value_resolution"
:data="state.options_resolution"
multiple
collapse-tags
collapse-tags-tooltip
:render-after-expand="false"
show-checkbox
clearable
placeholder="Select resolution" />
</el-col>
<el-col :span="5">
<el-button size="default"
type="primary"
class="ml10"
@ -43,6 +106,8 @@
</el-icon>
Search
</el-button>
</el-col>
</el-row>
</div>
<!-- id卫星类型生产日期产品谱段产品分辨率云覆盖量景中心经纬度元数据下载链接缩略图 支撑单位 -->
@ -132,14 +197,19 @@
:total="state.tableData.total">
</el-pagination>
</div>
</el-col>
</el-row>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue';
import { getRemoteSensingSourceData, getSelectionCondition } from "/@/api/remoteSensingSourceData/remoteSensingSourceData.js";
import { getRemoteSensingSourceData, getRemoteSensingSourceDataByCondition, getPagesRemoteSensingSourceData } from "/@/api/remoteSensingSourceData/remoteSensingSourceData.js";
import { getDisasterPage } from '/@/api/data/otherData.js'
const state = reactive({
tableData: {
disasterData: {
data: [],
total: 0,
loading: false,
@ -149,36 +219,351 @@ const state = reactive({
pageSize: 10,
},
},
tableData: {
data: [],
total: null,
loading: false,
param: {
search: '',
pageNum: 1,
pageSize: 10,
},
},
disasterId: null,
listData: [],
satelliteCodeList: [],
//
options_disasterType: [],
value_disasterType: '',
value_disasterDate: '',
options_disasterCountry: [],
value_disasterCountry: [],
// options_disasterType: [],
// value_disasterType: '',
// value_disasterDate: '',
// options_disasterCountry: [],
// value_disasterCountry: [],
options_resolution: [{
label: '<0.8m',
value: '<0.8m'
}, {
label: '0.8m-1m',
value: '0.8m-1m'
}, {
label: '1m-10m',
value: '1m-10m'
}, {
label: '10m-30m',
value: '10m-30m'
}, {
label: '30m-50m',
value: '30m-50m'
}, {
label: '>50m',
value: '>50m'
}],
options_satelliteType: [{
label: 'Optical satellite',
value: 'Optical satellite'
}, {
label: 'Hyperspectral satellite',
value: 'Hyperspectral satellite'
}, {
label: 'Radar satellite',
value: 'Radar satellite'
}, {
label: 'Night light satellite',
value: 'Night light satellite'
}],
value_satelliteType: '',
value_resolution: [],
requestData: [],
requestResolution: [],
requestSatellite: []
})
//
const getDisasterData = () => {
state.disasterData.loading = true;
getDisasterPage(state.disasterData.param.pageNum, state.disasterData.param.pageSize, {}).then(res => {
state.disasterData.data = res.records;
state.disasterData.total = res.total;
state.disasterData.loading = false;
})
}
//
const tableClick = (row) => {
state.disasterId = row.disasterId;
getData()
}
//
const getData = () => {
let data = {
disasterId: state.disasterId,
}
getPagesRemoteSensingSourceData(data).then(
(res) => {
console.log(res.records);
state.requestData = res.records;
state.tableData.total = res.total;
})
// getRemoteSensingSourceDataByCondition(1, 1000, JSON.stringify(data)).then(
// (res) => {
// state.requestData = res.records;
// for (let index = 0; index < res.records.length; index++) {
// state.requestResolution[index] = state.requestData[index].productResolution
// state.requestSatellite[index] = state.requestData[index].satelliteCode
// }
// state.requestResolution = new Set(state.requestResolution)
// state.requestSatellite = new Set(state.requestSatellite)
// })
}
//
const searchRemoteSensingSourceData = () => {
const select = {
"disasterType": state.value_disasterType,
"disasterDate": state.value_disasterDate,
"disasterCountry": state.value_disasterCountry,
"size": state.tableData.param.pageSize,
"current": state.tableData.param.pageNum
//
for (var i = 0; i < state.value_satelliteType.length; i++) {
if (state.value_satelliteType[i] == state.options_satelliteType[0].value) {
state.satelliteCodeList.push('Landset8_OLI_TIRS');
}
else if (state.value_satelliteType[i] == state.options_satelliteType[1].value) {
let arrData = ['Sentinel -2_Sentinel - 2A', 'Sentinel -2_Sentinel - 2B', 'GF1', 'GF1B', 'GF1C', 'GF1D', 'GF2', 'GF4', 'GF6'];
arrData.forEach(item => {
state.satelliteCodeList.push(item);
})
}
}
//
getRemoteSensingSourceData(select).then(
//
var productResolutionMin = 0
var productResolutionMax = null
for (let index = 0; index < state.value_resolution.length; index++) {
if (state.value_resolution[index] == state.options_resolution[0].value) {
let data = {
productResolutionMin: 0,
productResolutionMax: 0.8
}
state.listData.push(data);
}
if (state.value_resolution[index] == state.options_resolution[1].value) {
let data = {
productResolutionMin: 0.8,
productResolutionMax: 1
}
state.listData.push(data);
}
if (state.value_resolution[index] == state.options_resolution[2].value) {
let data = {
productResolutionMin: 1,
productResolutionMax: 10
}
state.listData.push(data);
}
if (state.value_resolution[index] == state.options_resolution[3].value) {
let data = {
productResolutionMin: 10,
productResolutionMax: 30
}
state.listData.push(data);
}
if (state.value_resolution[index] == state.options_resolution[4].value) {
let data = {
productResolutionMin: 30,
productResolutionMax: 50
}
state.listData.push(data);
}
if (state.value_resolution[index] == state.options_resolution[5].value) {
let data = {
productResolutionMin: 50,
productResolutionMax: 1000
}
state.listData.push(data);
}
}
let dataNew = {};
if (state.satelliteCodeList.length != 0) {
dataNew = {
disasterId: state.disasterId,
satelliteCodeList: state.satelliteCodeList.join(","),
productResolutionVos: state.listData
}
} else {
dataNew = {
disasterId: state.disasterId,
productResolutionVos: state.listData
}
}
getDataByCondition(state.tableData.param.pageNum, state.tableData.param.pageSize, dataNew)
}
//
const getDataByCondition = (current, size, dataNew) => {
console.log('传过来的数据:', state.tableData.param.pageNum);
getRemoteSensingSourceDataByCondition(current, size, JSON.stringify(dataNew)).then(
(res) => {
state.requestData = res.records;
state.tableData.total = res.total;
state.tableData.param.pageNum = res.current;
state.tableData.param.pageSize = res.size;
console.log(state.requestData)
})
}
//
const getTableData = (condition) => {
state.tableData.loading = true;
getPagesRemoteSensingSourceData(condition).then(
(res) => {
state.requestData = res.records;
state.tableData.total = res.total;
var requestSatellite = []
var requestResolution = []
for (let index = 0; index < state.requestData.length; index++) {
requestSatellite[index] = state.requestData[index].satelliteCode
requestResolution[index] = state.requestData[index].productResolution
}
//
var uniSatellite = unique(requestSatellite);
var lenSatellite = uniSatellite.length
for (let index = 0; index < lenSatellite; index++) {
let A = {}
A['label'] = uniSatellite[index]
A['value'] = uniSatellite[index]
state.options_satelliteType[index] = A
}
//
var uniResolution = unique(requestResolution);
var lenResolution = uniResolution.length
for (let index = 0; index < lenResolution; index++) {
let A = {}
A['label'] = uniResolution[index]
A['value'] = uniResolution[index]
state.options_resolution[index] = A
}
})
// setTimeout(() => {
// state.tableData.loading = false;
// }, 500);
}
//
const getSatelliteAndResolution = () => {
var requestSatellite = []
var requestResolution = []
for (let index = 0; index < state.requestData.length; index++) {
requestSatellite[index] = state.requestData[index].satelliteCode
requestResolution[index] = state.requestData[index].productResolution
}
//
var uniSatellite = unique(requestSatellite);
var lenSatellite = uniSatellite.length
for (let index = 0; index < lenSatellite; index++) {
let A = {}
A['label'] = uniSatellite[index]
A['value'] = uniSatellite[index]
state.options_satelliteType[index] = A
}
//
var uniResolution = unique(requestResolution);
var lenResolution = uniResolution.length
for (let index = 0; index < lenResolution; index++) {
let A = {}
A['label'] = uniResolution[index]
A['value'] = uniResolution[index]
state.options_resolution[index] = A
}
}
//
const unique = (arr) => {
return arr.filter(function (item, index, arr) {
return arr.indexOf(item, 0) === index;
});
}
// size
const onHandleDisasterSizeChange = (val) => {
state.disasterData.param.pageSize = val;
getDisasterData();
};
// current
const onHandleDisasterCurrentChange = (val) => {
state.disasterData.param.pageNum = val;
getDisasterData();
};
// size
const onHandleSizeChange = (val) => {
state.tableData.param.pageSize = val;
state.tableData.param.pageNum = state.tableData.param.pageNum;
let dataNew = {};
if (state.satelliteCodeList.length != 0) {
dataNew = {
disasterId: state.disasterId,
satelliteCodeList: state.satelliteCodeList.join(","),
productResolutionVos: state.listData
}
} else {
dataNew = {
disasterId: state.disasterId,
productResolutionVos: state.listData
}
}
getDataByCondition(state.tableData.param.pageNum, state.tableData.param.pageSize, dataNew)
// var condition = {
// current: state.tableData.param.pageNum,
// size: 10,
// disasterId: state.disasterId,
// satelliteCode: state.satelliteSelected,
// productResolution: state.resolutionSelected
// }
// // searchRemoteSensingSourceData()
// getTableData(condition)
};
// current
const onHandleCurrentChange = (val) => {
state.tableData.param.pageSize = state.tableData.param.pageSize;
state.tableData.param.pageNum = val;
console.log('当前页:', state.tableData.param.pageNum);
let dataNew = {};
if (state.satelliteCodeList.length != 0) {
dataNew = {
disasterId: state.disasterId,
satelliteCodeList: state.satelliteCodeList.join(","),
productResolutionVos: state.listData
}
} else {
dataNew = {
disasterId: state.disasterId,
productResolutionVos: state.listData
}
}
getDataByCondition(state.tableData.param.pageNum, state.tableData.param.pageSize, dataNew)
// var condition = {
// current: state.tableData.param.pageNum,
// size: 10,
// disasterId: state.disasterId,
// satelliteCode: state.satelliteSelected,
// productResolution: state.resolutionSelected
// }
// searchRemoteSensingSourceData()
// getTableData(condition)
};
onMounted(() => {
getDisasterData();
})
//
const searchDisasterCountry = () => {
const selectCountry = {
@ -246,25 +631,13 @@ const searchDisasterDate = () => {
})
}
}
//
const onHandleSizeChange = (val) => {
state.tableData.param.pageSize = val;
state.tableData.param.pageNum = state.tableData.param.pageNum;
searchRemoteSensingSourceData()
};
//
const onHandleCurrentChange = (val) => {
state.tableData.param.pageSize = state.tableData.param.pageSize;
state.tableData.param.pageNum = val;
searchRemoteSensingSourceData()
};
onMounted(() => {
})
</script>
<style scoped lang="scss">
.system-role-padding {
padding-bottom: 2%;
}
.el-pagination {
padding-left: 1%;
}
</style>

View File

@ -84,6 +84,8 @@
v-model="state.satelliteSelected"
:data="sensor"
multiple
collapse-tags
collapse-tags-tooltip
:render-after-expand="false"
show-checkbox
placeholder="Select satellite type" />
@ -382,6 +384,10 @@ const ClearCondition = () => {
}
.coordinateBtn {
width: 90%;
word-break: keep-all;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.lowerBtn {
width: 90%;

View File

@ -558,7 +558,7 @@ const setApplyDisaster = (data) => {
})
setTimeout(() => {
initBarChart(xData,yData);
}, 1000);
}, 700);
}
/**
* 设置灾种数量占比

View File

@ -35,18 +35,18 @@
<el-table-column prop="disasterKeyword"
label="DisasterKeyword"
show-overflow-tooltip></el-table-column>
<el-table-column prop="disasterLevel"
label="DisasterLevel"
show-overflow-tooltip></el-table-column>
<el-table-column prop="disasterTime"
label="DisasterTime"
show-overflow-tooltip></el-table-column>
<el-table-column prop="managerName"
label="ManagerName"
show-overflow-tooltip></el-table-column>
<el-table-column prop="sponsorOrganization"
label="SponsorOrganization"
show-overflow-tooltip></el-table-column>
<el-table-column prop="researchField"
label="ResearchField"
show-overflow-tooltip></el-table-column>
<el-table-column prop="occupation"
label="occupation"
show-overflow-tooltip></el-table-column>
<el-table-column prop="Operate"
label="Operate"
show-overflow-tooltip>

View File

@ -0,0 +1,129 @@
<template>
<el-dialog title="management disaster" v-model="state.isShowDialog" width="900px" @close="closeDialog">
<el-config-provider :locale="en">
<div class="system-user-search mb15" style="display: flex;margin-left: 10px;margin-top: 10px;">
<el-input size="default" placeholder="please enter disaster type" style="max-width: 190px" v-model="state.searchName"
clearable></el-input>
<el-button size="default" type="primary" class="ml10" @click="getDisaterInfo">
<el-icon>
<ele-Search/>
</el-icon>
search
</el-button>
</div>
<el-table :data="state.tableData.data" :row-key="getRowKeys" @selection-change="handleSelectionChange" ref="tableRef">
<el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column property="dictValue" label="DisasterType" width="150" />
<el-table-column property="disasterCountry" label="DisasterCountry" width="200" />
<el-table-column property="disasterKeyword" label="DisasterKeyword" width="200" />d
<el-table-column property="disasterTime" label="DisasterTime" />
<el-table-column property="disasterLevel" label="DisasterLevel" />
</el-table>
<el-pagination @size-change="onHandleSizeChange"
@current-change="onHandleCurrentChange"
class="mt15"
:pager-count="5"
:page-sizes="[10, 20, 30]"
v-model:current-page="state.tableData.param.pageNum"
background
v-model:page-size="state.tableData.param.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="state.tableData.total">
</el-pagination>
</el-config-provider>
<template #footer>
<span class="dialog-footer">
<el-button @click="onCancel" size="default">cancel</el-button>
<el-button type="primary" @click="onSubmit" size="default" :loading="state.isLoading">confirm</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup>
import en from 'element-plus/dist/locale/en.mjs'
import {getPage,updateDisasterManage} from '/@/api/disasterInfo/index.js';
import {reactive, ref} from "vue";
import {ElMessage} from "element-plus";
const emit = defineEmits(['callback']);
const tableRef = ref();
const state = reactive({
isShowDialog:false,
table:false,
loading:false,
chiefId:null,
multipleSelection:[],
searchName:'',
tableData: {
data: [],
total: 0,
loading: false,
param: {
search: '',
pageNum: 1,
pageSize: 5,
},
},
});
const getRowKeys = (row) => {
return row.id
}
const handleSelectionChange = (val) => {
state.multipleSelection = val
}
//
const openDialog = (chiefId) => {
state.isShowDialog = true;
state.chiefId = chiefId;
getDisaterInfo();
};
//
const getDisaterInfo = () => {
getPage(state.tableData.param.pageNum,state.tableData.param.pageSize,{"respondStatus":3,"chiefId":state.chiefId,"disasterType":state.searchName}).then(res=>{
state.tableData.data = res.records;
state.tableData.total = res.total;
})
}
//
const closeDialog = () => {
state.isShowDialog = false;
state.multipleSelection = [];
tableRef.value.clearSelection();
};
const onCancel = () => {
closeDialog();
}
const onSubmit = () => {
if(state.multipleSelection.length == 0){
ElMessage.warning("Please check the data first");
return false;
}
//{"id":"","chiefId":""}
const saveRes = state.multipleSelection.map(item=> ({id:item.id,chiefId:state.chiefId}))
updateDisasterManage(saveRes).then(res=>{
ElMessage.success("Management success")
emit('callback');
closeDialog();
}).catch(err=>{
})
}
//
const onHandleSizeChange = (val) => {
state.tableData.param.pageSize = val;
getDisaterInfo();
};
//
const onHandleCurrentChange = (val) => {
state.tableData.param.pageNum = val;
getDisaterInfo();
};
//
defineExpose({
openDialog,
});
</script>
<style scoped>
</style>

View File

@ -0,0 +1,158 @@
<template>
<el-config-provider :locale="en">
<el-drawer
v-model="state.table"
title="Management Disaster"
direction="rtl"
size="50%"
>
<div class="system-user-search mb15" style="display: flex;margin-left: 10px;margin-top: 10px;">
<el-input size="default" placeholder="please enter disaster type" style="max-width: 190px" v-model="state.searchName"
clearable></el-input>
<el-button size="default" type="primary" class="ml10" @click="getTableData">
<el-icon>
<ele-Search/>
</el-icon>
search
</el-button>
<el-button size="default" type="success" class="ml10" @click="addDisaster">
<el-icon>
<ele-FolderAdd/>
</el-icon>
add
</el-button>
<el-button size="default" type="danger" class="ml10" @click="batchDelete">
<el-icon>
<ele-Delete/>
</el-icon>
batch delete
</el-button>
</div>
<el-table :data="state.tableData.data" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column property="dictValue" label="DisasterType" width="150" />
<el-table-column property="disasterCountry" label="DisasterCountry" width="200" />
<el-table-column property="disasterTime" label="DisasterTime" />
<el-table-column prop="Operate"
label="Operate"
show-overflow-tooltip>
<template #default="scope">
<el-button link type="primary" size="small" @click="deleteDisaster(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination @size-change="onHandleSizeChange"
@current-change="onHandleCurrentChange"
class="mt15"
:pager-count="5"
:page-sizes="[10, 20, 30]"
v-model:current-page="state.tableData.param.pageNum"
background
v-model:page-size="state.tableData.param.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="state.tableData.total">
</el-pagination>
<DisasterInfo ref="disasterInfoRef" @callback="getTableData"/>
</el-drawer>
</el-config-provider>
</template>
<script setup>
import en from 'element-plus/dist/locale/en.mjs'
import {reactive, ref} from "vue";
import DisasterInfo from './disasterInfo.vue';
import {getPage,removeManage} from '/@/api/disasterInfo/index.js';
import {ElMessage, ElMessageBox} from "element-plus";
const disasterInfoRef = ref();
const state = reactive({
table:false,
loading:false,
userId:null,
multipleSelection:[],
searchName:'',
tableData: {
data: [],
total: 0,
loading: false,
param: {
search: '',
pageNum: 1,
pageSize: 10,
},
},
});
const handleSelectionChange = (val) => {
state.multipleSelection = val
}
const addDisaster = () => {
disasterInfoRef.value.openDialog(state.userId);
}
//chief
const batchDelete = () => {
if(state.multipleSelection.length == 0){
ElMessage.warning("Select the data to be operated first");
return false;
}
ElMessageBox.confirm(`This action batch deletes the disaster dataWhether to continue?`, 'tip', {
confirmButtonText: 'confirm',
cancelButtonText: 'cancel',
type: 'warning',
})
.then(() => {
let id = state.multipleSelection.map(item=>({id:item.id,chiefId:null}))
removeManage(id).then(res=>{
getTableData();
ElMessage.success('delete successfully');
})
})
.catch(() => {});
}
const deleteDisaster = (row) => {
ElMessageBox.confirm(`This operation will delete the disaster${row.dictValue}Whether to continue?`, 'tip', {
confirmButtonText: 'confirm',
cancelButtonText: 'cancel',
type: 'warning',
})
.then(() => {
let delData = [{"id":row.id,"cheif":null}]
removeManage(delData).then(res=>{
getTableData();
ElMessage.success('Deleted successfully');
})
})
.catch(() => {});
}
//
const openDialog = (userId) => {
state.table = true;
state.userId = userId;
getTableData();
};
//
const getTableData = () => {
getPage(state.tableData.param.pageNum,state.tableData.param.pageSize,{"chiefIdEquals":state.userId,"disasterType":state.searchName}).then(res=>{
state.tableData.data = res.records;
state.tableData.total = res.total;
})
}
//
const onHandleSizeChange = (val) => {
state.tableData.param.pageSize = val;
getTableData();
};
//
const onHandleCurrentChange = (val) => {
state.tableData.param.pageNum = val;
getTableData();
};
//
defineExpose({
openDialog,
});
</script>
<style scoped>
</style>

View File

@ -53,6 +53,7 @@
<template #default="scope">
<el-button link type="primary" size="small" @click="editUser(scope.row)">Edit</el-button>
<el-button link type="primary" size="small" @click="deleteUser(scope.row)">Delete</el-button>
<el-button link type="primary" size="small" @click="manage(scope.row)">Manage</el-button>
</template>
</el-table-column>
</el-table>
@ -71,6 +72,7 @@
</div>
<AddAdministrator ref="administratorRef" @callback="getTableData"/>
<EditAdministrator ref="editAdministratorRef" @callback="getTableData"/>
<ManageDisaster ref="manageRef"/>
<RoleDialog ref="roleDialogRef"
@refresh="getTableData()" />
</div>
@ -79,12 +81,36 @@
<script lang="ts" setup name="systemRole">
import en from 'element-plus/dist/locale/en.mjs'
import type { TabsPaneContext } from 'element-plus';
import ManageDisaster from './component/manageDisaster.vue';
import AddAdministrator from './component/addAdministrator.vue';
import EditAdministrator from './component/editAdministrator.vue';
import {getAdminPage,remove} from '/@/api/response/administrator.js';
const gridData = [
{
date: '2016-05-02',
name: 'Peter Parker',
address: 'Queens, New York City',
},
{
date: '2016-05-04',
name: 'Peter Parker',
address: 'Queens, New York City',
},
{
date: '2016-05-01',
name: 'Peter Parker',
address: 'Queens, New York City',
},
{
date: '2016-05-03',
name: 'Peter Parker',
address: 'Queens, New York City',
},
]
const activeName = ref('first');
const administratorRef = ref();
const editAdministratorRef = ref();
const manageRef = ref();
const handleClick = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event);
};
@ -99,6 +125,8 @@ const RoleDialog = defineAsyncComponent(() => import('/@/views/system/role/dialo
//
const roleDialogRef = ref();
const state = reactive({
table:false,
loading:false,
multipleSelection:[],
searchName:'',
tableData: {
@ -170,6 +198,11 @@ const deleteUser = (row) => {
})
.catch(() => {});
};
//chief
const manage = (row) => {
manageRef.value.openDialog(row.id);
//state.table = true;
}
//
const onHandleSizeChange = (val) => {
state.tableData.param.pageSize = val;

View File

@ -30,7 +30,7 @@ const viteConfig = defineConfig((mode) => {
hmr: true,
proxy: {
'/api': {
target: 'http://192.168.31.250:9090',
target: 'http://192.168.31.14:9090',
ws: true,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),