|
|
|
@ -103,20 +103,9 @@
|
|
|
|
|
v-hasPermi="['tcZz/networkSecurity:tbcz:export']"
|
|
|
|
|
>导出</el-button
|
|
|
|
|
>
|
|
|
|
|
<el-upload
|
|
|
|
|
style="display: inline-block; margin: 0 10px"
|
|
|
|
|
action="1"
|
|
|
|
|
:show-file-list="false"
|
|
|
|
|
:limit="limit"
|
|
|
|
|
:multiple="false"
|
|
|
|
|
:accept="accept"
|
|
|
|
|
:before-upload="handleBeforeUpload"
|
|
|
|
|
:on-exceed="handleExceed"
|
|
|
|
|
:http-request="handleFile"
|
|
|
|
|
:file-list="fileList"
|
|
|
|
|
<el-button type="primary" size="mini" @click="importFiles"
|
|
|
|
|
>导入</el-button
|
|
|
|
|
>
|
|
|
|
|
<el-button type="primary" size="mini">导入</el-button>
|
|
|
|
|
</el-upload>
|
|
|
|
|
<el-button type="success" size="mini" @click="enable" :disabled="multiple"
|
|
|
|
|
>启用</el-button
|
|
|
|
|
>
|
|
|
|
@ -225,14 +214,44 @@
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="启用/禁用" prop="isStatus">
|
|
|
|
|
<el-select v-model="form.isStatus" placeholder="请选择启用/禁用">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="dict in dict.type.tc_start"
|
|
|
|
|
:key="dict.value"
|
|
|
|
|
:label="dict.label"
|
|
|
|
|
:value="parseInt(dict.value)"
|
|
|
|
|
></el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
<el-radio-group v-model="form.isStatus">
|
|
|
|
|
<el-radio :label="1">启用</el-radio>
|
|
|
|
|
<el-radio :label="2">禁用</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="上传文件">
|
|
|
|
|
<div class="updataFile">
|
|
|
|
|
<div class="fileHeader">
|
|
|
|
|
<div class="names">文件名称</div>
|
|
|
|
|
<div class="urls">文件路径(完整路径)</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div @click="addFile" class="fileIcon">
|
|
|
|
|
<i class="el-icon-circle-plus-outline"></i>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
class="main-file"
|
|
|
|
|
v-for="(item, index) in fileNameS"
|
|
|
|
|
:key="index"
|
|
|
|
|
>
|
|
|
|
|
<div class="fileItems">
|
|
|
|
|
<div class="names">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="item.fileName"
|
|
|
|
|
placeholder="请输入文件名称"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="urls">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="item.fileUrl"
|
|
|
|
|
placeholder="请输入文件路径(完整路径)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div @click="removeFile(index)" class="fileIcon">
|
|
|
|
|
<i class="el-icon-remove-outline"></i>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="单位名称" prop="unitName">
|
|
|
|
|
<el-input v-model="form.unitName" placeholder="请输入单位名称" />
|
|
|
|
@ -243,9 +262,7 @@
|
|
|
|
|
<el-form-item label="处置情况" prop="czState">
|
|
|
|
|
<el-input v-model="form.czState" placeholder="请输入处置情况" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="上传文件">
|
|
|
|
|
<FileUpload v-model="fileNameS"></FileUpload>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
<el-form-item label="备注" prop="remark">
|
|
|
|
|
<el-input v-model="form.remark" placeholder="请输入备注" />
|
|
|
|
|
</el-form-item>
|
|
|
|
@ -305,6 +322,47 @@
|
|
|
|
|
}}</el-descriptions-item>
|
|
|
|
|
</el-descriptions>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
<!-- 导入 -->
|
|
|
|
|
<el-dialog
|
|
|
|
|
:visible.sync="fileOpen"
|
|
|
|
|
width="400px"
|
|
|
|
|
append-to-body
|
|
|
|
|
custom-class="dialog-box"
|
|
|
|
|
@close="cancelFile"
|
|
|
|
|
>
|
|
|
|
|
<div slot="title" class="dialog-title">导入</div>
|
|
|
|
|
<el-upload
|
|
|
|
|
ref="upload"
|
|
|
|
|
:limit="limit"
|
|
|
|
|
action="666"
|
|
|
|
|
:accept="accept"
|
|
|
|
|
:headers="headers"
|
|
|
|
|
:file-list="fileList"
|
|
|
|
|
:multiple="false"
|
|
|
|
|
:auto-upload="false"
|
|
|
|
|
drag
|
|
|
|
|
:before-upload="handleBeforeUpload"
|
|
|
|
|
:on-exceed="handleExceed"
|
|
|
|
|
:http-request="handleFile"
|
|
|
|
|
>
|
|
|
|
|
<i class="el-icon-upload"></i>
|
|
|
|
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
|
|
|
|
<div class="el-upload__tip text-center" slot="tip">
|
|
|
|
|
<span>仅允许导入xls、xlsx格式文件。</span>
|
|
|
|
|
<el-link
|
|
|
|
|
type="primary"
|
|
|
|
|
:underline="false"
|
|
|
|
|
style="font-size: 12px; vertical-align: baseline"
|
|
|
|
|
@click="importTemplate"
|
|
|
|
|
>下载模板</el-link
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
</el-upload>
|
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
|
<el-button type="primary" @click="submitFile">确 定</el-button>
|
|
|
|
|
<el-button @click="cancelFile">取 消</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
@ -319,8 +377,7 @@ import {
|
|
|
|
|
isStatusTbcz,
|
|
|
|
|
importTbcz,
|
|
|
|
|
} from "@/api/tcZz/networkSecurity/tbcz";
|
|
|
|
|
import { Loading } from "element-ui";
|
|
|
|
|
|
|
|
|
|
import { getToken } from "@/utils/auth";
|
|
|
|
|
export default {
|
|
|
|
|
name: "Tbcz",
|
|
|
|
|
//注释字典
|
|
|
|
@ -389,12 +446,20 @@ export default {
|
|
|
|
|
// 表单参数
|
|
|
|
|
form: {},
|
|
|
|
|
// 表单校验
|
|
|
|
|
rules: {},
|
|
|
|
|
rules: {
|
|
|
|
|
areaId: [{ required: true, message: "请选择区域", trigger: "blur" }],
|
|
|
|
|
isStatus: [{ required: true, message: "请选择启动/禁用", trigger: "blur" }],
|
|
|
|
|
unitName: [{ required: true, message: "单位名称不能为空", trigger: "blur" }],
|
|
|
|
|
ipAddress: [{ required: true, message: "目标IP/域名不能为空", trigger: "blur" }],
|
|
|
|
|
czState: [{ required: true, message: "处置情况不能为空", trigger: "blur" }],
|
|
|
|
|
},
|
|
|
|
|
fileNameS: [],
|
|
|
|
|
//===========
|
|
|
|
|
fileList: [],
|
|
|
|
|
limit: 1,
|
|
|
|
|
accept: ".xls,.xlsx",
|
|
|
|
|
fileOpen: false,
|
|
|
|
|
headers: { Authorization: "Bearer " + getToken() },
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
created() {
|
|
|
|
@ -407,6 +472,24 @@ export default {
|
|
|
|
|
this.$modal.msgSuccess("修改成功");
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//下载模板
|
|
|
|
|
importTemplate() {
|
|
|
|
|
this.download(
|
|
|
|
|
"/tcZz/networkSecurity/tbcz/importTemplate",
|
|
|
|
|
{},
|
|
|
|
|
`通报处置模板.xlsx`
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
//导入
|
|
|
|
|
importFiles() {
|
|
|
|
|
this.fileOpen = true;
|
|
|
|
|
},
|
|
|
|
|
submitFile() {
|
|
|
|
|
this.$refs.upload.submit();
|
|
|
|
|
},
|
|
|
|
|
cancelFile() {
|
|
|
|
|
this.fileOpen = false;
|
|
|
|
|
},
|
|
|
|
|
//导入
|
|
|
|
|
handleBeforeUpload(file) {
|
|
|
|
|
// 校检文件类型
|
|
|
|
@ -417,36 +500,27 @@ export default {
|
|
|
|
|
this.$modal.msgError(`文件格式不正确, 请上传${this.accept}格式文件!`);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
// 校检文件大小
|
|
|
|
|
const isLt = file.size / 1024 / 1024 < 5;
|
|
|
|
|
if (!isLt) {
|
|
|
|
|
this.$modal.msgError(`上传文件大小不能超过5 MB!`);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
handleExceed() {
|
|
|
|
|
this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
|
|
|
|
|
},
|
|
|
|
|
handleFile(data) {
|
|
|
|
|
let downloadLoadingInstance = Loading.service({
|
|
|
|
|
text: "正在导入数据,请稍候",
|
|
|
|
|
spinner: "el-icon-loading",
|
|
|
|
|
background: "rgba(0, 0, 0, 0.7)",
|
|
|
|
|
});
|
|
|
|
|
this.$modal.loading();
|
|
|
|
|
let form = new FormData();
|
|
|
|
|
form.append("file", data.file);
|
|
|
|
|
importTbcz(form)
|
|
|
|
|
.then((res) => {
|
|
|
|
|
this.getList();
|
|
|
|
|
downloadLoadingInstance.close();
|
|
|
|
|
this.fileOpen = false;
|
|
|
|
|
this.$modal.closeLoading();
|
|
|
|
|
this.$modal.msgSuccess("导入成功");
|
|
|
|
|
this.$refs.upload.clearFiles();
|
|
|
|
|
this.getList();
|
|
|
|
|
this.fileList = [];
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {
|
|
|
|
|
downloadLoadingInstance.close();
|
|
|
|
|
this.fileOpen = false;
|
|
|
|
|
this.$modal.closeLoading();
|
|
|
|
|
this.$refs.upload.clearFiles();
|
|
|
|
|
this.getList();
|
|
|
|
|
this.fileList = [];
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//批量启用
|
|
|
|
@ -472,6 +546,31 @@ export default {
|
|
|
|
|
this.getList(e);
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {});
|
|
|
|
|
},
|
|
|
|
|
//添加表格
|
|
|
|
|
addFile() {
|
|
|
|
|
if (this.fileNameS.length <= 0) {
|
|
|
|
|
this.fileNameS.push({
|
|
|
|
|
fileName: "",
|
|
|
|
|
fileUrl: "",
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
if (
|
|
|
|
|
this.fileNameS[this.fileNameS.length - 1].fileUrl != "" &&
|
|
|
|
|
this.fileNameS[this.fileNameS.length - 1].fileName != ""
|
|
|
|
|
) {
|
|
|
|
|
this.fileNameS.push({
|
|
|
|
|
fileName: "",
|
|
|
|
|
fileUrl: "",
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
this.$modal.msgError("请完整填写上一条");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
//删除表格
|
|
|
|
|
removeFile(index) {
|
|
|
|
|
this.fileNameS.splice(index, 1);
|
|
|
|
|
},
|
|
|
|
|
/** 查询通报处置列表 */
|
|
|
|
|
getList(e) {
|
|
|
|
@ -510,7 +609,7 @@ export default {
|
|
|
|
|
|
|
|
|
|
areaId: null,
|
|
|
|
|
|
|
|
|
|
isStatus: null,
|
|
|
|
|
isStatus: 1,
|
|
|
|
|
|
|
|
|
|
unitName: null,
|
|
|
|
|
|
|
|
|
@ -565,7 +664,12 @@ export default {
|
|
|
|
|
/** 新增按钮操作 */
|
|
|
|
|
handleAdd() {
|
|
|
|
|
this.reset();
|
|
|
|
|
this.fileNameS = [];
|
|
|
|
|
this.fileNameS = [
|
|
|
|
|
{
|
|
|
|
|
fileName: "",
|
|
|
|
|
fileUrl: "",
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
this.open = true;
|
|
|
|
|
this.title = "添加通报处置";
|
|
|
|
|
},
|
|
|
|
@ -581,8 +685,8 @@ export default {
|
|
|
|
|
let arr2 = response.data.fileUrl.split(",");
|
|
|
|
|
arr1.forEach((value, index) => {
|
|
|
|
|
this.fileNameS.push({
|
|
|
|
|
name: value,
|
|
|
|
|
url: arr2[index],
|
|
|
|
|
fileName: value,
|
|
|
|
|
fileUrl: arr2[index],
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -596,8 +700,10 @@ export default {
|
|
|
|
|
let arr2 = [];
|
|
|
|
|
if (this.fileNameS.length > 0) {
|
|
|
|
|
this.fileNameS.forEach((value) => {
|
|
|
|
|
arr1.push(value.name);
|
|
|
|
|
arr2.push(value.url);
|
|
|
|
|
if (value.fileName && value.fileUrl) {
|
|
|
|
|
arr1.push(value.fileName);
|
|
|
|
|
arr2.push(value.fileUrl);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
this.form.fileName = arr1.join(",");
|
|
|
|
|
this.form.fileUrl = arr2.join(",");
|
|
|
|
@ -663,3 +769,55 @@ export default {
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
.updataFile {
|
|
|
|
|
display: flex;
|
|
|
|
|
}
|
|
|
|
|
.fileIcon {
|
|
|
|
|
width: 10%;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
font-size: 24px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
}
|
|
|
|
|
.main-file {
|
|
|
|
|
display: flex;
|
|
|
|
|
}
|
|
|
|
|
.fileHeader {
|
|
|
|
|
border: 1px solid #dcdfe6;
|
|
|
|
|
color: #515a6e;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
height: 40px;
|
|
|
|
|
display: flex;
|
|
|
|
|
background: #f8f8f9;
|
|
|
|
|
width: 90%;
|
|
|
|
|
}
|
|
|
|
|
.fileItems {
|
|
|
|
|
border: 1px solid #dcdfe6;
|
|
|
|
|
border-top: none;
|
|
|
|
|
color: #606266;
|
|
|
|
|
height: 40px;
|
|
|
|
|
display: flex;
|
|
|
|
|
width: 90%;
|
|
|
|
|
}
|
|
|
|
|
.names {
|
|
|
|
|
width: 40%;
|
|
|
|
|
border-right: 1px solid #dcdfe6;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
padding-left: 10px;
|
|
|
|
|
}
|
|
|
|
|
::v-deep .names .el-input__inner {
|
|
|
|
|
border: none !important;
|
|
|
|
|
padding-left: 0 !important;
|
|
|
|
|
}
|
|
|
|
|
.urls {
|
|
|
|
|
width: 60%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
padding-left: 10px;
|
|
|
|
|
}
|
|
|
|
|
::v-deep .urls .el-input__inner {
|
|
|
|
|
border: none !important;
|
|
|
|
|
padding-left: 0 !important;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|