Commit a06dcdcf authored by xulihui's avatar xulihui

bug修复

parent cef2e7c3
...@@ -42,24 +42,50 @@ public class CommonController ...@@ -42,24 +42,50 @@ public class CommonController
{ {
try try
{ {
log.info("开始下载文件,fileName={}, delete={}", fileName, delete);
if (!FileUtils.checkAllowDownload(fileName)) if (!FileUtils.checkAllowDownload(fileName))
{ {
log.error("文件名称非法,不允许下载: {}", fileName);
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
} }
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = GassafetyProgressConfig.getDownloadPath() + fileName; String filePath = GassafetyProgressConfig.getDownloadPath() + fileName;
log.info("文件完整路径: {}", filePath);
// 检查文件是否存在
java.io.File file = new java.io.File(filePath);
if (!file.exists()) {
log.error("文件不存在: {}", filePath);
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("文件不存在:" + fileName);
return;
}
log.info("文件大小: {} bytes", file.length());
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, realFileName); FileUtils.setAttachmentResponseHeader(response, realFileName);
FileUtils.writeBytes(filePath, response.getOutputStream()); FileUtils.writeBytes(filePath, response.getOutputStream());
log.info("文件下载成功");
if (delete) if (delete)
{ {
FileUtils.deleteFile(filePath); FileUtils.deleteFile(filePath);
log.info("已删除临时文件: {}", fileName);
} }
} }
catch (Exception e) catch (Exception e)
{ {
log.error("下载文件失败", e); log.error("下载文件失败,fileName={}", fileName, e);
try {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("下载失败:" + e.getMessage());
} catch (Exception ex) {
log.error("写入错误信息失败", ex);
}
} }
} }
......
...@@ -23,7 +23,7 @@ public class TEmergencyResources extends BaseEntity ...@@ -23,7 +23,7 @@ public class TEmergencyResources extends BaseEntity
private String resourceName; private String resourceName;
/** 资源类型 */ /** 资源类型 */
@Excel(name = "资源类型") @Excel(name = "资源类型", dictType = "sys_resource_type")
private String resourceType; private String resourceType;
/** 经度 */ /** 经度 */
......
...@@ -50,6 +50,7 @@ public class TPlanInfo extends BaseEntity ...@@ -50,6 +50,7 @@ public class TPlanInfo extends BaseEntity
/*到期时间*/ /*到期时间*/
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "到期时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date endTime; private Date endTime;
/** 图片路径 */ /** 图片路径 */
......
...@@ -85,6 +85,7 @@ ...@@ -85,6 +85,7 @@
<el-table v-loading="loading" :data="resourcesList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="resourcesList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="45" align="center" /> <el-table-column type="selection" width="45" align="center" />
<el-table-column label="编号" align="center" prop="id" width="50"/>
<el-table-column label="资源名称" align="center" prop="resourceName" /> <el-table-column label="资源名称" align="center" prop="resourceName" />
<el-table-column label="资源类型" align="center" prop="resourceType" :formatter="resourceTypeFormat" /> <el-table-column label="资源类型" align="center" prop="resourceType" :formatter="resourceTypeFormat" />
<el-table-column label="经度" align="center" prop="longitude" /> <el-table-column label="经度" align="center" prop="longitude" />
......
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
<el-table v-loading="loading" :data="inforList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="inforList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="编号" align="center" prop="fEnterpriseId" />
<el-table-column label="所属区县名称" align="center" prop="fDistrictName" /> <el-table-column label="所属区县名称" align="center" prop="fDistrictName" />
<el-table-column label="统一社会信用代码" align="center" prop="fBizCode" /> <el-table-column label="统一社会信用代码" align="center" prop="fBizCode" />
<el-table-column label="企业名称" align="center" prop="fCompanyName" /> <el-table-column label="企业名称" align="center" prop="fCompanyName" />
...@@ -192,91 +193,91 @@ ...@@ -192,91 +193,91 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="企业主要负责人数量" prop="fResponsibleCount"> <el-form-item label="企业主要负责人数量" prop="fResponsibleCount">
<el-input v-model="form.fResponsibleCount" type="number" placeholder="请输入企业主要负责人数量" /> <el-input v-model.number="form.fResponsibleCount" type="number" placeholder="请输入企业主要负责人数量" @input="(val) => handleNumberInput(val, 'fResponsibleCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="安全生产管理人数量" prop="fManagementCount"> <el-form-item label="安全生产管理人数量" prop="fManagementCount">
<el-input v-model="form.fManagementCount" type="number" placeholder="请输入安全生产管理人数量" /> <el-input v-model.number="form.fManagementCount" type="number" placeholder="请输入安全生产管理人数量" @input="(val) => handleNumberInput(val, 'fManagementCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="运行、维护和抢修人数量" prop="fMaintenanceCount"> <el-form-item label="运行、维护和抢修人数量" prop="fMaintenanceCount">
<el-input v-model="form.fMaintenanceCount" type="number" placeholder="请输入运行、维护和抢修人数量" /> <el-input v-model.number="form.fMaintenanceCount" type="number" placeholder="请输入运行、维护和抢修人数量" @input="(val) => handleNumberInput(val, 'fMaintenanceCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="企业主要负责人持证数量" prop="fResponsibleCertCount"> <el-form-item label="企业主要负责人持证数量" prop="fResponsibleCertCount">
<el-input v-model="form.fResponsibleCertCount" type="number" placeholder="请输入企业主要负责人持证数量" /> <el-input v-model.number="form.fResponsibleCertCount" type="number" placeholder="请输入企业主要负责人持证数量" @input="(val) => handleNumberInput(val, 'fResponsibleCertCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="安全生产管理人持证数量" prop="fManagementCertCount"> <el-form-item label="安全生产管理人持证数量" prop="fManagementCertCount">
<el-input v-model="form.fManagementCertCount" type="number" placeholder="请输入安全生产管理人持证数量" /> <el-input v-model.number="form.fManagementCertCount" type="number" placeholder="请输入安全生产管理人持证数量" @input="(val) => handleNumberInput(val, 'fManagementCertCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="运行、维护和抢修人支持数量" prop="fMaintenanceCertCount"> <el-form-item label="运行、维护和抢修人支持数量" prop="fMaintenanceCertCount">
<el-input v-model="form.fMaintenanceCertCount" type="number" placeholder="请输入运行、维护和抢修人支持数量" /> <el-input v-model.number="form.fMaintenanceCertCount" type="number" placeholder="请输入运行、维护和抢修人支持数量" @input="(val) => handleNumberInput(val, 'fMaintenanceCertCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="门站数量" prop="fStationCount"> <el-form-item label="门站数量" prop="fStationCount">
<el-input v-model="form.fStationCount" type="number" placeholder="请输入门站数量" /> <el-input v-model.number="form.fStationCount" type="number" placeholder="请输入门站数量" @input="(val) => handleNumberInput(val, 'fStationCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="燃气储配站数量" prop="fStorageStationCount"> <el-form-item label="燃气储配站数量" prop="fStorageStationCount">
<el-input v-model="form.fStorageStationCount" type="number" placeholder="请输入燃气储配站数量" /> <el-input v-model.number="form.fStorageStationCount" type="number" placeholder="请输入燃气储配站数量" @input="(val) => handleNumberInput(val, 'fStorageStationCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="气化站数量" prop="fGasificationStationCount"> <el-form-item label="气化站数量" prop="fGasificationStationCount">
<el-input v-model="form.fGasificationStationCount" type="number" placeholder="请输入气化站数量" /> <el-input v-model.number="form.fGasificationStationCount" type="number" placeholder="请输入气化站数量" @input="(val) => handleNumberInput(val, 'fGasificationStationCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="混气站数量" prop="fMixingStationCount"> <el-form-item label="混气站数量" prop="fMixingStationCount">
<el-input v-model="form.fMixingStationCount" type="number" placeholder="请输入混气站数量" /> <el-input v-model.number="form.fMixingStationCount" type="number" placeholder="请输入混气站数量" @input="(val) => handleNumberInput(val, 'fMixingStationCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="加气站数量" prop="fGasStationCount"> <el-form-item label="加气站数量" prop="fGasStationCount">
<el-input v-model="form.fGasStationCount" type="number" placeholder="请输入加气站数量" /> <el-input v-model.number="form.fGasStationCount" type="number" placeholder="请输入加气站数量" @input="(val) => handleNumberInput(val, 'fGasStationCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="灌装站数量" prop="fFillingStationCount"> <el-form-item label="灌装站数量" prop="fFillingStationCount">
<el-input v-model="form.fFillingStationCount" type="number" placeholder="请输入灌装站数量" /> <el-input v-model.number="form.fFillingStationCount" type="number" placeholder="请输入灌装站数量" @input="(val) => handleNumberInput(val, 'fFillingStationCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="供应站数量" prop="fSupplyStationCount"> <el-form-item label="供应站数量" prop="fSupplyStationCount">
<el-input v-model="form.fSupplyStationCount" type="number" placeholder="请输入供应站数量" /> <el-input v-model.number="form.fSupplyStationCount" type="number" placeholder="请输入供应站数量" @input="(val) => handleNumberInput(val, 'fSupplyStationCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="调压站数量" prop="fPressureStationCount"> <el-form-item label="调压站数量" prop="fPressureStationCount">
<el-input v-model="form.fPressureStationCount" type="number" placeholder="请输入调压站数量" /> <el-input v-model.number="form.fPressureStationCount" type="number" placeholder="请输入调压站数量" @input="(val) => handleNumberInput(val, 'fPressureStationCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="其他站数量" prop="fOtherStationCount"> <el-form-item label="其他站数量" prop="fOtherStationCount">
<el-input v-model="form.fOtherStationCount" type="number" placeholder="请输入其他站数量" /> <el-input v-model.number="form.fOtherStationCount" type="number" placeholder="请输入其他站数量" @input="(val) => handleNumberInput(val, 'fOtherStationCount')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
...@@ -568,6 +569,19 @@ export default { ...@@ -568,6 +569,19 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
/** 处理数字输入限制 */
handleNumberInput(value, field) {
if (value !== null && value !== undefined && value !== '') {
const numValue = Number(value);
if (numValue > 10000000) {
this.$set(this.form, field, 10000000);
this.$message.warning('输入值不能超过10000000');
} else if (numValue < 0) {
this.$set(this.form, field, 0);
this.$message.warning('输入值不能小于0');
}
}
},
/** 查询年度行业指标汇总 - 燃气企业基本情况信息列表 */ /** 查询年度行业指标汇总 - 燃气企业基本情况信息列表 */
getList() { getList() {
this.loading = true; this.loading = true;
......
...@@ -158,7 +158,7 @@ export default { ...@@ -158,7 +158,7 @@ export default {
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
.top { .top {
height: 38.7%; height: 47%;
.left { .left {
width: 70%; width: 70%;
......
...@@ -57,24 +57,24 @@ ...@@ -57,24 +57,24 @@
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<!--<el-col :span="1.5">--> <!--<el-col :span="1.5">-->
<!--<el-button--> <!--<el-button-->
<!--type="success"--> <!--type="success"-->
<!--plain--> <!--plain-->
<!--icon="el-icon-edit"--> <!--icon="el-icon-edit"-->
<!--size="mini"--> <!--size="mini"-->
<!--:disabled="single"--> <!--:disabled="single"-->
<!--@click="handleUpdate"--> <!--@click="handleUpdate"-->
<!--&gt;修改</el-button>--> <!--&gt;修改</el-button>-->
<!--</el-col>--> <!--</el-col>-->
<!--<el-col :span="1.5">--> <!--<el-col :span="1.5">-->
<!--<el-button--> <!--<el-button-->
<!--type="danger"--> <!--type="danger"-->
<!--plain--> <!--plain-->
<!--icon="el-icon-delete"--> <!--icon="el-icon-delete"-->
<!--size="mini"--> <!--size="mini"-->
<!--:disabled="multiple"--> <!--:disabled="multiple"-->
<!--@click="handleDelete"--> <!--@click="handleDelete"-->
<!--&gt;删除</el-button>--> <!--&gt;删除</el-button>-->
<!--</el-col>--> <!--</el-col>-->
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
plain plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
:loading="exportLoading" :loading="exportLoading"
@click="handleExport" @click="handleExport"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
...@@ -230,7 +230,7 @@ ...@@ -230,7 +230,7 @@
</div> </div>
<div style="width: 58%;margin-left: 2%"> <div style="width: 58%;margin-left: 2%">
<div class="titletitle">方案内容</div> <div class="titletitle">方案内容</div>
<!--<editor v-model="form.planContents" style="height: 300px;" readonly="false"/>--> <!--<editor v-model="form.planContents" style="height: 300px;" readonly="false"/>-->
<editor v-if="isOpen" id="editor" v-model="form.planContents" :min-height="300" :readOnly="readonly"/> <editor v-if="isOpen" id="editor" v-model="form.planContents" :min-height="300" :readOnly="readonly"/>
</div> </div>
</div> </div>
...@@ -316,6 +316,7 @@ export default { ...@@ -316,6 +316,7 @@ export default {
planTypeList:[], planTypeList:[],
planLevelList:[], planLevelList:[],
enterpriseList:[], enterpriseList:[],
options: [],
// 弹出层标题 // 弹出层标题
title: "", title: "",
// 是否显示弹出层 // 是否显示弹出层
...@@ -369,8 +370,15 @@ export default { ...@@ -369,8 +370,15 @@ export default {
this.planLevelList = response.data; this.planLevelList = response.data;
}) })
this.getlackenterprise(); this.getlackenterprise();
this.getDicts("enterprise_type").then(response => {
this.options = response.data;
console.log("this.options = " + JSON.stringify(this.options))
});
}, },
methods: { methods: {
enterpriseTypeFormat(row) {
return this.selectDictLabel(this.options, row.enterpriseType);
},
getlackenterprise(){ getlackenterprise(){
getlackenterprise().then(response => { getlackenterprise().then(response => {
this.lackenterpriseList = response.data; this.lackenterpriseList = response.data;
...@@ -413,11 +421,11 @@ export default { ...@@ -413,11 +421,11 @@ export default {
}, },
qiyechang(value){ qiyechang(value){
let obj = {}; let obj = {};
obj = this.enterpriseList.find((item)=>{ obj = this.enterpriseList.find((item)=>{
return item.enterpriseId === value; return item.enterpriseId === value;
}); });
this.form.beyondEnterpriseName = obj.enterpriseName; this.form.beyondEnterpriseName = obj.enterpriseName;
this.form.beyondEnterpriseId = value; this.form.beyondEnterpriseId = value;
}, },
//上传 //上传
getFileInfo(res){ getFileInfo(res){
...@@ -506,19 +514,19 @@ export default { ...@@ -506,19 +514,19 @@ export default {
this.title = "添加应急预案"; this.title = "添加应急预案";
}, },
handleDtail(row){ handleDtail(row){
// this.readonly=true; // this.readonly=true;
// this.open = true; // this.open = true;
// this.fileList = []; // this.fileList = [];
// this.reset(); // this.reset();
// const planId = row.planId || this.ids // const planId = row.planId || this.ids
// getPlanInfo(planId).then(response => { // getPlanInfo(planId).then(response => {
// this.form = response.data; // this.form = response.data;
// this.title = "应急预案详情"; // this.title = "应急预案详情";
// this.fileList = [{name: '附件', url:uploadfile}]; // this.fileList = [{name: '附件', url:uploadfile}];
// this.fileurl = row.iconUrl; // this.fileurl = row.iconUrl;
// }); // });
this.$refs.detail.getDetailInfo(row.planId); this.$refs.detail.getDetailInfo(row.planId);
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
...@@ -561,15 +569,15 @@ export default { ...@@ -561,15 +569,15 @@ export default {
handleDelete(row) { handleDelete(row) {
const planIds = row.planId || this.ids; const planIds = row.planId || this.ids;
this.$confirm('是否确认删除应急预案编号为"' + planIds + '"的数据项?', "警告", { this.$confirm('是否确认删除应急预案编号为"' + planIds + '"的数据项?', "警告", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(function() { }).then(function() {
return delPlanInfo(planIds); return delPlanInfo(planIds);
}).then(() => { }).then(() => {
this.getList(); this.getList();
this.msgSuccess("删除成功"); this.msgSuccess("删除成功");
}).catch(() => {}); }).catch(() => {});
}, },
// 事件类型:1.泄漏 2.火灾 3.爆炸字典翻译 // 事件类型:1.泄漏 2.火灾 3.爆炸字典翻译
planTypeFormat(row, column) { planTypeFormat(row, column) {
...@@ -583,47 +591,77 @@ export default { ...@@ -583,47 +591,77 @@ export default {
handleExport() { handleExport() {
const queryParams = this.queryParams; const queryParams = this.queryParams;
this.$confirm('是否确认导出所有应急预案数据项?', "警告", { this.$confirm('是否确认导出所有应急预案数据项?', "警告", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
this.exportLoading = true; this.exportLoading = true;
return exportPlanInfo(queryParams); return exportPlanInfo(queryParams);
}).then(response => { }).then(response => {
this.download(response.msg); console.log('导出响应:', response);
if (!response.msg) {
this.$message.error('导出失败:未获取到文件名');
this.exportLoading = false; this.exportLoading = false;
}).catch(() => {}); return;
}
// 方法1:使用隐藏的 a 标签触发下载(推荐)
const fileName = response.msg;
const downloadUrl = process.env.VUE_APP_BASE_API + '/common/download?fileName=' + encodeURIComponent(fileName) + '&delete=true';
console.log('下载地址:', downloadUrl);
// 创建隐藏的 a 标签
const link = document.createElement('a');
link.href = downloadUrl;
link.style.display = 'none';
document.body.appendChild(link);
link.click();
// 清理
setTimeout(() => {
document.body.removeChild(link);
this.exportLoading = false;
this.$message.success('导出成功');
}, 100);
}).catch((error) => {
console.error('导出错误:', error);
this.$message.error('导出失败');
this.exportLoading = false;
});
} }
} }
}; };
</script> </script>
<style> <style>
.division{ .division{
display:flex; display:flex;
flex-direction:row; flex-direction:row;
justify-content:flex-start; justify-content:flex-start;
} }
.dbtn { .dbtn {
display: inline-block; display: inline-block;
line-height: normal; line-height: normal;
padding-left: 2px; padding-left: 2px;
padding-right: 2px; padding-right: 2px;
cursor: pointer; cursor: pointer;
border-radius: 3px; border-radius: 3px;
border-style: solid; border-style: solid;
border-width: 0; border-width: 0;
color: rgb(48, 180, 107); color: rgb(48, 180, 107);
} }
.titletitle{ .titletitle{
background: #1c84c6; background: #1c84c6;
color: white;height: color: white;height:
20px;line-height: 20px;line-height:
20px;text-align: center; 20px;text-align: center;
margin-bottom: 10px; margin-bottom: 10px;
} }
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .el-select{ ::v-deep .el-select{
width: 100%; width: 100%;
} }
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment