网络安全

duhanyu
杜函宇 2 years ago
parent 1a73b137d5
commit 927a20f5d5

@ -4,6 +4,7 @@ ENV = 'development'
# base api # base api
VUE_APP_BASE_API = '/dashboard' VUE_APP_BASE_API = '/dashboard'
VUE_APP_BASE_API2 = 'http://39.101.188.84:9027' # VUE_APP_BASE_API2 = 'http://39.101.188.84:9027'
VUE_APP_BASE_API2 = 'http://localhost:9035'
BASE_API = 'http://10.10.3.35:9070' BASE_API = 'http://10.10.3.35:9070'

@ -0,0 +1,48 @@
import request from "@/utils/request.js";
// 查询舆情走势图列表
export function listYqzs(query) {
return request({
url: '/tcZz/netWorkYq/yqzs/ListNoToken',
method: 'get',
params: query
})
}
// 查询舆情信息量统计列表
export function listYqxxlnum(query) {
return request({
url: '/tcZz/netWorkYq/yqxxlnum/list',
method: 'get',
params: query
})
}
// 查询舆情信息量统计明細列表
export function listYqxxltj(query) {
return request({
url: '/tcZz/netWorkYq/yqxxltj/ListNoToken',
method: 'get',
params: query
})
}
// 查询舆情信息量统计明細详细
export function getYqxxltj(id) {
return request({
url: '/tcZz/netWorkYq/yqxxltj/' + id,
method: 'get'
})
}
// 查询媒体类型列表
export function listMtlx(query) {
return request({
url: '/tcZz/netWorkYq/mtlx/list',
method: 'get',
params: query
})
}
// 查询涉事类型列表
export function listSslx(query) {
return request({
url: '/tcZz/netWorkYq/sslx/list',
method: 'get',
params: query
})
}

@ -0,0 +1,152 @@
import request from "@/utils/request.js";
// 查询数据来源统计列表
export function listDataSourceTj(query) {
return request({
url: '/tcZz/networkSecurity/DataSourceTj/list',
method: 'get',
params: query
})
}
// 查询硬探针、软探针列表
export function listRyz(query) {
return request({
url: '/tcZz/networkSecurity/ryz/list',
method: 'get',
params: query
})
}
// 查询系统监测列表
export function listXtjc(query) {
return request({
url: '/tcZz/networkSecurity/xtjc/ListNoToken',
method: 'get',
params: query
})
}
// 查询等保系统列表
export function listDbxt(query) {
return request({
url: '/tcZz/networkSecurity/dbxt/list',
method: 'get',
params: query
})
}
// 查询等保单位列表
export function listDbdw(query) {
return request({
url: '/tcZz/networkSecurity/dbdw/list',
method: 'get',
params: query
})
}
// 查询政府网站列表
export function listZfwz(query) {
return request({
url: '/tcZz/networkSecurity/zfwz/list',
method: 'get',
params: query
})
}
// 查询监管单位和网站监测
export function listJgdw(query) {
return request({
url: '/tcZz/networkSecurity/jgdw/ListNoToken',
method: 'get',
params: query
})
}
// 查询 IDC单位列表
export function listIdcdw(query) {
return request({
url: '/tcZz/networkSecurity/idcdw/list',
method: 'get',
params: query
})
}
// 查询网络监测统计列表
export function listWljgtj(query) {
return request({
url: '/tcZz/networkSecurity/wljgtj/list',
method: 'get',
params: query
})
}
// 查询网络监测列表
export function listCybersecurity(query) {
return request({
url: '/tcZz/networkSecurity/cybersecurity/ListNoToken',
method: 'get',
params: query
})
}
// 查询网络监测详细
export function getCybersecurity(id) {
return request({
url: '/tcZz/networkSecurity/cybersecurity/' + id,
method: 'get'
})
}
// 查询受攻击IPTOP5列表
export function listTop5(query) {
return request({
url: '/tcZz/networkSecurity/top5/list',
method: 'get',
params: query
})
}
// 查询分布情况列表
export function listFbqk(query) {
return request({
url: '/tcZz/networkSecurity/fbqk/list',
method: 'get',
params: query
})
}
// 查询地图统计列表
export function listMap(query) {
return request({
url: '/tcZz/networkSecurity/map/list',
method: 'get',
params: query
})
}
// 查询安全隐患列表
export function listAqyh(query) {
return request({
url: '/tcZz/networkSecurity/aqyh/list',
method: 'get',
params: query
})
}
// 查询通报完成情况列表
export function listTbwc(query) {
return request({
url: '/tcZz/networkSecurity/tbwc/list',
method: 'get',
params: query
})
}
// 查询部门通报列表
export function listBmtb(query) {
return request({
url: '/tcZz/networkSecurity/bmtb/list',
method: 'get',
params: query
})
}
// 查询最新隐患列表
export function listZxyh(query) {
return request({
url: '/tcZz/networkSecurity/zxyh/list',
method: 'get',
params: query
})
}
// 查询通报处置列表
export function listTbcz(query) {
return request({
url: '/tcZz/networkSecurity/tbcz/list',
method: 'get',
params: query
})
}

@ -2,7 +2,7 @@ import request from "@/utils/request.js";
//数据来源 //数据来源
export function dataLY() { export function dataLY() {
return request({ return request({
url: "/zongzhi/saftyscreen/source", url: "/networkSecurity/DataSourceTj/list",
method: "get", method: "get",
}); });
} }

@ -8,68 +8,70 @@
align="center" align="center"
/> --> /> -->
<el-table-column <el-table-column
v-for="(item,key) in tableKey" v-for="(item, key) in tableKey"
v-if="!item.dictType"
:key="key" :key="key"
:prop="item.value"
:label="item.name" :label="item.name"
align="center" align="center"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
></el-table-column> >
<el-table-column v-else :label="item.name" :show-overflow-tooltip="true">
<template scope="scope"> <template scope="scope">
{{ $filterDict(item.dictType,scope.row[item.value],item.dictType == 'town' ? true : false) }} {{
dictType
? $filterDict(
item.dictType,
scope.row[item.value],
item.dictType == "town" ? true : false
)
: scope.row[item.value]
}}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
props: { props: {
total: { total: {
type: Number, type: Number,
default: 0 default: 0,
}, },
pageNum: { pageNum: {
type: Number, type: Number,
default: 1 default: 1,
}, },
pageSize: { pageSize: {
type: Number, type: Number,
default: 10 default: 10,
}, },
tableTitle: { tableTitle: {
type: String, type: String,
default: '' default: "",
}, },
height: { height: {
type: Number, type: Number,
default: 740 default: 740,
}, },
tableList: { tableList: {
type: Array, type: Array,
default: () => [] default: () => [],
}, },
tableKey: { tableKey: {
type: Array, type: Array,
default: () => [] default: () => [],
} },
}, },
data() { data() {
return {} return {};
}, },
methods: { methods: {
getList() { getList() {
console.log(this.pageNum, this.pageSize) console.log(this.pageNum, this.pageSize);
} },
} },
} };
</script> </script>
<style> <style>
</style> </style>

@ -102,7 +102,7 @@ import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
import { TWEEN } from "three/examples/jsm/libs/tween.module.min.js"; import { TWEEN } from "three/examples/jsm/libs/tween.module.min.js";
import { inlandAttack, outlandAttack } from "@/api/common"; import { inlandAttack, outlandAttack } from "@/api/common";
import { mapAttack } from "@/api/wlSafe"; import { listMap } from "@/api/networkSecurity";
export default { export default {
filters: { filters: {
commaFilter(target) { commaFilter(target) {
@ -563,17 +563,17 @@ export default {
methods: { methods: {
// //
mapList() { mapList() {
mapAttack({ pageSize: 20, pageNum: 1 }).then((res) => { listMap({ pageSize: 20, pageNum: 1 }).then((res) => {
res.rows.forEach((value) => { res.rows.forEach((value) => {
this.attackItem.forEach((value1, index1) => { this.attackItem.forEach((value1, index1) => {
if (value1.country == value.name) { if (value1.country == value.name) {
this.attackItem[index1].attackNum = value.attackCount; this.attackItem[index1].attackNum = value.count;
return; return;
} }
}); });
this.attackItemTwo.forEach((value2, index2) => { this.attackItemTwo.forEach((value2, index2) => {
if (value2.country == value.name) { if (value2.country == value.name) {
this.attackItemTwo[index2].attackNum = value.attackCount; this.attackItemTwo[index2].attackNum = value.count;
return; return;
} }
}); });

@ -134,6 +134,9 @@
</template> </template>
<script> <script>
//,
import { listBmtb} from "@/api/networkSecurity";
import qs from "qs"; import qs from "qs";
const docx = require("docx-preview"); const docx = require("docx-preview");
import axios from "axios"; import axios from "axios";
@ -353,8 +356,8 @@ export default {
}, },
// //
getBMData() { getBMData() {
departmentTB().then((res) => { listBmtb().then((res) => {
this.notificationList = res.data; this.notificationList = res.rows;
}); });
}, },
// //

@ -30,7 +30,7 @@
class="section-wrap-item" class="section-wrap-item"
:style="{ :style="{
backgroundColor: index < 3 ? '#e8bf00' : '#4997f7', backgroundColor: index < 3 ? '#e8bf00' : '#4997f7',
width: (item.num / attackTotal) * 100 + '%', width: (item.num / attack) * 100 + '%',
}" }"
/> />
<div class="section-wrap-num"> <div class="section-wrap-num">
@ -66,72 +66,46 @@
</template> </template>
<script> <script>
import { saftyscreenUnattack } from '@/api/zongzhi/st.js' import { saftyscreenUnattack } from "@/api/zongzhi/st.js";
import { echartsJump } from '../../../../../public/static/echartsJump' import { echartsJump } from "../../../../../public/static/echartsJump";
import { getAttackTypeDistribution, getTopIp } from '@/api/common' import { listTop5, listFbqk } from "@/api/networkSecurity";
export default { export default {
name: '', name: "",
filters: { filters: {
commaFilter(target) { commaFilter(target) {
return String(target).replace(/(\d)(?=(\d{3})+$)/g, '$1,') return String(target).replace(/(\d)(?=(\d{3})+$)/g, "$1,");
} },
}, },
props: { props: {
currentIndex: { currentIndex: {
type: Number, type: Number,
default: 0 default: 0,
} },
}, },
data() { data() {
return { return {
isActive: 0, isActive: 0,
attackTotal: 0, attackTotal: 0,
data: [ data: [
{ value: 21791571, name: '扫描行为' }, { value: 21791571, name: "扫描行为" },
{ value: 4997514, name: 'IDS规则' }, { value: 4997514, name: "IDS规则" },
{ value: 2994595, name: '远程控制' }, { value: 2994595, name: "远程控制" },
{ value: 1077065, name: '挖矿' }, { value: 1077065, name: "挖矿" },
{ value: 953305, name: 'SMB远程溢出攻击' }, { value: 953305, name: "SMB远程溢出攻击" },
{ value: 443961, name: '其他' } { value: 443961, name: "其他" },
],
attackRanking: [
// {
// total: '10.53.221.176',
// num: 1821207,
// url: require('@/assets/privateOrder/general/top.png')
// },
// {
// total: '10.52.121.112',
// num: 1271992,
// url: require('@/assets/privateOrder/general/top.png')
// },
// {
// total: '10.53.236.147',
// num: 1184362,
// url: require('@/assets/privateOrder/general/top.png')
// },
// {
// total: '10.53.18.231',
// num: 1014549,
// url: require('@/assets/privateOrder/general/top5-.png')
// },
// {
// total: '172.96.100.207',
// num: 836344,
// url: require('@/assets/privateOrder/general/top5-.png')
// }
], ],
controlList: [] attackRanking: [],
// controlList: ['', '', ''] // controlList: [],
} pieImg: [],
};
}, },
computed: { computed: {
attack() { attack() {
this.attackRanking.forEach((v) => { this.attackRanking.forEach((v) => {
this.attackTotal += v.num this.attackTotal += v.num;
}) });
return this.attackTotal return this.attackTotal;
} },
}, },
watch: { watch: {
// currentIndex() { // currentIndex() {
@ -143,140 +117,127 @@ export default {
// } // }
}, },
mounted() { mounted() {
this.getSaftyscreenUnattack() this.getSaftyscreenUnattack();
// this.data = [
// { value: 1, name: '' },
// { value: 80, name: '' },
// { value: 90, name: '' },
// { value: 20, name: '' },
// { value: 50, name: '' }
// ]
// this.initDistribution()
// getAttackTypeDistribution().then((res) => {
// this.data = []
// res['T_ATTACK_TYPE_DISTRIBUTION[]'].forEach((ele) => {
// this.data.push({ value: ele.statistic_count, name: ele.data_name })
// })
// this.initDistribution()
// })
// getTopIp().then((res) => {
// const data = res['T_ATTACKED_IP_TOP5[]']
// for (let index = 0; index < data.length; index++) {
// this.attackRanking[index].total = data[index].data_name
// this.attackRanking[index].num = Number(data[index].statistic_count)
// this.attackTotal += Number(data[index].statistic_count)
// }
// })
}, },
methods: { methods: {
/** /**
* TOP5 * TOP5
*/ */
getSaftyscreenUnattack() { getSaftyscreenUnattack() {
saftyscreenUnattack().then(res => { listTop5().then((res) => {
console.log(res.data) this.attackRanking = res.rows.map((item, index) => {
this.attackRanking = res.data.map((item, index) => {
return { return {
name: item.attackIpRegion, // name: item.attackIpRegion,
value: item.pt, // value: item.pt,
total: item.attackedIp, total: item.sattackIp,
num: item.count, num: Number(item.sattackCount),
url: index + 1 <= 3 ? require('@/assets/privateOrder/general/top前三.png') : require('@/assets/privateOrder/general/top5-其他.png') url:
} index + 1 <= 3
}) ? require("@/assets/privateOrder/general/top前三.png")
this.initDistribution() : require("@/assets/privateOrder/general/top5-其他.png"),
// console.log(this.attackRanking) };
}) });
this.attackRanking.sort(function (a, b) {
return b.num - a.num;
});
});
listFbqk().then((res) => {
console.log(res);
res.rows.forEach((value) => {
this.pieImg.push({
name: value.cityName,
value: value.zb,
});
});
this.initDistribution();
});
}, },
// //
initDistribution() { initDistribution() {
const chartDom = document.getElementById('section-pie') const chartDom = document.getElementById("section-pie");
const myChart = this.$echarts.init(chartDom) const myChart = this.$echarts.init(chartDom);
const option = { const option = {
tooltip: { tooltip: {
trigger: 'item', trigger: "item",
formatter: '{a} <br/>{b} : {c} ({d}%)', formatter: "{a} <br/>{b} : {c} ({d}%)",
textStyle: { textStyle: {
fontSize: 26, fontSize: 26,
fontWight: 'bold' fontWight: "bold",
} },
}, },
color: [ color: [
'#6bd3ff', "#6bd3ff",
'#2590fd', "#2590fd",
'#f6ff00', "#f6ff00",
'#ffd616', "#ffd616",
'#ff9314', "#ff9314",
'#ffffff' "#ffffff",
], ],
legend: { legend: {
orient: 'vertical', orient: "vertical",
icon: 'circle', icon: "circle",
right: '-5%', right: "-5%",
top: '0', top: "0",
itemGap: 17, itemGap: 17,
padding: 8, padding: 8,
formatter: (name) => { formatter: (name) => {
let total = 0 console.log(name);
let target let target;
this.attackRanking.forEach((v) => { this.pieImg.forEach((v) => {
total += Number(v.value)
if (v.name === name) { if (v.name === name) {
target = v.value target = v.value;
} }
}) });
const arr = [ const arr = [`{a|${Number(target).toFixed(1)} % } {b|${name}} `];
`{a|${((target / total) * 100).toFixed(1)} % } {b|${name}} ` return arr;
]
return arr.join('\n')
}, },
textStyle: { textStyle: {
rich: { rich: {
a: { a: {
fontSize: 35, fontSize: 35,
letterSpacing: 2, letterSpacing: 2,
color: 'rgba(255, 255, 255)' color: "rgba(255, 255, 255)",
}, },
b: { b: {
width: 270, width: 270,
fontSize: 30, fontSize: 30,
color: 'rgba(183,223,255)' color: "rgba(183,223,255)",
} },
}, },
fontSize: 30, fontSize: 30,
color: 'rgba(255, 255, 255, .5)' color: "rgba(255, 255, 255, .5)",
} },
}, },
series: [ series: [
{ {
name: '分布情况', name: "分布情况",
type: 'pie', type: "pie",
radius: ['35%', '80%'], radius: ["35%", "80%"],
center: ['21.5%', '48.3%'], center: ["21.5%", "48.3%"],
avoidLabelOverlap: false, avoidLabelOverlap: false,
label: { label: {
show: false, show: false,
position: 'center' position: "center",
}, },
emphasis: { emphasis: {
label: { label: {
show: false, show: false,
fontSize: '28', fontSize: "28",
fontWeight: 'bold' fontWeight: "bold",
} },
}, },
labelLine: { labelLine: {
show: false show: false,
}, },
data: this.attackRanking data: this.pieImg,
} },
] ],
} };
myChart.setOption(option) myChart.setOption(option);
echartsJump(myChart, option) echartsJump(myChart, option);
} },
} },
} };
</script> </script>
<style lang='scss' scoped> <style lang='scss' scoped>
// //
@ -384,7 +345,7 @@ export default {
margin: 35px auto; margin: 35px auto;
width: 750px; width: 750px;
height: 334px; height: 334px;
background: url('~@/assets/privateOrder/general/first/circle-bg.png') background: url("~@/assets/privateOrder/general/first/circle-bg.png")
no-repeat; no-repeat;
} }
} }

@ -41,7 +41,7 @@
v-for="(item, idx) in dataSource.bottom" v-for="(item, idx) in dataSource.bottom"
:key="idx" :key="idx"
class="section-bottom-item" class="section-bottom-item"
@click="showAttack(item.title, item.num)" @click="showAttack(item.title, item.type)"
> >
<img :src="item.url" alt="" /> <img :src="item.url" alt="" />
<span class="bottom-title">{{ item.title }}</span> <span class="bottom-title">{{ item.title }}</span>
@ -58,7 +58,7 @@
v-for="(item, idx) in superviseObject" v-for="(item, idx) in superviseObject"
:key="idx" :key="idx"
:class="['section-object-item', item.className]" :class="['section-object-item', item.className]"
@click="showAttack(item.title, item.num)" @click="showAttack(item.title, item.type)"
> >
<img :src="item.url" alt="" /> <img :src="item.url" alt="" />
<div class="item-content"> <div class="item-content">
@ -81,7 +81,7 @@
<img :src="securityMonitor.url" alt="" /> <img :src="securityMonitor.url" alt="" />
<div class="monitor-info-des"> <div class="monitor-info-des">
<span class="info-des-title">{{ securityMonitor.title }}</span> <span class="info-des-title">{{ securityMonitor.title }}</span>
<span class="info-des-total">{{ monitorForm.totalSum }}</span> <span class="info-des-total">{{ monitorForm.netAttack }}</span>
</div> </div>
</div> </div>
<span class="monitor-line">|</span> <span class="monitor-line">|</span>
@ -95,11 +95,11 @@
<span class="detail-item-title">{{ item.title }}</span> <span class="detail-item-title">{{ item.title }}</span>
<span class="detail-item-num">{{ <span class="detail-item-num">{{
item.title == "入侵攻击" item.title == "入侵攻击"
? monitorForm.rqSum ? monitorForm.rqAttack
: item.title == "恶意扫描" : item.title == "恶意扫描"
? monitorForm.eySum ? monitorForm.smAttack
: item.title == "僵木蠕病毒" : item.title == "僵木蠕病毒"
? monitorForm.jmrSum ? monitorForm.bdAttack
: 0 : 0
}}</span> }}</span>
</div> </div>
@ -112,7 +112,7 @@
<span>攻击源/IP</span> <span>攻击源/IP</span>
<span>攻击类型</span> <span>攻击类型</span>
</div> </div>
<div @click="getAttackSource($event)"> <div>
<vue-seamless-scroll <vue-seamless-scroll
:data="tableData" :data="tableData"
:class-option="classOption" :class-option="classOption"
@ -122,12 +122,13 @@
v-for="(item, idx) in tableData" v-for="(item, idx) in tableData"
:key="idx" :key="idx"
class="monitor-list" class="monitor-list"
@click="getAttackSource(item)"
> >
<span :data-id="item.id">{{ item.attackTime }}</span>
<span :data-id="item.id">{{ item.sourceIp }}</span>
<span :data-id="item.id">{{ <span :data-id="item.id">{{
$filterDict("tc_attack_type", item.attackType) $moment(item.startTime).format("YYYY-MM-DD")
}}</span> }}</span>
<span :data-id="item.id">{{ item.attackyIp }}</span>
<span :data-id="item.id">{{ item.attackType }}</span>
</div> </div>
</vue-seamless-scroll> </vue-seamless-scroll>
</div> </div>
@ -176,7 +177,7 @@
<div class="dialog_little_title">攻击发起时间</div> <div class="dialog_little_title">攻击发起时间</div>
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<div class="dialog_little_ctn">{{ tableDataPop.attackTime }}</div> <div class="dialog_little_ctn">{{ tableDataPop.startTime }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
@ -184,7 +185,7 @@
<div class="dialog_little_title">攻击源IP</div> <div class="dialog_little_title">攻击源IP</div>
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<div class="dialog_little_ctn">{{ tableDataPop.sourceIp }}</div> <div class="dialog_little_ctn">{{ tableDataPop.attackyIp }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
@ -193,7 +194,7 @@
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<div class="dialog_little_ctn"> <div class="dialog_little_ctn">
{{ $filterDict("tc_attack_type", tableDataPop.attackType) }} {{ tableDataPop.attackType }}
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -203,7 +204,7 @@
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<div class="dialog_little_ctn"> <div class="dialog_little_ctn">
{{ tableDataPop.attackIpRegion }} {{ tableDataPop.attackIpArea }}
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -212,7 +213,7 @@
<div class="dialog_little_title">受攻击IP</div> <div class="dialog_little_title">受攻击IP</div>
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<div class="dialog_little_ctn">{{ tableDataPop.attackedIp }}</div> <div class="dialog_little_ctn">{{ tableDataPop.sAttackIp }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
@ -221,7 +222,7 @@
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<div class="dialog_little_ctn"> <div class="dialog_little_ctn">
{{ tableDataPop.attackedIpRegion }} {{ tableDataPop.sAttackIpArea }}
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -239,14 +240,14 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_ctn"> <div class="dialog_little_ctn">
{{ $filterDict("tc_net_safety_level", tableDataPop.level) }} {{ tableDataPop.netLevel }}
</div> </div>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_title">联系电话</div> <div class="dialog_little_title">联系电话</div>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_ctn">{{ tableDataPop.phoneNum }}</div> <div class="dialog_little_ctn">{{ tableDataPop.linkTel }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
@ -287,7 +288,7 @@
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="showAttack" @pagination="showAttack1"
/> />
</div> </div>
</template> </template>
@ -308,19 +309,6 @@ import vueSeamlessScroll from "vue-seamless-scroll";
import ModuleTitle from "../../common/ModuleTitle.vue"; import ModuleTitle from "../../common/ModuleTitle.vue";
import attackSituation from "./attackSituation.vue"; import attackSituation from "./attackSituation.vue";
import ExcelTable from "@/components/ExcelTable"; import ExcelTable from "@/components/ExcelTable";
import {
listSystem,
listUnit,
listWeb,
listIDCunit,
listSource,
saftyscreenSupervise,
saftyscreenSafety,
listDetection,
getDetection,
listTj,
listSourceTj,
} from "@/api/zongzhi/st.js";
import { import {
yingTanZhen, yingTanZhen,
yingTanZhenKeyValue, yingTanZhenKeyValue,
@ -339,9 +327,21 @@ import {
rtz, rtz,
rtzKeyValue, rtzKeyValue,
} from "./jianGuan"; } from "./jianGuan";
import { getLatest, getSecurity } from "@/api/common";
//=============== //===============
import { dataLY } from "@/api/wlSafe"; import {
listDataSourceTj,
listRyz,
listXtjc,
listDbxt,
listDbdw,
listZfwz,
listJgdw,
listIdcdw,
listWljgtj,
listCybersecurity,
getCybersecurity,
} from "@/api/networkSecurity";
export default { export default {
components: { components: {
attackSituation, attackSituation,
@ -366,6 +366,7 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
isStatus: 1,
}, // }, //
total: 0, // total: 0, //
time: null, time: null,
@ -408,19 +409,18 @@ export default {
title: "硬探针", title: "硬探针",
num: 0, num: 0,
url: require("@/assets/privateOrder/general/硬探针.png"), url: require("@/assets/privateOrder/general/硬探针.png"),
type: 3, type: 1,
}, },
{ {
title: "软探针", title: "软探针",
num: 0, num: 0,
url: require("@/assets/privateOrder/general/软探针.png"), url: require("@/assets/privateOrder/general/软探针.png"),
type: 4, type: 2,
}, },
{ {
title: "系统监测", title: "系统监测",
num: 0, num: 0,
url: require("@/assets/privateOrder/general/系统监测.png"), url: require("@/assets/privateOrder/general/系统监测.png"),
type: 7,
}, },
], ],
}, },
@ -436,14 +436,14 @@ export default {
num: 0, num: 0,
className: "item2", className: "item2",
url: require("@/assets/privateOrder/general/icon-监管单位.png"), url: require("@/assets/privateOrder/general/icon-监管单位.png"),
type: 5, type: 1,
}, },
{ {
title: "网站监测", title: "网站监测",
num: 0, num: 0,
className: "item3", className: "item3",
url: require("@/assets/privateOrder/general/icon-网站监测.png"), url: require("@/assets/privateOrder/general/icon-网站监测.png"),
type: 6, type: 2,
}, },
{ {
title: "IDC单位", title: "IDC单位",
@ -471,24 +471,19 @@ export default {
detail: [ detail: [
{ {
title: "入侵攻击", title: "入侵攻击",
// num: 1455.92 num: 1455.92,
}, },
{ {
title: "恶意扫描", title: "恶意扫描",
// num: 2325.24 num: 2325.24,
}, },
{ {
title: "僵木蠕病毒", title: "僵木蠕病毒",
// num: 796.152 num: 796.152,
}, },
], ],
}, },
monitorForm: { monitorForm: {},
totalSum: 0,
rqSum: 0,
eySum: 0,
jmrSum: 0,
},
tableDataPop: { tableDataPop: {
// id: 1, // id: 1,
// attackTime: '2023-07-30', // attackTime: '2023-07-30',
@ -556,146 +551,83 @@ export default {
clearInterval(this.time); clearInterval(this.time);
}, },
mounted() { mounted() {
listSourceTj().then((res) => {
this.dataSource.top[0].currentNum = res.rows[0].lable1;
this.dataSource.top[0].total = res.rows[0].lable1Sume;
this.dataSource.top[1].currentNum = res.rows[0].lable2;
this.dataSource.top[1].total = res.rows[0].lable2Sume;
});
this.changeBtn(); //
this.getSaftyscreenSupervise();
this.getSaftyscreenSafety();
this.getListDetection();
this.time = setInterval(() => {
//
if (this.tableData.length >= this.checkTotal) {
clearInterval(this.time);
} else {
this.checkParams.pageNum = this.checkParams.pageNum + 1;
this.getListDetection();
}
}, 6000);
// this.getDataSource() //
//
// getLatest().then((res) => {
// this.tableData = []
// res['T_LATEST_NEWS[]'].forEach((item) => {
// this.tableData.push({
// id: item.id,
// date: item.attack_time.substring(0, 10),
// ip: item.attack_ip_region + '/' + item.source_ip,
// type: item.attack_type
// })
// })
// })
// getSecurity().then((res) => {
// const data = res['T_SECURITY_MONITOR[]']
// this.securityMonitor.total = (data[0].statistic_count / 10000).toFixed(2)
// this.securityMonitor.detail[0].num = (
// data[1].statistic_count / 10000
// ).toFixed(2)
// this.securityMonitor.detail[1].num = (
// data[2].statistic_count / 10000
// ).toFixed(2)
// this.securityMonitor.detail[2].num = (
// data[3].statistic_count / 10000
// ).toFixed(2)
// })
//
this.getsjly(); this.getsjly();
this.changeBtn(); //
// this.getSaftyscreenSupervise();
// this.getSaftyscreenSafety();
// this.getListDetection();
// this.time = setInterval(() => {
// //
// if (this.tableData.length >= this.checkTotal) {
// clearInterval(this.time);
// } else {
// this.checkParams.pageNum = this.checkParams.pageNum + 1;
// this.getListDetection();
// }
// }, 6000);
}, },
methods: { methods: {
getsjly() { getsjly() {
dataLY().then((res) => { //APT(M)
listDataSourceTj().then((res) => {
console.log(res); console.log(res);
res.data.forEach((value, index) => { this.dataSource.top[0].currentNum = res.rows[0].lable1;
this.dataSource.bottom.forEach((value2, index2) => { this.dataSource.top[0].total = res.rows[0].lable1Sum;
if (value.type == value2.type) { this.dataSource.top[1].currentNum = res.rows[0].lable2;
this.dataSource.bottom[index2].num = value.count; this.dataSource.top[1].total = res.rows[0].lable2Sum;
return;
}
});
this.superviseObject.forEach((value3, index3) => {
if (value.type == value3.type) {
this.superviseObject[index3].num = value.count;
return;
}
});
});
}); });
}, //
//================ listWljgtj().then((res) => {
AttackClick(id) { this.monitorForm = res.rows[0];
return new Promise((resolve) => { });
getLatest().then((res) => { //
res["T_LATEST_NEWS[]"].forEach((item) => { listCybersecurity({
if (item.id === id) { isStatus: 1,
this.tableDataPop.id = id; }).then((res) => {
this.tableDataPop.attackTime = item.attack_time; this.tableData = res.rows;
this.tableDataPop.sourceIp = item.source_ip;
this.tableDataPop.attackType = item.attack_type;
this.tableDataPop.attackIpRegion = item.attack_ip_region;
this.tableDataPop.attackedIp = item.attacked_ip;
this.tableDataPop.attackedType = item.attacked_type;
this.tableDataPop.webLevel = item.web_level;
this.tableDataPop.subordinateDept = item.subordinate_dept;
this.tableDataPop.attackedIpRegion = item.attacked_ip_region;
item.contact_tel === undefined
? (this.tableDataPop.contactTel = "-")
: (this.tableDataPop.contactTel = item.contact_tel);
item.contact_name === undefined
? (this.tableDataPop.contactName = "-")
: (this.tableDataPop.contactName = item.contact_name);
resolve();
}
});
});
}); });
}, },
async getAttackSource(e) { //================
let id = e.target.dataset.id; getAttackSource(e) {
if (!id) return;
this.dialogWidth = "1000px"; this.dialogWidth = "1000px";
getDetection(id).then((res) => { getCybersecurity(e.id).then((res) => {
this.tableDataPop = res.data;
this.dialogType = "安全监测"; this.dialogType = "安全监测";
this.tableDataPop = res.data;
this.dialogStatus = true; this.dialogStatus = true;
}); });
// await this.AttackClick(id)
}, },
/** /**
* 安全监管List * 安全监管List
*/ */
getListDetection() { // getListDetection() {
listDetection(this.checkParams).then((res) => { // listDetection(this.checkParams).then((res) => {
this.tableData = [...this.tableData, ...res.rows]; // this.tableData = [...this.tableData, ...res.rows];
this.checkTotal = res.total; // this.checkTotal = res.total;
}); // });
}, // },
/** /**
* 安全监测攻击类型统计 * 安全监测攻击类型统计
*/ */
getSaftyscreenSafety() { // getSaftyscreenSafety() {
listTj({ isStatus: 1 }).then((res) => { // listTj({ isStatus: 1 }).then((res) => {
this.monitorForm = res.rows[0]; // this.monitorForm = res.rows[0];
}); // });
}, // },
/** /**
* 监管对象各类别统计量 * 监管对象各类别统计量
*/ */
getSaftyscreenSupervise() { // getSaftyscreenSupervise() {
saftyscreenSupervise().then((res) => { // saftyscreenSupervise().then((res) => {
res.data.forEach((item) => { // res.data.forEach((item) => {
this.superviseObject.forEach((it) => { // this.superviseObject.forEach((it) => {
if (item.name == it.title) { // if (item.name == it.title) {
it.num = item.count; // it.num = item.count;
} // }
}); // });
}); // });
console.log(res, "aaa"); // console.log(res, "aaa");
}); // });
}, // },
/** /**
* 表格参数重置 * 表格参数重置
* */ * */
@ -703,72 +635,56 @@ export default {
this.total = 0; this.total = 0;
this.queryParams = { this.queryParams = {
pageNum: 1, pageNum: 1,
isStatus: 1,
pageSize: 10, pageSize: 10,
}; };
this.excelData = []; this.excelData = [];
this.excelDataHeader = []; this.excelDataHeader = [];
}, },
/** //
* 等保系统 getDbxt() {
*/ listDbxt(this.queryParams).then((res) => {
getDbSteam() {
listSystem(this.queryParams).then((res) => {
this.excelData = res.rows;
this.excelDataHeader = dbxtKeyValue; this.excelDataHeader = dbxtKeyValue;
this.excelData = res.rows;
this.total = res.total; this.total = res.total;
}); });
}, },
/** //
* 等保单位
*/
getDbUnit() { getDbUnit() {
listUnit(this.queryParams).then((res) => { listDbdw(this.queryParams).then((res) => {
this.excelData = res.rows;
this.excelDataHeader = dbdwKeyValue; this.excelDataHeader = dbdwKeyValue;
this.excelData = res.rows;
this.total = res.total; this.total = res.total;
}); });
}, },
/** //
* 政府网站
*/
getZfWeb() { getZfWeb() {
listWeb(this.queryParams).then((res) => { listZfwz(this.queryParams).then((res) => {
this.excelData = res.rows;
this.excelDataHeader = zfdwKeyValue; this.excelDataHeader = zfdwKeyValue;
this.excelData = res.rows;
this.total = res.total; this.total = res.total;
}); });
}, },
/** // IDC
* IDC单位
*/
getIdcUnit() { getIdcUnit() {
listIDCunit(this.queryParams).then((res) => { listIdcdw(this.queryParams).then((res) => {
this.excelData = res.rows;
this.excelDataHeader = IDCKeyValue; this.excelDataHeader = IDCKeyValue;
this.total = res.total;
});
},
/**
* 监管单位 || 网站监测 || 系统监测
*/
getJgUnit() {
listSource(this.queryParams).then((res) => {
this.excelData = res.rows; this.excelData = res.rows;
this.excelDataHeader = xitongjianceKeyValue;
this.total = res.total; this.total = res.total;
}); });
}, },
showAttack(item = "安全监测", total) {
showAttack(item, type) {
if (typeof item === "object") { if (typeof item === "object") {
// this.queryParams.pageNum = item.page;
this.queryParams.pageSize = item.limit;
} else { } else {
this.reset(); this.reset();
this.dialogType = item; this.dialogType = item;
} }
if (this.dialogType === "等保系统") { if (this.dialogType === "等保系统") {
this.dialogWidth = "4000px"; this.dialogWidth = "4000px";
this.getDbSteam(); this.getDbxt();
} }
if (this.dialogType === "等保单位") { if (this.dialogType === "等保单位") {
this.dialogWidth = "4000px"; this.dialogWidth = "4000px";
@ -782,53 +698,46 @@ export default {
this.dialogWidth = "1800px"; this.dialogWidth = "1800px";
this.getIdcUnit(); this.getIdcUnit();
} }
if ( if (this.dialogType === "监管单位" || this.dialogType === "网站监测") {
this.dialogType === "监管单位" ||
this.dialogType === "系统监测" ||
this.dialogType === "网站监测" ||
this.dialogType === "软探针" ||
this.dialogType === "硬探针"
) {
this.dialogWidth = "2100px"; this.dialogWidth = "2100px";
if (this.dialogType === "软探针") { if (!this.queryParams.type) {
this.queryParams.type = 4; this.queryParams.type = type;
} else if (this.dialogType === "硬探针") {
this.queryParams.type = 3;
} else if (this.dialogType === "监管单位") {
this.queryParams.type = 5;
} else if (this.dialogType === "网站监测") {
this.queryParams.type = 6;
} else {
this.queryParams.type = 7;
} }
listJgdw(this.queryParams).then((res) => {
this.getJgUnit(); this.excelDataHeader = xitongjianceKeyValue;
this.excelData = res.rows;
this.total = res.total;
});
}
if (this.dialogType == "系统监测") {
this.dialogWidth = "2100px";
if (!this.queryParams.type) {
this.queryParams.type = type;
}
listXtjc(this.queryParams).then((res) => {
this.excelDataHeader = xitongjianceKeyValue;
this.excelData = res.rows;
this.total = res.total;
});
}
if (this.dialogType === "硬探针" || this.dialogType === "软探针") {
this.dialogWidth = "2100px";
if (!this.queryParams.type) {
this.queryParams.type = type;
}
listRyz(this.queryParams).then((res) => {
this.excelDataHeader = rtzKeyValue;
this.excelData = res.rows;
this.total = res.total;
});
} }
this.$nextTick(() => { this.$nextTick(() => {
this.dialogStatus = true; this.dialogStatus = true;
}); });
}, },
// showAttack1(e) {
// getDataSource() { this.showAttack(e);
// getSource(9).then((res) => { },
// const data = JSON.parse(res["[]"][0].T_static_data.DATA);
// for (let i = 0; i < data.top.length; i++) {
// for (let j = 0; j < this.dataSource.top.length; j++) {
// if (data.top[i].title === this.dataSource.top[j].title) {
// this.dataSource.top[j].currentNum = data.top[i].currentNum;
// this.dataSource.top[j].total = data.top[i].total;
// }
// }
// }
// for (let i = 0; i < data.bottom.length; i++) {
// for (let j = 0; j < this.dataSource.bottom.length; j++) {
// if (data.bottom[i].title === this.dataSource.bottom[j].title) {
// this.dataSource.bottom[j].num = data.bottom[i].num;
// }
// }
// }
// });
// },
// //
mouseOver() { mouseOver() {
clearInterval(this.attackTime); clearInterval(this.attackTime);

@ -6,8 +6,8 @@
<div class="safetyBox"> <div class="safetyBox">
<div v-for="(item, idx) in safetyList" :key="idx"> <div v-for="(item, idx) in safetyList" :key="idx">
<div class="safetyBox_item"> <div class="safetyBox_item">
<div class="pone">{{ item.totalNum | commaFilter }}</div> <div class="pone">{{ item.yhCount | commaFilter }}</div>
<div class="ptwo">{{ item.typeName }}</div> <div class="ptwo">{{ item.yhName }}</div>
</div> </div>
</div> </div>
</div> </div>
@ -47,7 +47,8 @@
class="table_item" class="table_item"
> >
<div class="item_one"> <div class="item_one">
{{ notificationStatus(item.timeRangeFlag) }} <!-- {{ notificationStatus(item.timeRangeFlag) }} -->
{{ item.timeRangeFlag }}
</div> </div>
<div class="item_two">{{ item.notificationCount }}</div> <div class="item_two">{{ item.notificationCount }}</div>
<div class="item_three">{{ item.completionCount }}</div> <div class="item_three">{{ item.completionCount }}</div>
@ -123,13 +124,9 @@
class="dangerText" class="dangerText"
> >
<span :data-url="item.fileUrl">{{ item.unitName }}</span> <span :data-url="item.fileUrl">{{ item.unitName }}</span>
<span :data-url="item.fileUrl">{{ item.riskName }}</span> <span :data-url="item.fileUrl">{{ item.yhName }}</span>
<span :data-url="item.fileUrl">{{ <span :data-url="item.fileUrl">{{ item.level }}</span>
$filterDict("tc_yh_level", item.level) <span :data-url="item.fileUrl"> {{ item.yhLy }}</span>
}}</span>
<span :data-url="item.fileUrl">
{{ $filterDict("tc_yh_source", item.riskSource) }}</span
>
</div> </div>
</vue-seamless-scroll> </vue-seamless-scroll>
</div> </div>
@ -154,13 +151,13 @@
class="ctn_item" class="ctn_item"
> >
<div class="item_name" :data-url="item.fileUrl"> <div class="item_name" :data-url="item.fileUrl">
{{ item.depName }} {{ item.unitName }}
</div> </div>
<div class="item_ip" :data-url="item.fileUrl"> <div class="item_ip" :data-url="item.fileUrl">
{{ item.ip }} {{ item.ipAddress }}
</div> </div>
<span class="item_num" :data-url="item.fileUrl">{{ <span class="item_num" :data-url="item.fileUrl">{{
$filterDict("tc_steam_state", item.state) item.czState
}}</span> }}</span>
</div> </div>
</vue-seamless-scroll> </vue-seamless-scroll>
@ -242,7 +239,7 @@ import vueSeamlessScroll from "vue-seamless-scroll";
import ModuleTitle from "../../common/ModuleTitle.vue"; import ModuleTitle from "../../common/ModuleTitle.vue";
import ReportingStatistics from "./ReportingStatistics.vue"; import ReportingStatistics from "./ReportingStatistics.vue";
// import { getSafeHazardSatistic, getNotificationList } from '@/api/common' // import { getSafeHazardSatistic, getNotificationList } from '@/api/common'
import { dangerList, informList } from "./data.js"; import { listAqyh, listTbwc, listZxyh, listTbcz } from "@/api/networkSecurity";
import qs from "qs"; import qs from "qs";
const docx = require("docx-preview"); const docx = require("docx-preview");
import axios from "axios"; import axios from "axios";
@ -274,11 +271,13 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
isStatus: 1,
}, },
total2: 0, total2: 0,
queryParams2: { queryParams2: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
isStatus: 1,
}, },
loading: true, loading: true,
// //
@ -450,28 +449,23 @@ export default {
* 安全隐患大屏数据 * 安全隐患大屏数据
*/ */
safeListDP() { safeListDP() {
listCounty().then((res) => { listAqyh().then((res) => {
this.safetyList = res.rows; this.safetyList = res.rows;
// res.data.forEach((value, index) => {
// this.safetyList.forEach((value1, index1) => {
// if (value.type == value1.type) {
// this.safetyList[index1].value = value.count;
// }
// });
// });
}); });
}, },
/** /**
* 通报完成情况 * 通报完成情况
*/ */
getTBOver() { getTBOver() {
tbFinish().then((res) => { listTbwc().then((res) => {
console.log(res); res.rows.forEach((value1, index1) => {
res.data.forEach((value1, index1) => { this.notificationFinishList[index1].timeRangeFlag = value1.timeName;
this.notificationFinishList[index1].notificationCount = value1.count; this.notificationFinishList[index1].notificationCount =
this.notificationFinishList[index1].completionCount = value1.complete; value1.tbCount;
this.notificationFinishList[index1].completionCount =
value1.overCount;
this.notificationFinishList[index1].completionPercent = this.notificationFinishList[index1].completionPercent =
value1.pt * 100; value1.overScale;
}); });
}); });
}, },
@ -479,7 +473,7 @@ export default {
* 最新隐患 * 最新隐患
*/ */
getListDanger() { getListDanger() {
listDanger(this.queryParams).then((res) => { listZxyh(this.queryParams).then((res) => {
this.dangerList = [...this.dangerList, ...res.rows]; this.dangerList = [...this.dangerList, ...res.rows];
this.total = res.total; this.total = res.total;
}); });
@ -488,8 +482,7 @@ export default {
* 通报处置 * 通报处置
*/ */
getlistTb() { getlistTb() {
listTb(this.queryParams2).then((res) => { listTbcz(this.queryParams2).then((res) => {
console.log(res, "www");
this.informList = [...this.informList, ...res.rows]; this.informList = [...this.informList, ...res.rows];
this.total2 = res.total; this.total2 = res.total;
}); });
@ -556,6 +549,7 @@ export default {
}); });
return; return;
} }
console.log(e);
this.fileExtension = e.target.dataset.url.substring( this.fileExtension = e.target.dataset.url.substring(
e.target.dataset.url.lastIndexOf(".") + 1 e.target.dataset.url.lastIndexOf(".") + 1
); );

@ -11,12 +11,12 @@
const IDCKeyValue = [ const IDCKeyValue = [
{ {
name: "IDC名称", name: "IDC名称",
value: "unitName", value: "ldcName",
}, },
{ {
name: "所属区域", name: "所属区域",
value: "areaId", value: "areaId",
dictType: "town", dictType: "tc_area",
}, },
{ {
name: "IP段信息", name: "IP段信息",
@ -39,58 +39,58 @@ const dbdwKeyValue = [
width: 350, width: 350,
}, },
{ {
value: "postCode", // 邮政 编码 value: "postalCode", // 邮政 编码
name: "邮政编码", name: "邮政编码",
}, },
{ {
value: "unitProvince", // 单位地址 —省 value: "addressProvince", // 单位地址 —省
name: "单位地址—省", name: "单位地址—省",
}, },
{ {
value: "unitCity", // 单位地址 —市 value: "addressCity", // 单位地址 —市
name: "单位地址—市", name: "单位地址—市",
}, },
{ {
value: "unitCounty", // 单位地址—区 /县 value: "addressCounty", // 单位地址—区 /县
name: "单位地址—区/县", name: "单位地址—区/县",
}, },
{ {
value: "unitStreet", value: "unitAddress",
name: "单位地址", name: "单位地址",
}, },
{ {
value: "areaCode", // 行政区域 代码 value: "countyCode", // 行政区域 代码
name: "行政区域代码", name: "行政区域代码",
}, },
{ {
value: "affiliation", // 隶属 关系 value: "lsGx", // 隶属 关系
name: "隶属关系", name: "隶属关系",
width: 280, width: 280,
}, },
{ {
value: "unitType", // 单位 类型 value: "unitType", // 单位 类型
name: "单位类型", name: "单位类型",
dictType: "tc_unit_type", // dictType: "tc_unit_type",
}, },
{ {
value: "tmtType", // 行业 类型 value: "industryType", // 行业 类型
name: "行业类型", name: "行业类型",
dictType: "tc_tmt_type", // dictType: "tc_tmt_type",
}, },
{ {
value: "fuzeName", // 单位责任人—姓名 value: "fzrName", // 单位责任人—姓名
name: "单位责任人—姓名", name: "单位责任人—姓名",
}, },
{ {
value: "fuzeDuty", // 单位责任人—职务/职称 value: "fzrDuty", // 单位责任人—职务/职称
name: "单位责任人—职务", name: "单位责任人—职务",
}, },
{ {
value: "fuzeTel", // 单位责任人— 办公电话 value: "fzrTel", // 单位责任人— 办公电话
name: "单位责任人—办公电话", name: "单位责任人—办公电话",
}, },
{ {
value: "fuzeEmail", // 单位责任人— 电子邮件 value: "fzrEmail", // 单位责任人— 电子邮件
name: "单位责任人—电子邮件", name: "单位责任人—电子邮件",
// width: 300 // width: 300
}, },
@ -1517,7 +1517,7 @@ const dbdw = [
const zfdwKeyValue = [ const zfdwKeyValue = [
{ {
name: "网址", name: "网址",
value: "url", value: "webUrl",
}, },
{ {
name: "资产名称", name: "资产名称",
@ -4363,25 +4363,25 @@ const zfdw = [
]; ];
const rtzKeyValue = [ const rtzKeyValue = [
{ {
key: "资产名称", name: "资产名称",
value: "assetName", value: "zcName",
}, },
{ {
key: "所属分组", name: "所属单位",
value: "group", value: "affUnit",
}, },
{ {
key: "IP地址", name: "IP地 址",
value: "IPAddress", value: "sysyemIp",
}, },
{ {
key: "操作系统", name: "操作系统",
value: "operatingSystem", value: "os",
width: 600, width: 600,
}, },
{ {
key: "终端版本", name: "版本",
value: "terminalVersion", value: "versions",
}, },
]; ];
const rtz = [ const rtz = [
@ -5151,7 +5151,7 @@ const rtz = [
]; ];
const dbxtKeyValue = [ const dbxtKeyValue = [
{ {
value: "steamName", value: "systemName",
name: "系统名称", name: "系统名称",
width: 450, width: 450,
}, },
@ -5163,7 +5163,7 @@ const dbxtKeyValue = [
{ {
value: "safetyLevel", value: "safetyLevel",
name: "信息系统安全保护等级", name: "信息系统安全保护等级",
dictType: "tc_net_safety_level", // dictType: "tc_net_safety_level",
}, },
{ {
value: "unitName", value: "unitName",
@ -5171,16 +5171,16 @@ const dbxtKeyValue = [
width: 450, width: 450,
}, },
{ {
value: "yewuType", value: "businessType",
name: "业务类型", name: "业务类型",
}, },
{ {
value: "servicesArea", value: "serviceArea",
name: "服务范围", name: "服务范围",
width: 230, width: 230,
}, },
{ {
value: "servicesObj", value: "serviceObj",
name: "服务对象", name: "服务对象",
width: 230, width: 230,
}, },
@ -5189,40 +5189,40 @@ const dbxtKeyValue = [
name: "覆盖范围", name: "覆盖范围",
}, },
{ {
value: "networkNature", value: "networkProperty",
name: "网络性质", name: "网络性质",
}, },
{ {
value: "systemSitutation", value: "systemHlql",
name: "系统互联情况", name: "系统互联情况",
width: 300, width: 300,
}, },
{ {
value: "useTime", value: "startTime",
name: "投入运行使用日期", name: "投入运行使用日期",
width: 250, width: 250,
}, },
{ {
value: "isRate", value: "isLevel",
name: "系统是否分级", name: "系统是否分级",
dictType: "tc_yes_no", dictType: "tc_yes_no",
}, },
{ {
value: "rankTime", value: "systemDjtime",
name: "系统定级时间", name: "系统定级时间",
width: 200, width: 200,
}, },
{ {
value: "reviewCase", value: "psQk",
name: "专家评审情况", name: "专家评审情况",
}, },
{ {
value: "isParent", value: "isHaveDep",
name: "是否有主管部门", name: "是否有主管部门",
dictType: "tc_yes_no", dictType: "tc_yes_no",
}, },
{ {
value: "rankReport", value: "systemDjbg",
name: "系统定级报告", name: "系统定级报告",
}, },
{ {

@ -84,22 +84,22 @@ const yingTanZhen = [
const xitongjianceKeyValue = [ const xitongjianceKeyValue = [
{ {
name: "单位名称", name: "单位名称",
value: "affUnit", value: "unitName",
width: 450, width: 450,
}, },
{ {
name: "网站/系统名称", name: "网站/系统名称",
value: "systeamName", value: "systemName",
width: 450, width: 450,
}, },
{ {
name: "URL", name: "URL",
value: "url", value: "systemUrl",
width: 450, width: 450,
}, },
{ {
name: "IP地址", name: "IP地址",
value: "ipAddress", value: "sysyemIp",
}, },
// { // {
// name: "采用端口", // name: "采用端口",
@ -108,12 +108,12 @@ const xitongjianceKeyValue = [
{ {
name: "是否关注重点", name: "是否关注重点",
value: "isFocus", value: "isFocus",
dictType: "tc_yes_no", // dictType: "tc_yes_no",
}, },
{ {
name: "等保级别", name: "等保级别",
value: "level", value: "level",
dictType: "tc_net_safety_level", // dictType: "tc_net_safety_level",
}, },
// { // {
// key: '网站联系人', // key: '网站联系人',

@ -26,9 +26,13 @@
> >
{{ item.name }}</span {{ item.name }}</span
> >
<el-progress <!-- <el-progress
:percentage="item.value || 0" :percentage="item.value || 0"
:color="item.color" :color="item.color"
></el-progress> -->
<el-progress
:percentage="Number(item.info) || 0"
:color="item.color"
></el-progress> ></el-progress>
<div class="StatisticsText"> <div class="StatisticsText">
{{ item.info | commaFilter }} {{ item.info | commaFilter }}
@ -144,17 +148,13 @@
</template> </template>
</el-table> </el-table>
<div style="text-align: right"> <div style="text-align: right">
<el-pagination <paginations
:current-page="queryData.pageNum" v-show="total > 0"
:page-sizes="[10, 20, 30, 50, 100]"
:page-size="queryData.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
popper-class="select_bottom" :page.sync="queryData.pageNum"
@size-change="handleSizeChange" :limit.sync="queryData.pageSize"
@current-change="handleCurrentChange" @pagination="showAttack"
> />
</el-pagination>
</div> </div>
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@ -176,27 +176,21 @@
<div style="padding: 0 0 0 80px; height: 730px; overflow: auto"> <div style="padding: 0 0 0 80px; height: 730px; overflow: auto">
<el-row> <el-row>
<el-col :span="3" class="detail_title">标题</el-col> <el-col :span="3" class="detail_title">标题</el-col>
<el-col :span="21" class="detail_text">{{ <el-col :span="21" class="detail_text">{{ rowDta.title }}</el-col>
rowDta.sentimentName
}}</el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="3" class="detail_title">内容</el-col> <el-col :span="3" class="detail_title">内容</el-col>
<el-col :span="21" class="detail_text">{{ <el-col :span="21" class="detail_text">{{
rowDta.sentimentContent || "" rowDta.content || ""
}}</el-col> }}</el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="3" class="detail_title">来源</el-col> <el-col :span="3" class="detail_title">来源</el-col>
<el-col :span="21" class="detail_text">{{ <el-col :span="21" class="detail_text">{{ rowDta.source }}</el-col>
$filterDict("tc_yq_media", rowDta.source)
}}</el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="3" class="detail_title">时间</el-col> <el-col :span="3" class="detail_title">时间</el-col>
<el-col :span="21" class="detail_text">{{ <el-col :span="21" class="detail_text">{{ rowDta.dateTime }}</el-col>
rowDta.publishTime
}}</el-col>
</el-row> </el-row>
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@ -230,6 +224,12 @@ import { title } from "../../../../settings";
//======= //=======
import { yuqingChart, yuqingMsgStats, dtsxListGet } from "@/api/publicOpinion"; import { yuqingChart, yuqingMsgStats, dtsxListGet } from "@/api/publicOpinion";
import { yuqingListA, getWlyq } from "@/api/consensusList"; import { yuqingListA, getWlyq } from "@/api/consensusList";
import {
listYqzs,
listYqxxlnum,
listYqxxltj,
getYqxxltj,
} from "@/api/netWorkYq";
export default { export default {
components: { components: {
@ -256,36 +256,36 @@ export default {
// url: require('@/assets/sentimeent/icon-1.png') // url: require('@/assets/sentimeent/icon-1.png')
// }, // },
{ {
value: 2, value: 0,
name: "本地相关信息量", name: "本地相关信息量",
info: "0", info: "0",
color: "#4799f8", color: "#4799f8",
url: require("@/assets/sentimeent/舆情icon-2.png"), url: require("@/assets/sentimeent/舆情icon-2.png"),
type: 3, type: 1,
}, },
{ {
value: 3, value: 0,
name: "本地敏感信息量", name: "本地敏感信息量",
info: "0", info: "0",
color: "#ff5432", color: "#ff5432",
url: require("@/assets/sentimeent/舆情icon-5.png"), url: require("@/assets/sentimeent/舆情icon-5.png"),
type: 1, type: 2,
}, },
{ {
value: 4, value: 0,
name: "推送预警信息量", name: "推送预警信息量",
info: "0", info: "0",
color: "#ffed61", color: "#ffed61",
url: require("@/assets/sentimeent/舆情icon-4.png"), url: require("@/assets/sentimeent/舆情icon-4.png"),
type: 4, type: 3,
}, },
{ {
value: 5, value: 0,
name: "聚焦本地媒体量", name: "聚焦本地媒体量",
info: "0", info: "0",
color: "#20b028", color: "#20b028",
url: require("@/assets/sentimeent/舆情icon-3.png"), url: require("@/assets/sentimeent/舆情icon-3.png"),
type: 5, type: 4,
}, },
], ],
Warning: [ Warning: [
@ -347,7 +347,8 @@ export default {
queryData: { queryData: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
sentimentType: "", type: "",
isStatus: 1,
}, },
// //
positiveOpinion: [], positiveOpinion: [],
@ -375,76 +376,8 @@ export default {
clearInterval(this.attackTime); // clearInterval(this.attackTime); //
}, },
mounted() { mounted() {
// publicOpinionTrendChart().then((res) => {
// this.opinionTime = this.initTime()
// this.positiveOpinion = [225389, 190638, 194116, 175397, 173355, 163703, 196261]
// this.negativeOpinion = [20902, 22124, 21617, 20806, 22561, 21754, 22062]
// let str = ''
// res['T_SUBJECT_SEVEN_DAY[]'] = res['T_SUBJECT_SEVEN_DAY[]']?.length > 0 ? res['T_SUBJECT_SEVEN_DAY[]'] : []
// // res['T_SUBJECT_SEVEN_DAY[]'].forEach((item) => {
// // str = Number(item.created_time.split('-')[1]) + '.' + Number(item.created_time.split('-')[2])
// // if (!this.opinionTime.includes(str)) {
// // this.opinionTime.unshift(str)
// // }
// // })
// //
// res['T_SUBJECT_SEVEN_DAY[]'].forEach((item) => {
// str = Number(item.created_time.split('-')[1]) + '.' + Number(item.created_time.split('-')[2])
// if (this.opinionTime.includes(str)) {
// const index = this.opinionTime.findIndex(item => item === str)
// this.positiveOpinion[index] = 0
// this.negativeOpinion[index] = 0
// }
// })
// res['T_SUBJECT_SEVEN_DAY[]'].forEach((item) => {
// str = Number(item.created_time.split('-')[1]) + '.' + Number(item.created_time.split('-')[2])
// this.opinionTime.forEach((time, index) => {
// if (time === str) {
// if (item.orientation === '1' || item.orientation === '3') {
// this.positiveOpinion[index] += Number(item.count)
// }
// if (item.orientation === '2') {
// this.negativeOpinion[index] = item.count
// }
// }
// })
// })
// this.lineBox()
// })
// statisticsOfPublicOpinionInformation().then(res => {
// res['T_GET_PARAMETER[]']?.forEach(item => {
// this.Statistics.forEach(e => {
// if (e.name === this.obj[item.NAME]) {
// e.value = Number(item.CODE) / (Number(res['T_GET_PARAMETER[]'][2].CODE) + Number(res['T_GET_PARAMETER[]'][3].CODE) + Number(res['T_GET_PARAMETER[]'][4].CODE) + Number(res['T_GET_PARAMETER[]'][5].CODE)) * 100 || 0
// e.info = Number(item.CODE) || 0
// }
// })
// if (item.NAME === 'newsCount') {
// this.newsCount = item.CODE
// }
// if (item.NAME === 'warningCount') {
// this.warningCount = item.CODE
// }
// })
// })
// allProjects().then(res => {
// res['[]']?.forEach(item => {
// if (item.T_ALL_PROJECTS.subject_name === '1') {
// this.obj[''] = item.T_ALL_PROJECTS.subject_id
// }
// if (item.T_ALL_PROJECTS.subject_name === '') {
// this.obj[''] = ''
// }
// if (item.T_ALL_PROJECTS.subject_name === '') {
// this.obj[''] = ''
// }
// if (item.T_ALL_PROJECTS.subject_name === '') {
// this.obj[''] = ''
// }
// })
// })
this.changeBtn(); this.changeBtn();
this.getFilterData(); // this.getFilterData();
// //
this.getyqData(); this.getyqData();
}, },
@ -462,23 +395,23 @@ export default {
} }
return timeArr; return timeArr;
}, },
getFilterData() { // getFilterData() {
this.filterTime = setInterval(() => { // this.filterTime = setInterval(() => {
this.getData(); // this.getData();
}, 600000); // }, 600000);
}, // },
getData() { // getData() {
statisticsOfPublicOpinionInformation().then((res) => { // statisticsOfPublicOpinionInformation().then((res) => {
res["T_GET_PARAMETER[]"].forEach((item) => { // res["T_GET_PARAMETER[]"].forEach((item) => {
if (item.NAME === "newsCount") { // if (item.NAME === "newsCount") {
this.newsCount = item.CODE; // this.newsCount = item.CODE;
} // }
if (item.NAME === "warningCount") { // if (item.NAME === "warningCount") {
this.warningCount = item.CODE; // this.warningCount = item.CODE;
} // }
}); // });
}); // });
}, // },
// //
// //
mouseOver() { mouseOver() {
@ -498,60 +431,29 @@ export default {
}, },
// //
getyqData() { getyqData() {
yuqingChart().then((res) => { listYqzs().then((res) => {
console.log(res); console.log(res);
this.allDate = res.data; this.allDate = res.rows;
// //
this.allDate.sort(function (a, b) { this.allDate.sort(function (a, b) {
return new Date(a.publishTime) - new Date(b.publishTime); return new Date(a.dateTime) - new Date(b.dateTime);
}); });
let arr = []; this.allDate.forEach((value) => {
res.data.forEach((value) => {
// //
arr.push(value.publishTime); this.newDate.push(this.$moment(value.dateTime).format("MM-DD"));
}); this.positiveOpinion.push(value.count1);
// this.negativeOpinion.push(value.count2);
this.date = arr.filter(function (item, index) {
//==
return arr.indexOf(item) === index;
});
this.date.forEach((value) => {
this.newDate.push(value.slice(6));
let arr2 = res.data.filter((m) => {
return m.publishTime == value;
});
console.log(arr2);
arr2.forEach((e) => {
if (e.type == 1 && arr2.length < 2) {
this.negativeOpinion.push(e.count);
this.positiveOpinion.push(0);
} else if (e.type == 2 && arr2.length < 2) {
this.positiveOpinion.push(e.count);
this.negativeOpinion.push(0);
} else if (e.type == 1 && arr2.length == 2) {
this.negativeOpinion.push(e.count);
} else if (e.type == 2 && arr2.length == 2) {
this.positiveOpinion.push(e.count);
}
});
}); });
this.lineBox(); this.lineBox();
}); });
}, },
// //
getyqMsgStats() { getyqMsgStats() {
yuqingMsgStats().then((res) => { listYqxxlnum().then((res) => {
let arr = res.data; this.Statistics[0].info = res.rows[0].count1;
if (!arr) return; this.Statistics[1].info = res.rows[0].count2;
this.Statistics.forEach((value1, index1) => { this.Statistics[2].info = res.rows[0].count3;
arr.forEach((value2, index2) => { this.Statistics[3].info = res.rows[0].count4;
if (value1.type == value2.type) {
this.Statistics[index1].info = value2.count;
this.Statistics[index1].value = value2.pt;
return;
}
});
});
}); });
dtsxListGet({ isStatus: 1 }).then((res) => { dtsxListGet({ isStatus: 1 }).then((res) => {
@ -698,82 +600,42 @@ export default {
// //
clickDetails(val, type) { clickDetails(val, type) {
this.tableHeader = [ this.tableHeader = [
{ key: "标题", value: "sentimentName" }, { key: "标题", value: "title" },
{ key: "来源", width: 120, value: "source" }, { key: "来源", width: 120, value: "source" },
{ key: "时间", width: 200, value: "publishTime" }, { key: "时间", width: 200, value: "dateTime" },
]; ];
this.queryData = { this.queryData = {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
sentimentType: type, type,
isStatus: 1,
}; };
this.dialogTitle = val; this.dialogTitle = val;
this.wlyqList(); this.wlyqList();
}, },
// list // list
wlyqList() { wlyqList() {
yuqingListA(this.queryData).then((res) => { listYqxxltj(this.queryData).then((res) => {
console.log(res);
this.currentPageData = res.rows; this.currentPageData = res.rows;
this.currentPageData.forEach((value, index) => {
this.currentPageData[index].source = this.$filterDict(
"tc_yq_media",
value.source
);
});
this.total = res.total; this.total = res.total;
this.dialogStatus = true; this.dialogStatus = true;
}); });
}, },
// [0~10],[10~20]..., //
setCurrentPageData() { showAttack(e) {
const begin = (this.currentPage - 1) * this.pageSize; console.log(e);
const end = this.currentPage * this.pageSize; this.queryData.pageNum = e.page;
this.currentPageData = this.tableData.slice(begin, end); this.queryData.pageSize = e.limit;
},
handleSizeChange(val) {
this.queryData.pageSize = val;
this.wlyqList();
},
handleCurrentChange(val) {
this.queryData.pageNum = val;
this.wlyqList(); this.wlyqList();
}, },
rowClick(row) { rowClick(row) {
this.dialogDetails = true; this.dialogDetails = true;
getWlyq(row.id).then((res) => { getYqxxltj(row.id).then((res) => {
this.rowDta = res.data; this.rowDta = res.data;
}); });
}, },
dialogClose() { dialogClose() {
this.dialogStatus = false; this.dialogStatus = false;
this.pageSize = 20;
this.currentPage = 1;
},
format(data) {
var time = new Date(data);
var y = time.getFullYear();
var m = time.getMonth() + 1;
var d = time.getDate();
var hh = time.getHours();
var mm = time.getMinutes();
var ss = time.getSeconds();
return (
y +
"-" +
this.add0(m) +
"-" +
this.add0(d) +
" " +
this.add0(hh) +
":" +
this.add0(mm) +
":" +
this.add0(ss)
);
},
add0(m) {
return m < 10 ? "0" + m : m;
}, },
}, },
}; };

@ -34,11 +34,12 @@ import { mediaList } from "@/api/common";
import { echartsJump } from "../../../../../public/static/echartsJump"; import { echartsJump } from "../../../../../public/static/echartsJump";
import { yuqingTypes } from "@/api/publicOpinion"; import { yuqingTypes } from "@/api/publicOpinion";
import { listMtlx } from "@/api/netWorkYq";
export default { export default {
data() { data() {
return { return {
types: [ 1, 2, 3, 4, 5, 6, 7,8,], types: [1, 2, 3, 4, 5, 6, 7, 8],
piedata: [ piedata: [
{ {
name: "报刊", name: "报刊",
@ -80,26 +81,19 @@ export default {
}, },
mounted() { mounted() {
// mediaList().then(res => {
// this.piedata = []
// res['T_MEDIA_LIST[]'].forEach(media => {
// this.piedata.push({ name: media.source_type_name, value: media.rate })
// })
// this.pieBox()
// })
this.getData(); this.getData();
}, },
methods: { methods: {
getData() { getData() {
yuqingTypes({ type: "1" }).then((res) => { listMtlx().then((res) => {
res.data.forEach((value, index) => { res.rows.forEach((value, index) => {
if(!value) return this.piedata.forEach((value1, index1) => {
this.types.forEach((value1, index1) => { if (value.name == value1.name) {
if (value.type == value1) { this.piedata[index1].value = value.zb;
this.piedata[index1].value = value.pt;
} }
}); });
}); });
console.log(this.piedata);
this.pieBox(); this.pieBox();
}); });
}, },

@ -34,6 +34,8 @@
import { tagsList } from "@/api/common"; import { tagsList } from "@/api/common";
import { echartsJump } from "../../../../../public/static/echartsJump"; import { echartsJump } from "../../../../../public/static/echartsJump";
import { yuqingTypes } from "@/api/publicOpinion"; import { yuqingTypes } from "@/api/publicOpinion";
import { listSslx } from "@/api/netWorkYq";
export default { export default {
data() { data() {
return { return {
@ -120,19 +122,12 @@ export default {
this.getData(); this.getData();
}, },
methods: { methods: {
filterUrl(e) {
const result = this.imgList.filter((item) => item.type == e);
console.log(result[0]);
return result[0].url;
},
getData() { getData() {
yuqingTypes({ type: "2" }).then((res) => { listSslx().then((res) => {
res.data.forEach((value, index) => { res.rows.forEach((value, index) => {
console.log(value); this.piedata.forEach((value1, index1) => {
if(!value) return if (value.name == value1.name) {
this.imgList.forEach((value1, index1) => { this.piedata[index1].value = value.zb;
if (value.type == value1.type) {
this.piedata[index1].value = value.pt;
} }
}); });
}); });

Loading…
Cancel
Save