Commit a06dcdcf authored by xulihui's avatar xulihui

bug修复

parent cef2e7c3
......@@ -42,24 +42,50 @@ public class CommonController
{
try
{
log.info("开始下载文件,fileName={}, delete={}", fileName, delete);
if (!FileUtils.checkAllowDownload(fileName))
{
log.error("文件名称非法,不允许下载: {}", fileName);
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
}
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
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);
FileUtils.setAttachmentResponseHeader(response, realFileName);
FileUtils.writeBytes(filePath, response.getOutputStream());
log.info("文件下载成功");
if (delete)
{
FileUtils.deleteFile(filePath);
log.info("已删除临时文件: {}", fileName);
}
}
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
private String resourceName;
/** 资源类型 */
@Excel(name = "资源类型")
@Excel(name = "资源类型", dictType = "sys_resource_type")
private String resourceType;
/** 经度 */
......
......@@ -50,6 +50,7 @@ public class TPlanInfo extends BaseEntity
/*到期时间*/
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "到期时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date endTime;
/** 图片路径 */
......
......@@ -85,6 +85,7 @@
<el-table v-loading="loading" :data="resourcesList" @selection-change="handleSelectionChange">
<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="resourceType" :formatter="resourceTypeFormat" />
<el-table-column label="经度" align="center" prop="longitude" />
......
......@@ -78,6 +78,7 @@
<el-table v-loading="loading" :data="inforList" @selection-change="handleSelectionChange">
<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="fBizCode" />
<el-table-column label="企业名称" align="center" prop="fCompanyName" />
......@@ -192,91 +193,91 @@
<el-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
</el-row>
<el-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
</el-row>
<el-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
</el-row>
<el-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
</el-row>
<el-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
</el-row>
<el-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
</el-row>
<el-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
</el-row>
<el-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
......@@ -568,6 +569,19 @@ export default {
this.getList();
},
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() {
this.loading = true;
......
......@@ -158,7 +158,7 @@ export default {
flex-direction: column;
height: 100%;
.top {
height: 38.7%;
height: 47%;
.left {
width: 70%;
......
......@@ -57,24 +57,24 @@
>新增</el-button>
</el-col>
<!--<el-col :span="1.5">-->
<!--<el-button-->
<!--type="success"-->
<!--plain-->
<!--icon="el-icon-edit"-->
<!--size="mini"-->
<!--:disabled="single"-->
<!--@click="handleUpdate"-->
<!--&gt;修改</el-button>-->
<!--<el-button-->
<!--type="success"-->
<!--plain-->
<!--icon="el-icon-edit"-->
<!--size="mini"-->
<!--:disabled="single"-->
<!--@click="handleUpdate"-->
<!--&gt;修改</el-button>-->
<!--</el-col>-->
<!--<el-col :span="1.5">-->
<!--<el-button-->
<!--type="danger"-->
<!--plain-->
<!--icon="el-icon-delete"-->
<!--size="mini"-->
<!--:disabled="multiple"-->
<!--@click="handleDelete"-->
<!--&gt;删除</el-button>-->
<!--<el-button-->
<!--type="danger"-->
<!--plain-->
<!--icon="el-icon-delete"-->
<!--size="mini"-->
<!--:disabled="multiple"-->
<!--@click="handleDelete"-->
<!--&gt;删除</el-button>-->
<!--</el-col>-->
<el-col :span="1.5">
<el-button
......@@ -82,7 +82,7 @@
plain
icon="el-icon-download"
size="mini"
:loading="exportLoading"
:loading="exportLoading"
@click="handleExport"
>导出</el-button>
</el-col>
......@@ -230,7 +230,7 @@
</div>
<div style="width: 58%;margin-left: 2%">
<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"/>
</div>
</div>
......@@ -316,6 +316,7 @@ export default {
planTypeList:[],
planLevelList:[],
enterpriseList:[],
options: [],
// 弹出层标题
title: "",
// 是否显示弹出层
......@@ -369,8 +370,15 @@ export default {
this.planLevelList = response.data;
})
this.getlackenterprise();
this.getDicts("enterprise_type").then(response => {
this.options = response.data;
console.log("this.options = " + JSON.stringify(this.options))
});
},
methods: {
enterpriseTypeFormat(row) {
return this.selectDictLabel(this.options, row.enterpriseType);
},
getlackenterprise(){
getlackenterprise().then(response => {
this.lackenterpriseList = response.data;
......@@ -413,11 +421,11 @@ export default {
},
qiyechang(value){
let obj = {};
obj = this.enterpriseList.find((item)=>{
return item.enterpriseId === value;
});
this.form.beyondEnterpriseName = obj.enterpriseName;
this.form.beyondEnterpriseId = value;
obj = this.enterpriseList.find((item)=>{
return item.enterpriseId === value;
});
this.form.beyondEnterpriseName = obj.enterpriseName;
this.form.beyondEnterpriseId = value;
},
//上传
getFileInfo(res){
......@@ -506,19 +514,19 @@ export default {
this.title = "添加应急预案";
},
handleDtail(row){
// this.readonly=true;
// this.open = true;
// this.fileList = [];
// this.reset();
// const planId = row.planId || this.ids
// getPlanInfo(planId).then(response => {
// this.form = response.data;
// this.title = "应急预案详情";
// this.fileList = [{name: '附件', url:uploadfile}];
// this.fileurl = row.iconUrl;
// });
// this.readonly=true;
// this.open = true;
// this.fileList = [];
// this.reset();
// const planId = row.planId || this.ids
// getPlanInfo(planId).then(response => {
// this.form = response.data;
// this.title = "应急预案详情";
// this.fileList = [{name: '附件', url:uploadfile}];
// this.fileurl = row.iconUrl;
// });
this.$refs.detail.getDetailInfo(row.planId);
this.$refs.detail.getDetailInfo(row.planId);
},
/** 修改按钮操作 */
handleUpdate(row) {
......@@ -561,15 +569,15 @@ export default {
handleDelete(row) {
const planIds = row.planId || this.ids;
this.$confirm('是否确认删除应急预案编号为"' + planIds + '"的数据项?', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(function() {
return delPlanInfo(planIds);
}).then(() => {
this.getList();
this.msgSuccess("删除成功");
}).catch(() => {});
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(function() {
return delPlanInfo(planIds);
}).then(() => {
this.getList();
this.msgSuccess("删除成功");
}).catch(() => {});
},
// 事件类型:1.泄漏 2.火灾 3.爆炸字典翻译
planTypeFormat(row, column) {
......@@ -583,47 +591,77 @@ export default {
handleExport() {
const queryParams = this.queryParams;
this.$confirm('是否确认导出所有应急预案数据项?', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.exportLoading = true;
return exportPlanInfo(queryParams);
}).then(response => {
this.download(response.msg);
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.exportLoading = true;
return exportPlanInfo(queryParams);
}).then(response => {
console.log('导出响应:', response);
if (!response.msg) {
this.$message.error('导出失败:未获取到文件名');
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>
<style>
.division{
display:flex;
flex-direction:row;
justify-content:flex-start;
}
.dbtn {
display: inline-block;
line-height: normal;
padding-left: 2px;
padding-right: 2px;
cursor: pointer;
border-radius: 3px;
border-style: solid;
border-width: 0;
color: rgb(48, 180, 107);
}
.titletitle{
background: #1c84c6;
color: white;height:
20px;line-height:
20px;text-align: center;
margin-bottom: 10px;
}
.division{
display:flex;
flex-direction:row;
justify-content:flex-start;
}
.dbtn {
display: inline-block;
line-height: normal;
padding-left: 2px;
padding-right: 2px;
cursor: pointer;
border-radius: 3px;
border-style: solid;
border-width: 0;
color: rgb(48, 180, 107);
}
.titletitle{
background: #1c84c6;
color: white;height:
20px;line-height:
20px;text-align: center;
margin-bottom: 10px;
}
</style>
<style lang="scss" scoped>
::v-deep .el-select{
width: 100%;
}
::v-deep .el-select{
width: 100%;
}
</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