add:UI测试-测试报告详情
This commit is contained in:
@@ -152,7 +152,7 @@ export const constantRoutes = [
|
|||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
component: () => import('@/views/test/performance/performanceAdd'),
|
component: () => import('@/views/test/performance/performanceAdd'),
|
||||||
name: 'performanceAdd',
|
name: 'PerformanceAdd',
|
||||||
noCache: true,
|
noCache: true,
|
||||||
meta: { title: '新增测试', activeMenu: '/performance' }
|
meta: { title: '新增测试', activeMenu: '/performance' }
|
||||||
}
|
}
|
||||||
@@ -166,7 +166,7 @@ export const constantRoutes = [
|
|||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
component: () => import('@/views/test/performance/performanceEdit'),
|
component: () => import('@/views/test/performance/performanceEdit'),
|
||||||
name: 'performanceAdd',
|
name: 'PerformanceEdit',
|
||||||
noCache: true,
|
noCache: true,
|
||||||
meta: { title: '修改测试', activeMenu: '/performance' }
|
meta: { title: '修改测试', activeMenu: '/performance' }
|
||||||
}
|
}
|
||||||
@@ -180,9 +180,23 @@ export const constantRoutes = [
|
|||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
component: () => import('@/views/test/performance/reportDetail'),
|
component: () => import('@/views/test/performance/reportDetail'),
|
||||||
name: 'performanceAdd',
|
name: 'ReportDetail',
|
||||||
noCache: true,
|
noCache: true,
|
||||||
meta: { title: '修改测试', activeMenu: '/performance' }
|
meta: { title: '报告详情', activeMenu: '/performance' }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/ui-test/report/detail',
|
||||||
|
component: Layout,
|
||||||
|
hidden: true,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
component: () => import('@/views/test/uiTest/testReportDetail'),
|
||||||
|
name: 'TestReportDetail',
|
||||||
|
noCache: true,
|
||||||
|
meta: { title: '测试报告', activeMenu: '/ui-test' }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -40,10 +40,8 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<div class="page">
|
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
||||||
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
:page-size="searchForm.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" />
|
||||||
:page-size="searchForm.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</folder-page>
|
</folder-page>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -26,10 +26,8 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<div class="page">
|
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
||||||
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
:page-size="searchForm.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" />
|
||||||
:page-size="searchForm.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- 创建元素、编辑元素 -->
|
<!-- 创建元素、编辑元素 -->
|
||||||
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="40%">
|
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="40%">
|
||||||
@@ -130,12 +128,12 @@ export default {
|
|||||||
},
|
},
|
||||||
// 查看
|
// 查看
|
||||||
handleClickDetail() { },
|
handleClickDetail() { },
|
||||||
handleSizeChange() { },
|
|
||||||
// 确定
|
// 确定
|
||||||
handleWithAdd() {
|
handleWithAdd() {
|
||||||
console.log(this.editForm)
|
console.log(this.editForm)
|
||||||
},
|
},
|
||||||
handleCurrentChange() { },
|
handleCurrentChange() { },
|
||||||
|
handleSizeChange() { },
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,35 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>测试报告</div>
|
<div class="report">
|
||||||
|
<div class="header">
|
||||||
|
<div class="searchInput">
|
||||||
|
<i class="el-icon-search"></i>
|
||||||
|
<el-input class="input" v-model="search" placeholder="根据名称搜索"></el-input>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list">
|
||||||
|
<el-table :data="reportList">
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
|
<el-table-column prop="id" label="ID" width="50" align="center" />
|
||||||
|
<el-table-column prop="performanceName" label="名称" width="150" align="center" sortable />
|
||||||
|
<el-table-column prop="createBy" label="报告类型" width="150" align="center" />
|
||||||
|
<el-table-column prop="createTime" label="创建人" width="150" align="center" sortable />
|
||||||
|
<el-table-column prop="updateTime" label="创建时间" width="150" align="center" sortable />
|
||||||
|
<el-table-column prop="status" label="结束时间" width="150" align="center" sortable />
|
||||||
|
<el-table-column prop="status" label="触发方式" width="150" align="center" />
|
||||||
|
<el-table-column prop="status" label="状态" width="150" align="center" />
|
||||||
|
<el-table-column prop="action" label="操作" align="center" fixed="right" width="150px">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button type="text" icon="el-icon-view" @click="handleClickDetail(scope.row)"
|
||||||
|
style="color: green;">查看</el-button>
|
||||||
|
<el-button type="text" icon="el-icon-delete" style="color: red;"
|
||||||
|
@click="hadleClickDelete(scope.row)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
||||||
|
:page-size="searchForm.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
@@ -7,12 +37,30 @@ export default {
|
|||||||
name: "TestReport",
|
name: "TestReport",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
search: '',
|
||||||
|
reportList: [{}],
|
||||||
|
searchForm: {
|
||||||
|
pageNumber: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
},
|
||||||
|
total: 0,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
// 删除
|
||||||
|
hadleClickDelete(val) {
|
||||||
|
this.$modal.confirm('确认删除元素' + '?').then(() => {
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
}).catch(() => { })
|
||||||
|
},
|
||||||
|
// 查看
|
||||||
|
handleClickDetail(val) {
|
||||||
|
this.$tab.openPage("测试报告详情", "/ui-test/report/detail", { id: val.id });
|
||||||
|
},
|
||||||
|
handleSizeChange() { },
|
||||||
|
handleCurrentChange() { },
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -21,4 +69,38 @@ export default {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style scoped lang="scss"></style>
|
<style scoped lang="scss">
|
||||||
|
.report {
|
||||||
|
padding: 20px;
|
||||||
|
|
||||||
|
.header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
|
||||||
|
.searchInput {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
border: 1px solid #DCDFE6;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 0 10px;
|
||||||
|
|
||||||
|
.input {
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 去除 el-input 的边框 */
|
||||||
|
::v-deep .el-input__inner {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
margin-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20px;
|
||||||
|
align-items: flex-end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
341
test-ui/src/views/test/uiTest/testReportDetail.vue
Normal file
341
test-ui/src/views/test/uiTest/testReportDetail.vue
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
<template>
|
||||||
|
<div class="report-detail">
|
||||||
|
<div class="header">
|
||||||
|
<div class="header-title">登录 开始时间 结束时间</div>
|
||||||
|
<div class="header-content">
|
||||||
|
<div class="content-title">42.28s</div>
|
||||||
|
<div class="left-wrap">
|
||||||
|
<!-- 环形图 -->
|
||||||
|
<div>
|
||||||
|
</div>
|
||||||
|
<div class="left-count">
|
||||||
|
<div class="left-count-show">
|
||||||
|
<div class="green-wrap"></div>
|
||||||
|
<div style="font-weight: 600;">4 成功</div>
|
||||||
|
</div>
|
||||||
|
<el-divider></el-divider>
|
||||||
|
<div class="left-count-show">
|
||||||
|
<div class="red-wrap"></div>
|
||||||
|
<div style="font-weight: 600;">0 失败</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="middle-wrap">
|
||||||
|
<div class="wrap-show">
|
||||||
|
<div class="middle-wrap">
|
||||||
|
<div class="title">1</div>
|
||||||
|
<div>场景</div>
|
||||||
|
</div>
|
||||||
|
<div class="green-wrap"></div>
|
||||||
|
<div class="middle-wrap">
|
||||||
|
<div class="title">1</div>
|
||||||
|
<div>失败</div>
|
||||||
|
</div>
|
||||||
|
<div class="red-wrap"></div>
|
||||||
|
<div class="middle-wrap">
|
||||||
|
<div class="title">1</div>
|
||||||
|
<div>成功</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-divider></el-divider>
|
||||||
|
<div class="wrap-show">
|
||||||
|
<div class="middle-wrap">
|
||||||
|
<div class="title">1</div>
|
||||||
|
<div>步骤</div>
|
||||||
|
</div>
|
||||||
|
<div class="green-wrap"></div>
|
||||||
|
<div class="middle-wrap">
|
||||||
|
<div class="title">1</div>
|
||||||
|
<div>失败</div>
|
||||||
|
</div>
|
||||||
|
<div class="red-wrap"></div>
|
||||||
|
<div class="middle-wrap">
|
||||||
|
<div class="title">1</div>
|
||||||
|
<div>成功</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div></div>
|
||||||
|
</div>
|
||||||
|
<div class="right-wrap">
|
||||||
|
<div class="error-wrap">
|
||||||
|
<i class="el-icon-warning-outline" style="color: red; font-size: 30px;"></i>
|
||||||
|
<div class="show-title">0%</div>
|
||||||
|
<div class="show-sub">失败</div>
|
||||||
|
</div>
|
||||||
|
<div class="error-wrap">
|
||||||
|
<i class="el-icon-document-checked" style="font-size: 30px;"></i>
|
||||||
|
<div class="show-title">0-0</div>
|
||||||
|
<div class="show-sub">成功断言</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list">
|
||||||
|
<el-tabs v-model="activeName" @tab-click="handleClick">
|
||||||
|
<el-tab-pane label="全部" name="first">
|
||||||
|
<el-collapse accordion>
|
||||||
|
<el-collapse-item v-for="(item, index) in allList">
|
||||||
|
<template slot="title">
|
||||||
|
<div class="list-title">{{ index + 1 }}</div>
|
||||||
|
{{ item.title }}
|
||||||
|
</template>
|
||||||
|
<div class="list-sub-wrap">
|
||||||
|
<el-collapse accordion>
|
||||||
|
<el-collapse-item v-for="(row, index) in item.contentList">
|
||||||
|
<template slot="title">
|
||||||
|
<div class="sub-title">{{ index + 1 }}</div>
|
||||||
|
<div class="sub-content">
|
||||||
|
<div>----打开网页</div>
|
||||||
|
<div>1231ms</div>
|
||||||
|
<el-button size="mini" type="text" @click.native.stop="clickHandleScreenshot">截图</el-button>
|
||||||
|
<div>成功</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div style="display: flex; justify-content: flex-end;">开始时间:---- ---- --- 结束时间 ---- ---- --</div>
|
||||||
|
<el-tabs v-model="active" @tab-click="handleClick" style="margin-left: 20px;">
|
||||||
|
<el-tab-pane label="日志" name="first">日志</el-tab-pane>
|
||||||
|
<el-tab-pane label="断言" name="second">断言</el-tab-pane>
|
||||||
|
<el-tab-pane label="提取" name="third">提取</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="失败" name="second">
|
||||||
|
<el-collapse accordion>
|
||||||
|
<el-collapse-item v-for="(item, index) in failureList">
|
||||||
|
<template slot="title">
|
||||||
|
<div class="list-title">{{ index + 1 }}</div>
|
||||||
|
{{ item.title }}
|
||||||
|
</template>
|
||||||
|
<div class="list-sub-wrap">
|
||||||
|
<el-collapse accordion>
|
||||||
|
<el-collapse-item v-for="(row, index) in item.contentList">
|
||||||
|
<template slot="title">
|
||||||
|
<div class="sub-title">{{ index + 1 }}</div>
|
||||||
|
<div class="sub-content">
|
||||||
|
<div>----打开网页</div>
|
||||||
|
<div>1231ms</div>
|
||||||
|
<el-button size="mini" type="text" @click.native.stop="clickHandleScreenshot">截图</el-button>
|
||||||
|
<div>成功</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div style="display: flex; justify-content: flex-end;">开始时间:---- ---- --- 结束时间 ---- ---- --</div>
|
||||||
|
<el-tabs v-model="active" @tab-click="handleClick" style="margin-left: 20px;">
|
||||||
|
<el-tab-pane label="日志" name="first">日志</el-tab-pane>
|
||||||
|
<el-tab-pane label="断言" name="second">断言</el-tab-pane>
|
||||||
|
<el-tab-pane label="提取" name="third">提取</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="未执行" name="third">
|
||||||
|
<el-collapse accordion>
|
||||||
|
<el-collapse-item v-for="(item, index) in unexecutedList">
|
||||||
|
<template slot="title">
|
||||||
|
<div class="list-title">{{ index + 1 }}</div>
|
||||||
|
{{ item.title }}
|
||||||
|
</template>
|
||||||
|
<div class="list-sub-wrap">
|
||||||
|
<el-collapse accordion>
|
||||||
|
<el-collapse-item v-for="(row, index) in item.contentList">
|
||||||
|
<template slot="title">
|
||||||
|
<div class="sub-title">{{ index + 1 }}</div>
|
||||||
|
<div class="sub-content">
|
||||||
|
<div>----打开网页</div>
|
||||||
|
<div>1231ms</div>
|
||||||
|
<el-button size="mini" type="text" @click.native.stop="clickHandleScreenshot">截图</el-button>
|
||||||
|
<div>成功</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div style="display: flex; justify-content: flex-end;">开始时间:---- ---- --- 结束时间 ---- ---- --</div>
|
||||||
|
<el-tabs v-model="active" @tab-click="handleClick" style="margin-left: 20px;">
|
||||||
|
<el-tab-pane label="日志" name="first">日志</el-tab-pane>
|
||||||
|
<el-tab-pane label="断言" name="second">断言</el-tab-pane>
|
||||||
|
<el-tab-pane label="提取" name="third">提取</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import * as echarts from 'echarts';
|
||||||
|
export default {
|
||||||
|
name: "TestReportDetail",
|
||||||
|
components: { echarts },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeName: 'first',
|
||||||
|
allList: [{ title: 'aaa', contentList: [{}, {}] }, { title: 'bbb', contentList: [{}, {}] }], // 全部
|
||||||
|
failureList: [{ title: 'aaa', contentList: [{}, {}] }, { title: 'bbb', contentList: [{}, {}] }], // 失败
|
||||||
|
unexecutedList: [{ title: 'aaa', contentList: [{}, {}] }, { title: 'bbb', contentList: [{}, {}] }], // 未执行
|
||||||
|
active: 'first'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleClick() { },
|
||||||
|
// 截图
|
||||||
|
clickHandleScreenshot() {
|
||||||
|
console.log('截图')
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.report-detail {
|
||||||
|
padding: 20px;
|
||||||
|
|
||||||
|
.header {
|
||||||
|
.header-title {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.green-wrap {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
background-color: green;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.red-wrap {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
background-color: red;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-content {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-top: 20px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
gap: 10px;
|
||||||
|
|
||||||
|
.content-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-wrap {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-title {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-sub {
|
||||||
|
color: gray;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.middle-wrap {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin: 0px 30px;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrap-show {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-wrap {
|
||||||
|
display: flex;
|
||||||
|
gap: 50px;
|
||||||
|
padding: 0px 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-wrap {
|
||||||
|
display: flex;
|
||||||
|
gap: 30px;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.left-count {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.left-count-show {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 20px
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
.list-title {
|
||||||
|
margin-right: 10px;
|
||||||
|
color: gray;
|
||||||
|
border: solid 1px gray;
|
||||||
|
border-radius: 12.5px;
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-sub-wrap {
|
||||||
|
margin-left: 20px;
|
||||||
|
|
||||||
|
.sub-title {
|
||||||
|
margin-right: 10px;
|
||||||
|
color: green;
|
||||||
|
border: solid 1px green;
|
||||||
|
border-radius: 10px;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sub-content {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user