Commit 028a3763 authored by baiyanhao's avatar baiyanhao
parents e085b2e8 070f431d
......@@ -26,6 +26,7 @@
}
.home-page {
position: absolute;
overflow: hidden;
left: 0;
right: 0;
top: 0;
......@@ -44,8 +45,7 @@
margin-top: 10%;
width: 40%;
height: 100%;
background: url('../images/home/huxian.png') no-repeat;
background-size: 100% 75%;
position: relative;
.center-item-1 {
......@@ -204,8 +204,44 @@
flex-wrap: wrap;
margin-right: 3%;
align-items: center;
justify-content: center;
.bottom-item {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
.bottom-card {
width: 8rem;
padding: 0 10px;
cursor: pointer;
&:hover {
animation: jump 2s linear infinite;
@keyframes jump {
0%,
100% {
transform: translateY(20px);
}
50% {
transform: translateY(-20px);
}
}
}
&-img {
width: 40px;
height: 40px;
}
&-title {
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
text-align: center;
color: #ffffff;
line-height: 16px;
}
}
.card-box {
height: 34%;
......@@ -225,35 +261,59 @@
}
&-title {
position: absolute;
font-size: 18px;
font-size: 20px;
font-family: Microsoft YaHei, Microsoft YaHei-700;
font-weight: 700;
color: #ffffff;
line-height: 20px;
letter-spacing: 0.24px;
left: 50px;
left: 65px;
top: 0;
}
&-title2 {
position: absolute;
font-size: 18px;
font-size: 20px;
font-family: Microsoft YaHei, Microsoft YaHei-700;
font-weight: 700;
color: #ffffff;
line-height: 20px;
letter-spacing: 0.24px;
right: 50px;
right: 65px;
top: 0;
}
&-body {
padding: 5px 20px;
}
}
.center-back {
background: url('../images/home/huxian.png') no-repeat;
background-size: 100% 100%;
position: absolute;
left: -35px;
top: -30px;
width: 821px;
height: 673px;
animation: rotate 5s linear infinite;
@keyframes rotate {
0% {
transform: scale(1.1);
}
50% {
transform: scale(0.9);
}
100% {
transform: scale(1.1);
}
}
}
.show-card {
display: flex;
align-items: center;
justify-content: flex-start;
height: 6rem;
height: 8rem;
&-img {
width: 100px;
height: 100px;
......@@ -279,21 +339,3 @@
}
}
}
.bottom-card {
width: 14%;
margin: 0 1%;
padding: 0 10px;
cursor: pointer;
&-img {
width: 40px;
height: 40px;
}
&-title {
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
text-align: center;
color: #ffffff;
line-height: 16px;
}
}
......@@ -27,6 +27,7 @@
</div>
<el-upload
class="upload-demo"
ref="fileUpload"
:action="uploadImgUrl"
:on-preview="handlePreview"
v-model="model.file"
......@@ -36,11 +37,16 @@
:limit="1"
:on-success="handleSuccess"
:on-exceed="handleExceed"
:headers="headers"
>
<el-button size="small" :disabled="status" type="primary"
>上传文件</el-button
>
<div slot="tip" class="el-upload__tip"></div>
<div slot="tip" class="el-upload__tip">
<div v-if="model.path">
<el-link :href="model.path">{{ model.name }}</el-link>
</div>
</div>
</el-upload>
</div>
</template>
......@@ -60,7 +66,6 @@ export default {
default: false
},
defaultValue: {
default: ''
}
},
......@@ -70,7 +75,11 @@ export default {
value: '',
list: [],
file: '',
path: ''
path: '',
name: ''
},
headers: {
Authorization: 'Bearer ' + this.$store.getters.token
},
uploadImgUrl: process.env.VUE_APP_BASE_API + '/common/uploadMinio' // 上传的图片服务器地址
}
......@@ -92,7 +101,7 @@ export default {
mounted() {
if (this.defaultValue) {
this.model = this.defaultValue
this.$emit('changeVal', { name: this.prop, val: this.result})
this.$emit('changeVal', { name: this.prop, val: this.result })
this.$emit('makeRecord', { name: this.prop, record: this.model })
} else {
this.reset()
......@@ -127,12 +136,13 @@ export default {
console.log(file)
},
handleSuccess(res, file) {
if (res === 200) {
this.model.path = res.url
if (res.code === 200) {
this.model.path = process.env.VUE_APP_IMAGE_API + res.url
this.model.name = res.originalFilename
this.$refs.fileUpload.clearFiles()
this.$message.success('上传成功')
} else {
this.$message.error('error')
console.log(res, file)
}
},
handleExceed(files, fileList) {
......
<template>
<div class="checkbox-upload">
<el-checkbox-group :disabled="status" v-model="model.value" @change="input">
<el-checkbox
v-for="(i, k) in items.options"
:label="i.id"
:key="k"
>
{{ i.object }}
<el-checkbox v-for="(i, k) in items.options" :label="i.id" :key="k">
{{ i.object }}
</el-checkbox>
</el-checkbox-group>
<el-upload
......@@ -18,13 +14,19 @@
:before-remove="beforeRemove"
:show-file-list="false"
:limit="1"
ref="fileUpload"
:on-success="handleSuccess"
:on-exceed="handleExceed"
:headers="headers"
>
<el-button size="small" :disabled="status" type="primary"
>上传文件</el-button
>
<div slot="tip" class="el-upload__tip"></div>
<div slot="tip" class="el-upload__tip">
<div v-if="model.path">
<el-link :href="model.path">{{ model.name }}</el-link>
</div>
</div>
</el-upload>
</div>
</template>
......@@ -44,7 +46,6 @@ export default {
default: false
},
defaultValue: {
default: ''
}
},
......@@ -53,7 +54,11 @@ export default {
model: {
value: [],
file: '',
path: ''
path: '',
name: ''
},
headers: {
Authorization: 'Bearer ' + this.$store.getters.token
},
uploadImgUrl: process.env.VUE_APP_BASE_API + '/common/uploadMinio' // 上传的图片服务器地址
}
......@@ -71,7 +76,7 @@ export default {
mounted() {
if (this.defaultValue) {
this.model = this.defaultValue
this.$emit('changeVal', { name: this.prop, val: this.value})
this.$emit('changeVal', { name: this.prop, val: this.value })
this.$emit('makeRecord', { name: this.prop, record: this.result })
} else {
this.reset()
......@@ -81,9 +86,6 @@ export default {
input() {
let arr = []
this.items.options.map(i => {
console.log(this.model.value)
console.log(i)
if (this.model.value.includes(i.id)) {
arr.push(i.useCaseNo)
}
......@@ -99,7 +101,8 @@ export default {
this.model = {
value: [],
file: '',
path: ''
path: '',
name: ''
}
},
setDefaultValue(val) {
......@@ -112,12 +115,13 @@ export default {
console.log(file)
},
handleSuccess(res, file) {
if (res === 200) {
this.model.path = res.url
if (res.code === 200) {
this.model.path = process.env.VUE_APP_IMAGE_API + res.url
this.model.name = res.originalFilename
this.$refs.fileUpload.clearFiles()
this.$message.success('上传成功')
} else {
this.$message.error('error')
console.log(res, file)
}
},
handleExceed(files, fileList) {
......
......@@ -14,17 +14,23 @@
:action="uploadImgUrl"
:on-preview="handlePreview"
v-model="model.file"
ref="fileUpload"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:show-file-list="false"
:limit="1"
:on-success="handleSuccess"
:on-exceed="handleExceed"
:headers="headers"
>
<el-button size="small" :disabled="status" type="primary"
>上传文件</el-button
>
<div slot="tip" class="el-upload__tip"></div>
<div slot="tip" class="el-upload__tip">
<div v-if="model.path">
<el-link :href="model.path">{{ model.name }}</el-link>
</div>
</div>
</el-upload>
</div>
</template>
......@@ -44,7 +50,6 @@ export default {
default: false
},
defaultValue: {
default: ''
}
},
......@@ -53,7 +58,11 @@ export default {
model: {
value: '',
file: '',
path: ''
path: '',
name: ''
},
headers: {
Authorization: 'Bearer ' + this.$store.getters.token
},
uploadImgUrl: process.env.VUE_APP_BASE_API + '/common/uploadMinio' // 上传的图片服务器地址
}
......@@ -65,13 +74,13 @@ export default {
status(newVal) {
this.reset()
this.$emit('changeVal', { name: this.prop, val: [] })
this.$emit('makeRecord', { name: this.prop, record:{} })
this.$emit('makeRecord', { name: this.prop, record: {} })
}
},
mounted() {
if (this.defaultValue) {
this.model = this.defaultValue
this.$emit('changeVal', { name: this.prop, val: this.result})
this.$emit('changeVal', { name: this.prop, val: this.result })
this.$emit('makeRecord', { name: this.prop, record: this.model })
} else {
this.reset()
......@@ -85,8 +94,8 @@ export default {
arr.push(i.useCaseNo)
})
}
console.log(arr);
console.log(arr)
this.$emit('changeVal', { name: this.prop, val: arr.join(',') })
this.$emit('makeRecord', { name: this.prop, record: this.model })
},
......@@ -94,7 +103,8 @@ export default {
this.model = {
value: '',
file: '',
path: ''
path: '',
name: ''
}
},
setDefaultValue(val) {
......@@ -107,12 +117,13 @@ export default {
console.log(file)
},
handleSuccess(res, file) {
if (res === 200) {
this.model.path = res.url
if (res.code === 200) {
this.model.path = process.env.VUE_APP_IMAGE_API + res.url
this.model.name = res.originalFilename
this.$refs.fileUpload.clearFiles()
this.$message.success('上传成功')
} else {
this.$message.error('error')
console.log(res, file)
}
},
handleExceed(files, fileList) {
......
......@@ -7,6 +7,7 @@
</el-radio-group>
<el-upload
class="upload-demo"
ref="fileUpload"
:action="uploadImgUrl"
:on-preview="handlePreview"
v-model="model.file"
......@@ -16,11 +17,16 @@
:limit="1"
:on-success="handleSuccess"
:on-exceed="handleExceed"
:headers="headers"
>
<el-button size="small" :disabled="status" type="primary"
>上传文件</el-button
>
<div slot="tip" class="el-upload__tip"></div>
<div slot="tip" class="el-upload__tip">
<div v-if="model.path">
<el-link :href="model.path">{{ model.name }}</el-link>
</div>
</div>
</el-upload>
</div>
</template>
......@@ -40,7 +46,6 @@ export default {
default: false
},
defaultValue: {
default: ''
}
},
......@@ -49,9 +54,12 @@ export default {
model: {
value: '',
file: '',
path: ''
path: '',
name: ''
},
headers: {
Authorization: 'Bearer ' + this.$store.getters.token
},
uploadImgUrl: process.env.VUE_APP_BASE_API + '/common/uploadMinio' // 上传的图片服务器地址
}
},
......@@ -89,7 +97,8 @@ export default {
this.model = {
value: '',
file: '',
path: ''
path: '',
name:''
}
},
setDefaultValue(val) {
......@@ -102,12 +111,13 @@ export default {
console.log(file)
},
handleSuccess(res, file) {
if (res === 200) {
this.model.path = res.url
if (res.code === 200) {
this.model.path = process.env.VUE_APP_IMAGE_API + res.url
this.model.name = res.originalFilename
this.$refs.fileUpload.clearFiles()
this.$message.success('上传成功')
} else {
this.$message.error('error')
console.log(res, file)
}
},
handleExceed(files, fileList) {
......
<template>
<div
ref="chart"
style="width: 100%; height: 10rem; display: flex; justify-content: center"
style="width: 100%; height: 10rem; display: flex;margin-top: 2rem; justify-content: center"
></div>
</template>
<script>
......@@ -41,7 +41,7 @@ export default {
value: 1
}
],
radius: '65%',
radius: '75%',
// 水球颜色
color: ['#49d088', '#38b470', '#2aaf66'],
center: ['15%', '55%'],
......@@ -83,7 +83,7 @@ export default {
}
],
name: '修改',
radius: '65%',
radius: '75%',
// 水球颜色
color: ['#FE5555', '#F07581', '#FB5E61'],
center: ['50%', '55%'],
......@@ -126,7 +126,7 @@ export default {
],
//data: [0.6, 0.5, 0.4, 0.3],
data: [0, 0, 0, 0],
radius: '65%',
radius: '75%',
// 水球颜色
color: ['#FFBF11', '#F4B30E', '#EACE36'],
center: ['85%', '55%'],
......
......@@ -30,7 +30,7 @@ export default {
// 3.配置数据
const option = {
grid: {
top: '10%',
top: '15%',
bottom: '20%', //也可设置left和right设置距离来控制图表的大小
left: '10%',
right: '10%'
......@@ -65,6 +65,7 @@ export default {
},
yAxis: {
type: 'value',
name:'(个)',
nameTextStyle: {
color: '#b4dbfc'
},
......@@ -108,7 +109,7 @@ export default {
])
}
},
data: [120, 380, 248, 135, 290, 280, 320, 125]
data: [12, 38, 24, 13, 20, 28, 32, 12]
}
]
}
......
<template>
<div
ref="chart"
style="width: 100%; height: 100%; display: flex; justify-content: center"
></div>
<div class="chart-box">
<div
ref="chart"
style="width: 130%; height: 100%; display: flex; justify-content: center"
></div>
<div class="chart-x">● 攻击手段</div>
<div class="chart-y">攻击方式</div>
</div>
</template>
<script>
import { Left } from '@icon-park/vue'
export default {
name: 'AverageTest',
props: {
......@@ -30,23 +33,24 @@ export default {
// 3.配置数据
const option = {
grid: {
top: '10%',
bottom: '20%', //也可设置left和right设置距离来控制图表的大小
left: '10%',
right: '10%'
top: '15%',
bottom: '30%', //也可设置left和right设置距离来控制图表的大小
left: '8%',
right: '2%'
},
xAxis: {
data: [
'信息收集',
'环境控制',
'初始访问',
'命令/脚本执行',
'持久化控制',
'权限提升',
'信息\n收集',
'环境\n控制',
'初始\n访问',
'命令\n/脚本\n执行',
'持久\n化控\n制',
'权限\n提升',
'绕过',
'凭证获取',
'信息发现',
'横向移动'
'凭证\n获取',
'信息\n发现',
'横向\n移动'
],
axisLine: {
show: false, //隐藏X轴轴线
......@@ -67,6 +71,7 @@ export default {
},
yAxis: {
type: 'value',
name:'(个)',
nameTextStyle: {
color: '#b4dbfc'
},
......@@ -119,4 +124,27 @@ export default {
}
}
</script>
<style lang="scss" scoped></style>
<style lang="scss" scoped>
.chart-box {
position: relative;
height: 100%;
.chart-x {
color: #00FFE3;
position: absolute;
z-index: 100;
right: 10px;
top: 5px;
font-weight: bold;
font-size: 12px;
}
.chart-y {
color: #fff;
font-size: 12px;
position: absolute;
z-index: 100;
right: 10px;
bottom: 10px;
font-weight: bold;
}
}
</style>
......@@ -15,21 +15,22 @@
<td>发布第一版,V20240901</td>
</tr>
<tr>
<td>02</td>
<td>2024.09.01</td>
<td><el-tag type="success" effect="plain">车型检验</el-tag></td>
<td>发布第一版,V20240901</td>
<td><el-tag type="danger" effect="plain">车型审查</el-tag></td>
<td>发布第一版,v20240901</td>
</tr>
<tr>
<td>03</td>
<td>2024.09.01</td>
<td><el-tag type="warning" effect="plain">体系审查</el-tag></td>
<td>发布第一版,v20240901</td>
<td><el-tag type="success" effect="plain">车型检验</el-tag></td>
<td>发布第一版,V20240901</td>
</tr>
</table>
<div class="desc">检验标准:汽车整车信息安全技术要求</div>
<!-- <div class="desc">检验标准:汽车整车信息安全技术要求</div> -->
</div>
</template>
<script>
......
<template>
<div>
<table class="chart-table">
<tr>
<th>名称</th>
<th>更新时间</th>
<th>检验类型</th>
<th>内容详情</th>
</tr>
<tr>
<td>01</td>
<td>2024.09.01</td>
<td><el-tag type="warning" effect="plain">体系审查</el-tag></td>
<td>发布第一版,V20240901</td>
</tr>
<tr>
<td>02</td>
<td>2024.09.01</td>
<td><el-tag type="danger" effect="plain">车型审查</el-tag></td>
<td>发布第一版,v20240901</td>
</tr>
<tr>
<td>03</td>
<td>2024.09.01</td>
<td><el-tag type="success" effect="plain">车型检验</el-tag></td>
<td>发布第一版,V20240901</td>
</tr>
</table>
<!-- <div class="desc">检验标准:汽车整车信息安全技术要求</div> -->
</div>
</template>
<script>
export default {
name: 'card',
props: {
title: String
}
}
</script>
<style lang="scss" scoped>
.chart-table {
width: 100%;
border-collapse: collapse;
}
th {
background: #2c89f2;
color: #fff;
}
td {
font-size: 14px;
font-family: Microsoft YaHei, Microsoft YaHei-400;
font-weight: 400;
text-align: LEFT;
color: #b4dbfc;
background: rgba(44, 137, 242, 0.15);
}
th,
td {
padding: 10px;
text-align: center;
border-top: rgba(255, 255, 255, 0.3);
border-bottom: rgba(255, 255, 255, 0.3);
}
::v-deep {
.el-tag--plain {
background: transparent;
width: 100px;
height: 30px;
line-height: 30px;
font-size: 14px;
}
}
.desc {
font-size: 12px;
font-family: Microsoft YaHei, Microsoft YaHei-400;
font-weight: 400;
text-align: center;
color: #ffffff;
line-height: 24px;
margin-top: 10px;
}
</style>
......@@ -38,12 +38,13 @@
</card>
</div>
<div class="home-page-center">
<div class="center-back"></div>
<div
v-for="(item, key) in center"
:key="key"
:class="'center-item-' + (key + 1)"
>
<el-image :src="item.img" alt="" class="center-item-img"/>
<el-image :src="item.img" alt="" class="center-item-img" />
<div class="center-item-title">
{{ item.title }}
</div>
......@@ -53,13 +54,13 @@
</div>
</div>
<div class="home-page-other">
<cardRight title="变更检验内容-重点">
<cardRight title="信息安全变更的检验内容">
<table-chart></table-chart>
</cardRight>
<cardRight title="检验内容变更方式占比">
<pieChart></pieChart>
<cardRight title="软件升级变更的检验内容">
<table-chart-2></table-chart-2>
</cardRight>
<cardRight title="知识库">
<cardRight title="汽车安全场景知识库">
<div style="height: 24vh">
<planChart2></planChart2>
</div>
......@@ -71,13 +72,15 @@
<div
v-for="(item, key) in bottom"
:key="key"
class="bottom-card"
class="bottom-item"
@click="$router.push(item.link)"
>
<div class="bottom-card">
<el-image :src="item.img" class="bottomd-card-img" />
<div class="bottom-card-title">
{{ item.title }}
</div>
</div>
</div>
</div>
</div>
......@@ -90,6 +93,8 @@ import planChart from '../components/homeComponents/planChart.vue'
import planChart2 from '../components/homeComponents/planChart2.vue'
import pieChart from '../components/homeComponents/pieChart.vue'
import table from '../components/homeComponents/table.vue'
import table2 from '../components/homeComponents/table2.vue'
import { mapGetters } from 'vuex'
export default {
name: 'HomePage',
components: {
......@@ -98,7 +103,8 @@ export default {
cardRight,
pieChart,
planChart2,
'table-chart': table
'table-chart': table,
'table-chart-2': table2
},
data() {
return {
......@@ -152,63 +158,102 @@ export default {
link: '/setting/standard',
img: require('@/assets/images/home/bottom1.png')
},
{
title: '检测要点',
link: '/setting/standardPoint',
img: require('@/assets/images/home/bottom2.png')
},
{
title: '实施细则',
link: '/setting/standardTerms',
img: require('@/assets/images/home/bottom3.png')
},
{
title: '测试用例',
link: '/setting/standardTerms',
img: require('@/assets/images/home/bottom4.png')
},
{
title: '检测方案',
link: '/plan/customized',
img: require('@/assets/images/home/bottom5.png')
},
{
title: '内容评审',
link: '/review/review/createReview',
img: require('@/assets/images/home/bottom6.png')
}
],
center: [
{
title: '数据抓包',
number:13,
number: 13,
img: require('@/assets/images/home/box1.png')
},
{
title: '访问控制',
number:9,
number: 9,
img: require('@/assets/images/home/box2.png')
},
{
title: '扫描漏洞',
number:9,
number: 9,
img: require('@/assets/images/home/box5.png')
},
{
title: '拒绝服务',
number:9,
number: 9,
img: require('@/assets/images/home/box4.png')
},
{
title: '非授权访问写入',
number:13,
number: 13,
img: require('@/assets/images/home/box3.png')
}
]
}
},
cumputed: {
...mapGetters(['roles'])
},
created() {},
mounted() {},
mounted() {
let role = this.$store.state.user.roles[0]
this.bottom.push()
switch (role) {
case 'testing-institution':
this.bottom = this.bottom.concat(
{
title: '检测方案',
link: '/plan/customized',
img: require('@/assets/images/home/bottom5.png')
},
{
title: '内容评审',
link: '/review/review/createReview',
img: require('@/assets/images/home/bottom6.png')
}
)
break
case 'government-department':
this.bottom = this.bottom.concat({
title: '车企档案',
link: '/basic/archives?view=2',
img: require('@/assets/images/home/bottom5.png')
})
break
case 'standard_change_review':
this.bottom = this.bottom.concat(
{
title: '我的待审',
link: '/review/wait',
img: require('@/assets/images/home/bottom5.png')
},
{
title: '我的已审',
link: '/review/already',
img: require('@/assets/images/home/bottom6.png')
}
)
break
case 'admin':
this.bottom = this.bottom.concat(
{
title: '车企档案',
link: '/basic/archives?view=2',
img: require('@/assets/images/home/bottom5.png')
},
{
title: '权限管理',
link: '/system/role',
img: require('@/assets/images/home/bottom6.png')
}
)
break
default:
break
}
},
methods: {}
}
</script>
......@@ -91,8 +91,8 @@ export default {
logoImg: logoImg,
codeUrl: '',
loginForm: {
username: 'admin',
password: '123456@a',
username: '',
password: '',
rememberMe: false,
code: '',
uuid: ''
......
......@@ -248,10 +248,10 @@ export default {
let queryParams = {
inspectionTtem:this.inspectionItem,
inspectionStandardId: this.task.inspectionStandardId,
inspectionstandardName: this.task.inspectionStandardName,
inspectionStandardName: this.task.inspectionStandardName,
inspectCarCompanyName: this.task.inspectCarCompanyName,
carModel: this.task.carModel,
testorganizationName: this.task.testOrganizationName,
testOrganizationName: this.task.testOrganizationName,
createTime: this.task.createTime,
carExperimentRequest: {
regulationName: this.task.inspectionStandardName,
......
......@@ -45,6 +45,14 @@
></right-toolbar>
</el-form-item> -->
</el-form>
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
style="margin-bottom: 10px"
@click="handleAdd"
>定制方案</el-button
>
<el-table
v-if="refreshTable"
v-loading="loading"
......@@ -263,7 +271,11 @@ export default {
path: '/plan/customized?id=' + id
})
},
handleAdd() {
this.$router.push({
path: '/plan/customized'
})
},
getComponentSelect() {
componentSelect({
pageNum: 1,
......
......@@ -95,7 +95,11 @@
:file-list="fileList"
>
<el-button size="small" type="primary">更新模板文件</el-button>
<div slot="tip" class="el-upload__tip"></div>
<div slot="tip" class="el-upload__tip">
<div v-if="model.path">
<el-link :href="model.path">{{ model.name }}</el-link>
</div>
</div>
</el-upload>
</el-form-item>
<el-form-item label="检验结论" prop="conclusion">
......
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