Commit 9509e587 authored by 赵啸非's avatar 赵啸非

Merge remote-tracking branch 'origin/master'

parents 14487efc a597f97d
This source diff could not be displayed because it is too large. You can view the blob instead.
import http from "../request/http";
let baseURL = process.env.VUE_APP_API_PHP_URL;
//群众画像-整体情况
export function peopleQs(params) {
return http.get(`${baseURL}/inter/Personas/peopleQs`, params);
}
//注册区域分析
export function registerProvince(params) {
return http.get(`${baseURL}/inter/Personas/registerProvince`, params);
}
//本外地注册区域分析
export function registerBwd(params) {
return http.get(`${baseURL}/inter/Personas/registerBwd`, params);
}
//注册性别分析
export function registerSex(params) {
return http.get(`${baseURL}/inter/Personas/registerSex`, params);
}
//注册年龄分析
export function registerAge(params) {
return http.get(`${baseURL}/inter/Personas/registerAge`, params);
}
//注册民族分析
export function registerNation(params) {
return http.get(`${baseURL}/inter/Personas/registerNation`, params);
}
//办件用户地域分析
export function provinceCase(params) {
return http.get(`${baseURL}/inter/statistic/provinceCase`, params);
}
//办件省份下地域分析
export function provinceStatistic(params) {
return http.get(`${baseURL}/inter/statistic/provinceStatistic`, params);
}
//本外地分析
export function bwdStatistic(params) {
return http.get(`${baseURL}/inter/statistic/bwdStatistic`, params);
}
//性别办件分析
export function genderRateType(params) {
return http.get(`${baseURL}/inter/Personas/genderRateType`, params);
}
//办件年龄分析
export function ageRate(params) {
return http.get(`${baseURL}/inter/statistic/ageRate`, params);
}
//民族办件次数分析
export function TopNationStatistic(params) {
return http.get(`${baseURL}/inter/statistic/TopNationStatistic`, params);
}
/* 颜色 */
.primary {
color: #1890ff;
}
.delete {
color: #ff4d4f;
}
.green {
color: #1bbc9b;
}
.clofff {
color: #fff;
}
.orange {
color: orange;
}
.bgdel {
background-color: #ff4d4f;
}
.bgpr {
background-color: #1890ff;
}
.bgg {
background-color: #1bbc9b;
}
/* 版心 */
.container {
width: 1200px;
}
/* 弹性布局 */
.flex {
display: flex;
}
.flex1 {
flex: 1;
}
.flexc {
flex-direction: column;
}
.flexwrap {
flex-wrap: wrap;
}
.jcc {
justify-content: center;
}
.jca {
justify-content: space-around;
}
.jcb {
justify-content: space-between;
}
.jce {
justify-content: space-evenly;
}
.aic {
align-items: center;
}
.aca {
align-content: space-around;
}
.acb {
align-content: space-between;
}
.ace {
align-content: space-evenly;
}
/* margin */
.m10 {
margin: 10px;
}
.m15 {
margin: 15px;
}
.m20 {
margin: 20px;
}
.mt10 {
margin-top: 10px;
}
.mt15 {
margin-top: 15px;
}
.mt20 {
margin-top: 20px;
}
.mt50 {
margin-top: 50px;
}
.ml10 {
margin-left: 10px;
}
.ml15 {
margin-left: 15px;
}
.ml20 {
margin-left: 20px;
}
.ml25 {
margin-left: 25px;
}
.mr10 {
margin-right: 10px;
}
.mr15 {
margin-right: 15px;
}
.mr20 {
margin-right: 20px;
}
.mr25 {
margin-right: 25px;
}
.mr50 {
margin-right: 50px;
}
.mb10 {
margin-bottom: 10px;
}
.mb15 {
margin-bottom: 15px;
}
.mb20 {
margin-bottom: 20px;
}
.mb25 {
margin-bottom: 25px;
}
/* padding */
.pd10 {
padding: 10px;
}
.pd15 {
padding: 15px;
}
.pd20 {
padding: 20px;
}
.pdt10 {
padding-top: 10px;
}
.pdt15 {
padding-top: 15px;
}
.pdt20 {
padding-top: 20px;
}
.pdt30 {
padding-top: 30px;
}
.pdl8 {
padding-left: 8px;
}
.pdl10 {
padding-left: 10px;
}
.pdl15 {
padding-left: 15px;
}
.pdl20 {
padding-left: 20px;
}
.pdr10 {
padding-right: 10px;
}
.pdr15 {
padding-right: 15px;
}
.pdr20 {
padding-right: 20px;
}
.pdb10 {
padding-bottom: 10px;
}
.pdb15 {
padding-bottom: 15px;
}
.pdb20 {
padding-bottom: 20px;
}
/* 字体大小 */
.font16 {
font-size: 16px;
}
.font18 {
font-size: 18px;
}
.font20 {
font-size: 20px;
}
.font22 {
font-size: 22px;
}
.font24 {
font-size: 24px;
}
.font26 {
font-size: 26px;
}
.font28 {
font-size: 28px;
}
.font30 {
font-size: 30px;
}
/* 字体位置 */
.tac {
text-align: center;
}
.tal {
text-align: left;
}
.tar {
text-align: right;
}
/* 加粗 */
.fontw600 {
font-weight: 600;
}
.fontw700 {
font-weight: 700;
}
.fontw800 {
font-weight: 800;
}
/* 手型鼠标 */
.pointer {
cursor: pointer;
}
.pagination {
margin-top: 10px;
text-align: right;
}
.color_title {
margin-left: 15px;
position: relative;
margin-bottom: 15px;
color: #1890ff;
}
.color_title::before {
content: "";
width: 4px;
height: 20px;
position: absolute;
top: 0px;
left: -16px;
background-color: #0595fd;
}
::-webkit-scrollbar {
width: 6px;
height: 6px;
overflow-y: auto;
}
::-webkit-scrollbar-thumb {
border-radius: 6px;
background-color: rgba(144, 147, 153, 0.5);
}
::-webkit-scrollbar-track {
border-radius: 6px;
background: #fff;
}
.ant-modal-close {
color: #188fff !important;
}
.ant-modal-close svg {
font-size: 26px !important;
}
.ant-modal-title {
color: #1890ff !important;
font-size: 18px;
font-weight: bold;
}
.header_box {
padding-bottom: 1rem;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
.header_box > div {
display: flex;
justify-content: flex-start;
align-items: center;
}
.header_box > div b {
font-style: normal;
font-weight: unset;
font-size: 16px;
margin-left: 20px;
}
.header_box > div b i {
color: #0595fd;
font-style: normal;
}
.header_box > div sub {
font-size: 14px;
font-style: normal;
bottom: unset;
margin-left: 20px;
}
.header_box > div .export_btn {
outline: none;
cursor: pointer;
border: none;
padding: 0.8rem 1.2rem;
margin: 0;
font-family: inherit;
font-size: inherit;
position: relative;
display: inline-block;
font-size: 0.8rem;
border-radius: 6px;
overflow: hidden;
background: #42dac8;
color: ghostwhite;
}
.header_box > div .export_btn span {
position: relative;
z-index: 10;
transition: color 0.4s;
}
.header_box > div .export_btn:hover span {
color: #fef2f2;
}
.header_box > div .export_btn::before,
.header_box > div .export_btn::after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
.header_box > div .export_btn::before {
content: "";
background: #08cfb8;
width: 120%;
left: -10%;
transform: skew(30deg);
transition: transform 0.4s cubic-bezier(0.3, 1, 0.8, 1);
}
.header_box > div .export_btn:hover::before {
transform: translate3d(100%, 0, 0);
}
.header_box > span {
display: flex;
justify-content: space-between;
align-items: center;
}
.header_box > span /deep/ .ant-input-affix-wrapper {
width: 15rem !important;
margin-right: 1rem !important;
}
.header_box > span /deep/ .ant-input {
height: 2.3rem !important;
}
.header_box > span /deep/ .ant-select-selection {
width: 170px !important;
height: 2.3rem !important;
margin-right: 1rem !important;
}
.header_box > span /deep/ .ant-select-selection__rendered {
height: 100% !important;
}
.header_box > span /deep/ .ant-select-selection-selected-value {
height: 100% !important;
line-height: 2.3rem !important;
}
.header_box > span .search_btn {
padding: 0.8rem 1.2rem;
border: 0;
border-radius: 5px;
background: #1890ff;
box-shadow: rgba(0, 0, 0, 0.05) 0 0 8px;
letter-spacing: 1.5px;
text-transform: uppercase;
font-size: 0.8rem;
color: hsl(0, 0%, 100%);
transition: all 0.5s ease;
cursor: pointer;
}
.header_box > span .search_btn:hover {
letter-spacing: 3px;
background-color: #7d5cf9;
color: hsl(0, 0%, 100%);
box-shadow: #5d18dc 0px 2px 10px 0px;
}
.header_box > span .search_btn:active {
letter-spacing: 3px;
background-color: #7d5cf9;
color: hsl(0, 0%, 100%);
box-shadow: #5d18dc 0px 0px 0px 0px;
transform: translateY(2px);
transition: 100ms;
}
.main .type0 {
color: #888888;
}
.main .type1 {
color: #f94545;
}
.main .type2 {
color: #04ca8f;
}
.main .ant-btn-link {
padding: 0 !important;
}
.main .ant-btn-link + .ant-btn-link {
margin-left: 1rem !important;
}
.main .ant-table-pagination {
float: right !important;
}
.ant-btn-success {
background-color: #04ca8f;
border-color: #04ca8f;
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);
-webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.05);
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.05);
}
.ant-btn-success:hover,
.ant-btn-success:focus {
color: #fff;
background-color: #42dac8;
border-color: #42dac8;
}
.ant-select {
min-width: 120px;
}
.ant-calendar-picker {
min-width: 270px;
}
.ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.addclass {
background: linear-gradient(90deg, #5ab6ff 0%, #2e9aff 100%) !important;
color: #fff !important;
}
......@@ -320,6 +320,7 @@
left: -16px;
background-color: rgba(5, 149, 253, 1);
}
::-webkit-scrollbar {
width: 6px;
height: 6px;
......@@ -335,24 +336,29 @@
border-radius: 6px;
background: #fff;
}
.ant-modal-close {
color: #188fff !important;
}
.ant-modal-close svg {
font-size: 26px !important;
}
.ant-modal-title {
color: #1890ff !important;
font-size: 18px;
font-weight: bold;
}
.header_box {
padding-bottom: 1rem;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
& > div {
&>div {
display: flex;
justify-content: flex-start;
align-items: center;
......@@ -362,17 +368,20 @@
font-weight: unset;
font-size: 16px;
margin-left: 20px;
i {
color: #0595fd;
font-style: normal;
}
}
sub {
font-size: 14px;
font-style: normal;
bottom: unset;
margin-left: 20px;
}
.export_btn {
outline: none;
cursor: pointer;
......@@ -388,6 +397,7 @@
overflow: hidden;
background: #42dac8;
color: ghostwhite;
& span {
position: relative;
z-index: 10;
......@@ -423,29 +433,35 @@
}
}
& > span {
&>span {
display: flex;
justify-content: space-between;
align-items: center;
/deep/.ant-input-affix-wrapper {
width: 15rem !important;
margin-right: 1rem !important;
}
/deep/.ant-input {
height: 2.3rem !important;
}
/deep/.ant-select-selection {
width: 170px !important;
height: 2.3rem !important;
margin-right: 1rem !important;
}
/deep/.ant-select-selection__rendered {
height: 100% !important;
}
/deep/.ant-select-selection-selected-value {
height: 100% !important;
line-height: 2.3rem !important;
}
.search_btn {
padding: 0.8rem 1.2rem;
border: 0;
......@@ -477,26 +493,33 @@
}
}
}
.main {
.type0 {
color: #888888;
}
.type1 {
color: #f94545;
}
.type2 {
color: #04ca8f;
}
.ant-btn-link {
padding: 0 !important;
& + .ant-btn-link {
&+.ant-btn-link {
margin-left: 1rem !important;
}
}
.ant-table-pagination {
float: right !important;
}
}
.ant-btn-success {
background-color: #04ca8f;
border-color: #04ca8f;
......@@ -505,18 +528,22 @@
-webkit-box-shadow: 0 2px 0 rgb(0 0 0 / 5%);
box-shadow: 0 2px 0 rgb(0 0 0 / 5%);
}
.ant-btn-success:hover,
.ant-btn-success:focus {
color: #fff;
background-color: #42dac8;
border-color: #42dac8;
}
.ant-select {
min-width: 120px;
}
.ant-calendar-picker {
min-width: 270px;
}
.ellipsis {
overflow: hidden;
text-overflow: ellipsis;
......
......@@ -9,17 +9,12 @@
</template>
<a-row type="flex" align="middle">
<a-col :span="4">
<div class="f_40 f_center warning">111</div>
<div class="f_40 f_center warning">{{ massCount }}</div>
<div class="f_center">群众注册总量</div>
<div class="f_center primary" @click="toTable">点击查看报表</div>
</a-col>
<a-col :span="20">
<lineChart
:id="`one_line`"
:title="`近30日注册情况分析`"
:datas="oneLineData"
:height="200"
:width="1420"/>
<lineChart :id="`one_line`" :title="`近30日注册情况分析`" :datas="oneLineData" :height="200" :width="1420" />
</a-col>
</a-row>
</a-card>
......@@ -32,57 +27,27 @@
</template>
<a-row>
<a-col :span="8">
<map-chart
:id="`one_map`"
:datas="oneMapData"
:height="400"
:width="550"
/>
<map-chart :id="`one_map`" :datas="oneMapData" :height="400" :width="550" />
</a-col>
<a-col :span="8">
<a-table
:row-key="record => record.ranking" :dataSource="provinces" :columns="provincesColumns" :pagination="false">
<a-table :rowKey="(record, index) => { return index }" :dataSource="provinces"
:columns="provincesColumns" :scroll="{ y: 300 }" :pagination="false">
</a-table>
</a-col>
<a-col :span="8">
<pieChart
:id="`one_pie`"
:height="400"
:width="550"
:datas="onePieData"
/>
<pieChart :id="`one_pie`" :height="400" :width="550" :datas="onePieData" />
</a-col>
<a-col :span="12">
<doublePieChart
:id="`two_pie`"
:height="300"
:width="800"
:datas="twoPieData"
/>
<doublePieChart :id="`two_pie`" :height="300" :width="800" :datas="twoPieData" />
</a-col>
<a-col :span="12">
<barChart
:id="`one_bar`"
:height="300"
:width="800"
:datas="oneBarData"
/>
<barChart :id="`one_bar`" :height="300" :width="800" :datas="oneBarData" />
</a-col>
<a-col :span="12">
<barChart
:id="`two_bar`"
:height="300"
:width="800"
:datas="twoBarData"
/>
<barChart :id="`two_bar`" :height="300" :width="800" :datas="twoBarData" />
</a-col>
<a-col :span="12">
<pieChart
:id="`three_pie`"
:height="300"
:width="800"
:datas="threePieData"
/>
<pieChart :id="`three_pie`" :height="300" :width="800" :datas="threePieData" />
</a-col>
<a-col :span="12">
</a-col>
......@@ -100,57 +65,27 @@
<a-row type="flex" align="middle">
<a-row>
<a-col :span="8">
<map-chart
:id="`two_map`"
:datas="oneMapData"
:height="400"
:width="550"
/>
<map-chart :id="`two_map`" :datas="oneMapData2" :height="400" :width="550" />
</a-col>
<a-col :span="8">
<a-table
:row-key="record => record.ranking" :dataSource="provinces" :columns="provincesColumns" :pagination="false">
<a-table :rowKey="(record, index) => { return index }" :dataSource="provinces2"
:columns="provincesColumns2" :pagination="false" :scroll="{ y: 300 }">
</a-table>
</a-col>
<a-col :span="8">
<pieChart
:id="`four_pie`"
:height="400"
:width="550"
:datas="onePieData"
/>
<pieChart :id="`four_pie`" :height="400" :width="550" :datas="onePieData2" />
</a-col>
<a-col :span="12">
<doublePieChart
:id="`five_pie`"
:height="300"
:width="800"
:datas="twoPieData"
/>
<doublePieChart :id="`five_pie`" :height="300" :width="800" :datas="twoPieData2" />
</a-col>
<a-col :span="12">
<barChart
:id="`six_bar`"
:height="300"
:width="800"
:datas="oneBarData"
/>
<barChart :id="`six_bar`" :height="300" :width="800" :datas="oneBarData2" />
</a-col>
<a-col :span="12">
<barChart
:id="`three_bar`"
:height="300"
:width="800"
:datas="twoBarData"
/>
<barChart :id="`three_bar`" :height="300" :width="800" :datas="twoBarData2" />
</a-col>
<a-col :span="12">
<pieChart
:id="`six_pie`"
:height="300"
:width="800"
:datas="threePieData"
/>
<pieChart :id="`six_pie`" :height="300" :width="800" :datas="threePieData2" />
</a-col>
<a-col :span="12">
</a-col>
......@@ -169,13 +104,17 @@ import pieChart from "../../business/Component/pie/index.vue"
import lineChart from "../../business/Component/line/index.vue"
import mapChart from "../../business/Component/map/index.vue"
import moment from "moment"
export default {
components:{
import {
peopleQs, registerProvince, registerBwd, registerSex, registerAge, registerNation, provinceCase, bwdStatistic,
provinceStatistic, genderRateType, ageRate, TopNationStatistic
} from "@/api/userPortrait.js"
export default {
components: {
mapChart, pieChart, lineChart, doublePieChart, barChart
},
data(){
return{
options:[
data() {
return {
options: [
{
value: '0',
label: '今天',
......@@ -199,11 +138,17 @@ import moment from "moment"
],
oneLineData: {},
oneMapData: {},
oneMapData2: {},
onePieData: {},
onePieData2: {},
twoPieData: {},
twoPieData2: {},
oneBarData: {},
oneBarData2: {},
twoBarData: {},
twoBarData2: {},
threePieData: {},
threePieData2: {},
provinces: [
{
ranking: 1,
......@@ -218,165 +163,444 @@ import moment from "moment"
percent: '2'
},
],
provinces2: [
{
ranking: 1,
province: '四川省',
people: '999',
percent: '2'
},
{
ranking: 2,
province: '四川省',
people: '999',
percent: '2'
},
],
provincesColumns: [
{
key:'ranking',
key: 'ranking',
title: '序号',
dataIndex: 'ranking',
dataIndex: 'id',
},
{
key:'province',
key: 'province',
title: '省份',
dataIndex: 'province',
},
{
key:'people',
key: 'value',
title: '注册人数',
dataIndex: 'people',
dataIndex: 'value',
},
{
key:'percent',
key: 'zb_lv',
title: '注册占比',
dataIndex: 'percent',
dataIndex: 'zb_lv',
customRender(text, record, index) {
return parseFloat((text * 100).toFixed(2)) + "%"
}
},
],
provincesColumns2: [
{
key: 'ranking',
title: '序号',
dataIndex: 'id',
},
{
key: 'province',
title: '省份',
dataIndex: 'province',
},
{
key: 'value',
title: '办件人数',
dataIndex: 'value',
},
{
key: 'nums_val',
title: '办件占比',
dataIndex: 'nums_val',
customRender(text, record, index) {
return parseFloat((text * 100).toFixed(2)) + "%"
}
},
],
takeNumber: '0',
nowDate: ''
nowDate: '',
massCount: '0',//群众总量
timeArr: [],//群众注册时间
doTotal: 0
}
},
mounted(){
this.test()
created() {
this.getPeopleQs()
this.getRegisterProvince()
this.getRegisterBwd()
this.getRegisterSex()
this.getRegisterAge()
this.getRegisterNation()
this.getProvinceCase()
this.getProvinceStatistic()
this.getBwdStatistic()
this.getGenderRateType()
this.getAgeRate()
this.getTopNationStatistic()
},
methods:{
handleChange(){},
toTable(){
this.$router.push({path:'register'})
mounted() {
this.nowDate = moment(new Date()).format('YYYY-MM-DD h:mm:ss')
},
test(){
this.nowDate= moment(new Date()).format('YYYY-MM-DD h:mm:ss')
this.oneLineData= {
methods: {
handleChange() { },
toTable() {
this.$router.push({ path: 'register' })
},
//整体情况
getPeopleQs() {
peopleQs({ siteid: localStorage.getItem('siteId') }).then(res => {
if (res.code == 1 && res.data) {
this.massCount = res.data.count
let time = res.data.list.map(i => { //循环获取时间
return moment(i.datetime).format('MM-DD')
})
let take = []
res.data.list.forEach(i => { //循环获取排号机注册情况
i.row.forEach(j => {
if (j.register_type == 'take') {
return take.push(j.count)
}
})
})
let app = []
res.data.list.forEach(i => { //循环获取自助终端注册情况
i.row.forEach(j => {
if (j.register_type == 'app') {
return app.push(j.count)
}
})
})
let Applets = []
res.data.list.forEach(i => { //循环获取微官网注册情况
i.row.forEach(j => {
if (j.register_type == 'Applets') {
return Applets.push(j.count)
}
})
})
this.oneLineData = {
title: '近30日注册情况分析:',
legend: ['自助服务系统注册人数','微官网注册人数','排队系统注册人数'],
xData: ['3-15', '3-16', '3-17', '3-18', '3-19', '3-20'],
legend: ['自助服务系统注册人数', '微官网注册人数', '排队系统注册人数'],
xData: time,
dataList: [
{name: '自助服务系统注册人数', data: [120, 132, 101, 134, 90, 230, 210]},
{name: '微官网注册人数', data: [220, 182, 191, 234, 290, 330, 310]},
{name: '排队系统注册人数', data: [150, 232, 201, 154, 190, 330, 410]},
{ name: '自助服务系统注册人数', data: app },
{ name: '微官网注册人数', data: Applets },
{ name: '排队系统注册人数', data: take },
]
}
this.oneMapData={
}
})
},
//区域注册情况
getRegisterProvince() {
registerProvince({ siteid: localStorage.getItem('siteId') }).then(res => {
let arr2 = res.data.sort(function (a, b) {
return b.count - a.count;
})
let arr = arr2.map((i, j) => {
i.id = j + 1
i.name = i.province
i.value = i.count
return i
})
// console.log(arr)
this.oneMapData = {
title: "注册用户地域分析",
data:[
{ name: '四川省', value: 20057.34 },
{ name: '广东省', value: 15477.48 },
{ name: '福建省', value: 31686.1 },
{ name: '河北省', value: 6992.6 },
{ name: '河南省', value: 44045.49 },
{ name: '江苏省', value: 40689.64 },
]
data: arr
}
this.onePieData={
this.provinces = arr
this.onePieData = {
title: '',
type: 'scroll',
legend: ['四川省', '广东省', '福建省','河北省','河南省','江苏省',],
data: [
{ name: '四川省', value: 20057.34 },
{ name: '广东省', value: 15477.48 },
{ name: '福建省', value: 31686.1 },
{ name: '河北省', value: 6992.6 },
{ name: '河南省', value: 44045.49 },
{ name: '江苏省', value: 40689.64 },
]
legend: arr.forEach(i => { return i.province }),
data: arr
}
this.twoPieData={
})
},
//注册分布情况
getRegisterBwd() {
registerBwd({ siteid: localStorage.getItem('siteId') }).then(res => {
this.twoPieData = {
title: '本地人与外地人注册分布',
pieName: '分布详情',
firstName: '宜宾市本地人注册占比',
firstVal: '1',
firstTotal: '10',
firstVal: res.data.bd_lv,
firstTotal: 1,
secondName: '外地人注册占比',
secondVal: '1',
secondTotal: '10',
secondVal: res.data.wd_lv,
secondTotal: 1,
}
this.oneBarData={
})
},
//注册性别分布情况
getRegisterSex() {
registerSex({ siteid: localStorage.getItem('siteId') }).then(res => {
// console.log(res)
if (res.data) {
let man = res.data[0].row
let woman = res.data[1].row
this.oneBarData = {
title: '性别分布',
xData: ['', ''],
data: [
{name: '自助服务系统注册人数', type: 'bar' ,data: [150, 232, 201, 154, 190, 330, 410]},
{name: '微官网注册人数', type: 'bar' ,data: [220, 182, 191, 234, 290, 330, 310]},
{name: '排队系统注册人数', type: 'bar' ,data: [120, 132, 101, 134, 90, 230, 210]},
{ name: '自助服务系统注册人数', type: 'bar', data: [man[1].count, woman[1].count] },
{ name: '微官网注册人数', type: 'bar', data: [man[2].count, woman[2].count] },
{ name: '排队系统注册人数', type: 'bar', data: [man[0].count, woman[0].count] },
]
}
this.twoBarData= {
}
})
},
//注册年龄分布情况
getRegisterAge() {
registerAge({ siteid: localStorage.getItem('siteId') }).then(res => {
// console.log(res)
let age_area = res.data.map(i => {
return i.age_area
})
let total = 0
let count = res.data.map(i => {
total += i.nums
return i.nums
})
// console.log(total)
let zb = count.map(i => {
return parseFloat((i / total * 10000).toFixed(2))
})
// console.log(zb)
this.twoBarData = {
title: '年龄分布',
xData: ['1-10', '10-20', '20-30', '30-40', '40-50'],
xData: age_area,
data: [
{name: '办理次数', type: 'bar' ,data: [150, 232, 201, 154, 190, 330, 410]},
{name: '占比', type: 'line' ,data: [220, 182, 191, 234, 290, 330, 310]},
{ name: '办理次数', type: 'bar', data: count },
{ name: '占比', type: 'line', data: zb },
]
}
this.threePieData={
})
},
//注册民族分布情况
getRegisterNation() {
registerNation({ siteid: localStorage.getItem('siteId') }).then(res => {
// console.log(res)
res.data.forEach(i => {
i.name = i.idcard_Nation
i.value = i.count
})
// console.log(res.data)
this.threePieData = {
title: '民族分布',
type: '',
legend: ['四川省', '广东省', '福建省','河北省','河南省','江苏省',],
legend: res.data,
data: res.data
}
})
},
//办件用户地域分析
getProvinceCase() {
provinceCase({ siteid: localStorage.getItem('siteId'), selected: 2 }).then(res => {
// console.log(res)
let arr2 = res.data.sort(function (a, b) {
return b.nums - a.nums;
})
let arr = arr2.map((i, j) => {
i.id = j + 1
i.province = i.name
i.value = i.nums
this.doTotal += i.nums
return i
})
arr.forEach(i => {
i.nums_val = i.nums / this.doTotal
})
// console.log(arr)
this.oneMapData2 = {
title: "办件用户地域分析",
data: arr
}
this.provinces2 = arr
// this.onePieData2 = {
// title: '',
// type: 'scroll',
// legend: arr.forEach(i => { return i.province }),
// data: arr
// }
})
},
//办件用户地域分析
getProvinceStatistic() {
provinceStatistic({ siteid: localStorage.getItem('siteId'), selected: 2, province: '四川省' }).then(res => {
// console.log(res)
res.data.forEach(i => {
i.value = i.count
})
this.onePieData2 = {
title: '',
type: 'scroll',
legend: res.data,
data: res.data
}
})
},
//本外地分析
getBwdStatistic() {
bwdStatistic({ siteid: localStorage.getItem('siteId'), selected: 2 }).then(res => {
// console.log(res)
this.twoPieData2 = {
title: '本地人与外地人办件分布',
pieName: '分布详情',
firstName: '宜宾市本地人办件占比',
firstVal: res.data.bd_lv,
firstTotal: 1,
secondName: '外地人办件占比',
secondVal: res.data.wd_lv,
secondTotal: 1,
}
})
},
//性别办件分析
getGenderRateType() {
genderRateType({ siteid: localStorage.getItem('siteId'), selected: 2 }).then(res => {
if (res.data) {
let man = res.data[0].row
let woman = res.data[1].row
this.oneBarData2 = {
title: '性别分布',
xData: ['', ''],
data: [
{ name: '四川省', value: 20057.34 },
{ name: '广东省', value: 15477.48 },
{ name: '福建省', value: 31686.1 },
{ name: '河北省', value: 6992.6 },
{ name: '河南省', value: 44045.49 },
{ name: '江苏省', value: 40689.64 },
{ name: '自助服务系统注册人数', type: 'bar', data: [man[1].nums, woman[1].nums] },
{ name: '微官网注册人数', type: 'bar', data: [man[2].nums, woman[2].nums] },
{ name: '排队系统注册人数', type: 'bar', data: [man[0].nums, woman[0].nums] },
]
}
}
})
},
//办件年龄分析
getAgeRate() {
ageRate({ siteid: localStorage.getItem('siteId'), selected: 2 }).then(res => {
// console.log(res)
// console.log(res)
let age_area = res.data.list.map(i => {
return i.age_area
})
let total = 0
let count = res.data.list.map(i => {
total += i.nums
return i.nums
})
// console.log(total)
let zb = count.map(i => {
return parseFloat((i / total * 10000).toFixed(2))
})
// console.log(zb)
this.twoBarData2 = {
title: '年龄分布',
xData: age_area,
data: [
{ name: '办理次数', type: 'bar', data: count },
{ name: '占比', type: 'line', data: zb },
]
}
})
},
getTopNationStatistic() {
TopNationStatistic({ siteid: localStorage.getItem('siteId'), selected: 2 }).then(res => {
console.log(res)
res.data.forEach(i => {
i.name = i.idcard_Nation
i.value = i.count
})
// console.log(res.data)
this.threePieData2 = {
title: '民族分布',
type: '',
legend: res.data,
data: res.data
}
})
},
}
}
</script>
<style scoped lang="less">
.head{
/deep/.ant-col {
margin-bottom: 20px;
}
.head {
display: flex;
justify-content: flex-start;
align-items: center;
.head_title{
.head_title {
font-weight: 700;
font-style: normal;
font-size: 16px;
color: #333;
margin-right: 1.25rem;
}
.head_desc{
.head_desc {
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #888888;
}
}
/deep/ .ant-table{
/deep/ .ant-table {
width: 100% !important;
}
.f_20{
.f_20 {
font-size: 1.25rem;
}
.f_40{
.f_40 {
font-size: 2.5rem;
}
.f_center{
.f_center {
text-align: center;
}
.warning{
.warning {
color: #FD6805
}
.primary{
.primary {
color: #0595FD
}
.success{
.success {
color: #04CA8F
}
.h_200{
.h_200 {
height: 12.5rem;
}
.mb_15{
.mb_15 {
margin-bottom: .9375rem;
}
</style>
\ No newline at end of file
......@@ -7,38 +7,68 @@
</a-button>
</div>
<span>
<a-checkbox-group :options="checkboxOptions" v-model="checkboxVALUE" @change="checkboxonChange" />
<a-input allowClear v-model="Query.workman_name" placeholder="请输入工作人员姓名查询 ">
<a-checkbox-group
:options="checkboxOptions"
v-model="checkboxVALUE"
@change="checkboxonChange"
/>
<a-input
allowClear
v-model="Query.workman_name"
placeholder="请输入工作人员姓名查询 "
>
<a-icon slot="prefix" type="search" />
</a-input>
<a-select v-model="Query.window_id" placeholder="请选择窗口">
<a-select-option value=""> 全部 </a-select-option>
<a-select-option v-for="(item, index) of windowData" :key="index" :value="item.id">
{{ item.englishName }} - {{item.fromnum}}
<a-select-option
v-for="(item, index) of windowData"
:key="index"
:value="item.id"
>
{{ item.englishName }} - {{ item.fromnum }}
</a-select-option>
</a-select>
<a-select v-model="Query.warn_alert" placeholder="请选择类型">
<a-select-option value=""> 全部 </a-select-option>
<a-select-option v-for="(item,i) in warn_alert" :key="i" :value="i">
<a-select-option v-for="(item, i) in warn_alert" :key="i" :value="i">
{{ item }}
</a-select-option>
</a-select>
<a-range-picker format="YYYY年MM月DD日" valueFormat="yyyy-MM-DD" class="range_picker_style"
v-model="Query.time">
<a-range-picker
format="YYYY年MM月DD日"
valueFormat="yyyy-MM-DD"
class="range_picker_style"
v-model="Query.time"
>
</a-range-picker>
<a-button type="primary" class="addclass" @click="onGetKqalert">搜索</a-button>
<a-button type="primary" class="addclass" @click="onGetKqalert"
>搜索</a-button
>
</span>
</div>
<div class="main">
<a-table size="small" bordered :row-key="(record) => record.id" :row-selection="{
<a-table
size="small"
bordered
:row-key="(record) => record.id"
:row-selection="{
selectedRowKeys: tableSelectedKeys,
onChange: onSelectChange,
}" :scroll="{ y: 590 }" :pagination="tablePagination" @change="changeTablePage" :loading="tableLoading"
:columns="tableHeaders" :dataSource="tableSourceData">
}"
:scroll="{ y: 590 }"
:pagination="tablePagination"
@change="changeTablePage"
:loading="tableLoading"
:columns="tableHeaders"
:dataSource="tableSourceData"
>
<template slot="operation" slot-scope="text, record">
<a-button type="link" @click="openDetails">查看详情{{ record.id }}</a-button>
<a-button type="link" @click="openDetails"
>查看详情{{ record.id }}</a-button
>
</template>
</a-table>
</div>
......@@ -46,25 +76,42 @@
</template>
<script>
import table from "@/mixins/table";
import {
export2Excel
} from "@/utils/js/exportExcel";
import {
getKqalert
} from "@/api/dataAdmin"
import {
windowList
} from "@/api/customer"
import moment from "moment";
const warn_alert = {
1: '离岗',
2: '离开',
4: '玩手机',
5: '扶头',
6: '趴桌',
}
export default {
import table from "@/mixins/table";
import { export2Excel } from "@/utils/js/exportExcel";
import { getKqalert } from "@/api/dataAdmin";
import { windowList } from "@/api/customer";
import moment from "moment";
const warn_alert = {
1: "离岗",
2: "离开",
4: "玩手机",
5: "扶头",
6: "趴桌",
};
const tHeader = [
"序号",
"报警类型",
"发生窗口",
"工作人员",
"所属部门",
"手机号",
"发生时间",
"时长",
"是否准确",
];
const filterVal = [
"index",
"warn_alert",
"window_name",
"workman_name",
"section_name",
"workman_phone",
"out_time",
"duration",
"isaccuracy",
"have_process_name",
];
export default {
mixins: [table],
name: "PortalAdminVueReportForm",
data() {
......@@ -80,11 +127,14 @@
}, //查询条件
checkboxVALUE: [],
BegindAndEndTime: [],
checkboxOptions: [{
checkboxOptions: [
{
label: "只看未处理",
value: "0",
}, ],
tableHeaders: [{
},
],
tableHeaders: [
{
title: "序号",
dataIndex: "index",
width: "60px",
......@@ -95,47 +145,48 @@
{
title: "报警类型",
dataIndex: "warn_alert",
customRender: (text, record) => warn_alert[text]
customRender: (text, record) => warn_alert[text],
},
{
title: "发生窗口",
dataIndex: "window_name",
customRender: (text, record) => text ? text : '--'
customRender: (text, record) => (text ? text : "--"),
},
{
title: "工作人员",
dataIndex: "workman_name",
customRender: (text, record) => text ? text : '--'
customRender: (text, record) => (text ? text : "--"),
},
{
title: "所属部门",
dataIndex: "section_name",
customRender: (text, record) => text ? text : '--'
customRender: (text, record) => (text ? text : "--"),
},
{
title: "手机号",
dataIndex: "workman_phone",
customRender: (text, record) => text ? text : '--'
customRender: (text, record) => (text ? text : "--"),
},
{
title: "发生时间",
dataIndex: "out_time",
customRender: (text, record) => text ? text : '--'
customRender: (text, record) =>
text ? this.timestampToTime(text) : "--",
},
{
title: "时长",
dataIndex: "duration",
customRender: (text, record) => text ? text : '--'
customRender: (text, record) => (text ? text : "--"),
},
{
title: "是否准确",
dataIndex: "isaccuracy",
customRender: (text, record) => text == 1 ? '准确' : '--'
customRender: (text, record) => (text == 1 ? "准确" : "--"),
},
{
title: "是否处理",
dataIndex: "have_process_name",
customRender: (text, record) => text ? text : '--'
customRender: (text, record) => (text ? text : "--"),
},
// {
// title: "操作",
......@@ -152,41 +203,57 @@
},
components: {},
mounted() {
this.onGetKqalert()
this.onGetKqalert();
this.setMoment();
this.getWindowList();
},
methods: {
// 时间戳转换为日期
timestampToTime(timestamp) {
var date = new Date(timestamp*1000);
var Y = date.getFullYear() + "-";
var M =
(date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1) + "-";
var D =
(date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " ";
var h = date.getHours() + ":";
var m = date.getMinutes() + ":";
var s = date.getSeconds();
return Y + M + D + h + m + s;
},
// 导出
async handleExportTable() {
let data = [];
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
export2Excel(
this.tHeader,
this.filterVal,
this.tableSelectedRows,
"AI效能监察异常行为数据报表" + this.$moment().format("YYYYMMDDHHmmss")
);
// 深度克隆避免影响页面表格展示
data = this.$_.cloneDeep(this.tableSelectedRows);
} else {
getKqalert({
let datas = this.$_.cloneDeep(
await getKqalert({
...this.Query,
page: 1,
size: -1,
}).then(res => {
const {
code,
data
} = res;
if (code == 1) {
if (!data.data.length) return;
})
);
data = datas.data.data;
data.forEach((text, i) => {
text.index = i + 1;
text.isaccuracy = text.isaccuracy == 1 ? "准确" : "--";
text.out_time = text.out_time
? this.timestampToTime(text.out_time)
: "--";
});
if (!data.length) return;
export2Excel(
this.tHeader,
this.filterVal,
data.data,
tHeader,
filterVal,
data,
"AI效能监察异常行为数据报表" + this.$moment().format("YYYYMMDDHHmmss")
);
}
})
}
},
// 报表接口
onGetKqalert() {
......@@ -194,32 +261,26 @@
...this.Query,
page: this.tablePagination.current,
size: this.tablePagination.pageSize,
}).then(res => {
const {
code,
data
} = res
}).then((res) => {
const { code, data } = res;
if (code == 1) {
this.tableSourceData = data.data
this.tablePagination.total = data.total
this.tableSourceData = data.data;
this.tablePagination.total = data.total;
}
console.log(res)
})
console.log(res);
});
},
getWindowList() {
windowList({
page: 1,
size: -1,
siteId: JSON.parse(localStorage.getItem("siteId"))
}).then(res => {
const {
code,
data
} = res
siteId: JSON.parse(localStorage.getItem("siteId")),
}).then((res) => {
const { code, data } = res;
if (code == 1) {
this.windowData = data.data
this.windowData = data.data;
}
})
});
},
openDetails() {
console.log("跳转网页");
......@@ -231,9 +292,9 @@
},
checkboxonChange(val) {
if (val.length == 0) {
this.Query.have_process = ""
this.Query.have_process = "";
} else {
this.Query.have_process = "0"
this.Query.have_process = "0";
}
},
QueueState(type) {
......@@ -248,19 +309,19 @@
}
},
},
};
};
</script>
<style lang="less" scoped>
/deep/.ant-spin-container {
/deep/.ant-spin-container {
display: block;
}
}
/deep/.ant-checkbox-group {
/deep/.ant-checkbox-group {
width: 250px;
}
}
.range_picker_style {
.range_picker_style {
margin-right: 20px;
}
}
</style>
......@@ -50,8 +50,7 @@
</template>
<template slot="操作" slot-scope="text, record">
<a-button type="link" style="color: #ff7370" @click="handleDel(record.id)">删除</a-button>
<a-button type="link" @click="openHandlingDetails(record)"
v-if="record.queueid == 0 && record.pjxt != 1">详情</a-button>
<a-button type="link" @click="openHandlingDetails(record)">详情</a-button>
</template>
</a-table>
<HandlingDetails ref="HandlingDetails" />
......
......@@ -3,34 +3,71 @@
<div class="content">
<div class="top">
<h1 class="title_text">{{ detailsForm.interfaceName }}</h1>
<button class="go_back" @click="$router.go(-1)">返回上一级</button>
<a-button
type="primary"
class="addclass"
@click="$router.go(-1)"
style="margin-bottom: 1rem"
>返回上一级</a-button
>
</div>
<a-card title="接口信息" :bordered="false" class="card_box">
<a-descriptions>
<a-descriptions-item label="接口名称">{{ detailsForm.interfaceName }}</a-descriptions-item>
<a-descriptions-item label="版本号">{{ detailsForm.versionNumber }}</a-descriptions-item>
<a-descriptions-item label="请求类型">{{ detailsForm.requestType == 1 ? 'GET' : 'POST' }}</a-descriptions-item>
<a-descriptions-item label="请求协议">{{ detailsForm.requestProtocol == 1 ? 'HTTP' : 'HTTPS'
<a-descriptions-item label="接口名称">{{
detailsForm.interfaceName
}}</a-descriptions-item>
<a-descriptions-item label="content-type">{{ detailsForm.contentType }}</a-descriptions-item>
<a-descriptions-item label="超时时长">{{ detailsForm.timeoutValue }}</a-descriptions-item>
<a-descriptions-item label="限流策略">{{ detailsForm.limitStrategy == 1 ? '分钟' : '小时' }}</a-descriptions-item>
<a-descriptions-item label="访问网络" v-if="detailsForm && detailsForm.network">
<span v-for="item, idx of dict.network" v-show="detailsForm.network.indexOf(idx) != -1" :key="idx"> {{ item }}
<a-descriptions-item label="版本号">{{
detailsForm.versionNumber
}}</a-descriptions-item>
<a-descriptions-item label="请求类型">{{
detailsForm.requestType == 1 ? "GET" : "POST"
}}</a-descriptions-item>
<a-descriptions-item label="请求协议">{{
detailsForm.requestProtocol == 1 ? "HTTP" : "HTTPS"
}}</a-descriptions-item>
<a-descriptions-item label="content-type">{{
detailsForm.contentType
}}</a-descriptions-item>
<a-descriptions-item label="超时时长"
>{{ detailsForm.timeoutValue }}</a-descriptions-item
>
<a-descriptions-item label="限流策略">{{
detailsForm.limitStrategy == 1 ? "分钟" : "小时"
}}</a-descriptions-item>
<a-descriptions-item
label="访问网络"
v-if="detailsForm && detailsForm.network"
>
<span
v-for="(item, idx) of dict.network"
v-show="detailsForm.network.indexOf(idx) != -1"
:key="idx"
>
{{ item }}
</span>
</a-descriptions-item>
<a-descriptions-item label="接口标签" v-if="dict.interfaceTag">{{ dict.interfaceTag[detailsForm.interfaceTag]
<a-descriptions-item label="接口标签" v-if="dict.interfaceTag">{{
dict.interfaceTag[detailsForm.interfaceTag]
}}</a-descriptions-item>
<a-descriptions-item label="接口来源" v-if="dict.interfaceSource">{{
dict.interfaceSource[detailsForm.interfaceSource] }}</a-descriptions-item>
<a-descriptions-item label="请求路径">{{ detailsForm.requestUrl }}</a-descriptions-item>
<br>
<a-descriptions-item label="描述" span="{3}">{{ detailsForm.description }}</a-descriptions-item>
dict.interfaceSource[detailsForm.interfaceSource]
}}</a-descriptions-item>
<a-descriptions-item label="请求路径">{{
detailsForm.requestUrl
}}</a-descriptions-item>
<br />
<a-descriptions-item label="描述" span="{3}">{{
detailsForm.description
}}</a-descriptions-item>
</a-descriptions>
</a-card>
<a-card title="请求参数" :bordered="false" class="card_box">
<div class="flex aic jcb mb10">
<a-radio-group v-model="requestPam.type" button-style="solid" disabled>
<a-radio-group
v-model="requestPam.type"
button-style="solid"
disabled
>
<a-radio-button value="path"> 路径参数 </a-radio-button>
<a-radio-button value="headers"> headers </a-radio-button>
<a-radio-button value="query"> query </a-radio-button>
......@@ -38,23 +75,37 @@
</a-radio-group>
<div class="flex aic">
<div class="mr10">入参是否加密</div>
<div>{{ detailsForm.inEncrypt == 1 ? '加密' : '不加密' }}</div>
<div>{{ detailsForm.inEncrypt == 1 ? "加密" : "不加密" }}</div>
</div>
</div>
<a-table size="middle" bordered :row-key="(record) => record.id" :locale="{ emptyText: '无' }" :pagination="false"
:columns="table_columns" :dataSource="requestPam.table">
<a-table
size="middle"
bordered
:row-key="(record) => record.id"
:locale="{ emptyText: '无' }"
:pagination="false"
:columns="table_columns"
:dataSource="requestPam.table"
>
</a-table>
</a-card>
<a-card title="响应数据" :bordered="false" class="card_box">
<div class="flex aic mb10" style="justify-content: flex-end;">
<div class="flex aic mb10" style="justify-content: flex-end">
<div class="flex aic">
<div class="mr10">出参是否加密</div>
<div>{{ detailsForm.outEncrypt == 1 ? '加密' : '不加密' }}</div>
<div>{{ detailsForm.outEncrypt == 1 ? "加密" : "不加密" }}</div>
</div>
</div>
<a-table size="middle" bordered :row-key="(record) => record.id" :locale="{ emptyText: '无' }" :pagination="false"
:columns="table_columns" :dataSource="responsePam.table">
<a-table
size="middle"
bordered
:row-key="(record) => record.id"
:locale="{ emptyText: '无' }"
:pagination="false"
:columns="table_columns"
:dataSource="responsePam.table"
>
</a-table>
</a-card>
......@@ -80,9 +131,7 @@
import Vue from "vue";
import hljs from "highlight.js";
import "highlight.js/styles/monokai-sublime.css";
import {
getInterfaceInfo
} from '@/api/thePlatformIsSet.js'
import { getInterfaceInfo } from "@/api/thePlatformIsSet.js";
Vue.directive("highlight", function (el) {
let blocks = el.querySelectorAll("pre code");
blocks.forEach((block) => {
......@@ -97,10 +146,11 @@ export default {
requestPam: {},
responsePam: {},
dict: {},
table_columns: [{
table_columns: [
{
title: "参数名",
align: "center",
dataIndex: "name"
dataIndex: "name",
},
{
title: "参数值类型",
......@@ -116,34 +166,34 @@ export default {
title: "是否必填",
align: "center",
dataIndex: "isMust",
customRender: (text, record, index) => `${text == 1 ? '' : ''}`,
customRender: (text, record, index) => `${text == 1 ? "" : ""}`,
},
{
title: "描述",
align: "center",
dataIndex: "describe",
width: 200
}
width: 200,
},
],
allResData: null,
errJson: { "msg": "请选择待查看产品接口信息", "code": -1 }
errJson: { msg: "请选择待查看产品接口信息", code: -1 },
};
},
mounted() {
this.getInfo()
this.getInfo();
},
methods: {
getInfo() {
getInterfaceInfo({ id: this.$route.query.id }).then(res => {
this.allResData = res
res.data.network = res.data.network.split(',')
this.detailsForm = res.data
this.requestPam = JSON.parse(res.data.requestParameters)
this.responsePam = JSON.parse(res.data.responseParameters)
this.dict = res.dict
})
getInterfaceInfo({ id: this.$route.query.id }).then((res) => {
this.allResData = res;
res.data.network = res.data.network.split(",");
this.detailsForm = res.data;
this.requestPam = JSON.parse(res.data.requestParameters);
this.responsePam = JSON.parse(res.data.responseParameters);
this.dict = res.dict;
});
},
toJson(res) {
return JSON.stringify(res);
......@@ -190,39 +240,39 @@ export default {
position: relative;
z-index: 1;
&:hover {
color: rgb(255, 255, 255);
}
// &:hover {
// color: rgb(255, 255, 255);
// }
&::before,
&::after {
content: "";
position: absolute;
top: 0%;
left: 0%;
width: 100%;
height: 100%;
background: rgba(128, 128, 128, 0.096);
backdrop-filter: blur(10px);
z-index: -1;
transition: all 0.4s;
}
// &::before,
// &::after {
// content: "";
// position: absolute;
// top: 0%;
// left: 0%;
// width: 100%;
// height: 100%;
// background: rgba(128, 128, 128, 0.096);
// backdrop-filter: blur(10px);
// z-index: -1;
// transition: all 0.4s;
// }
&::after {
z-index: -2;
transition: all 0.4s;
}
// &::after {
// z-index: -2;
// transition: all 0.4s;
// }
&:hover::before {
background: rgb(0, 0, 0, 0.315);
// border-radius: 10px;
}
// &:hover::before {
// background: rgb(0, 0, 0, 0.315);
// // border-radius: 10px;
// }
&:hover::after {
background: linear-gradient(to right, #cb6ce6, #38b6ff);
// border-radius: 10px;
transform: scale(1.07, 1.2) rotateX(180deg);
}
// &:hover::after {
// background: linear-gradient(to right, #cb6ce6, #38b6ff);
// // border-radius: 10px;
// transform: scale(1.07, 1.2) rotateX(180deg);
// }
}
}
......@@ -236,7 +286,7 @@ export default {
margin-bottom: 1rem;
}
&+.card_box {
& + .card_box {
margin-top: 1rem;
}
}
......@@ -248,15 +298,21 @@ export default {
width: 100%;
height: @headerH;
background: rgb(59, 135, 255);
background: -moz-linear-gradient(174deg,
background: -moz-linear-gradient(
174deg,
rgba(59, 135, 255, 1) 24%,
rgba(108, 53, 247, 1) 85%);
background: -webkit-linear-gradient(174deg,
rgba(108, 53, 247, 1) 85%
);
background: -webkit-linear-gradient(
174deg,
rgba(59, 135, 255, 1) 24%,
rgba(108, 53, 247, 1) 85%);
background: linear-gradient(174deg,
rgba(108, 53, 247, 1) 85%
);
background: linear-gradient(
174deg,
rgba(59, 135, 255, 1) 24%,
rgba(108, 53, 247, 1) 85%);
rgba(108, 53, 247, 1) 85%
);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#3b87ff", endColorstr="#6c35f7", GradientType=1);
}
}
......
......@@ -2,39 +2,73 @@
<div class="PoliticsShow-Container">
<div class="header_box">
<div>
<button class="add_btn" @click="openDetails()">
<span>新增</span>
</button>
<a-button type="primary" @click="openDetails()" class="addclass"
>新增</a-button
>
</div>
<span>
<a-input allowClear v-model="query.interfaceName" placeholder="请输入接口名称查询">
<a-input
allowClear
v-model="query.interfaceName"
placeholder="请输入接口名称查询"
>
<a-icon slot="prefix" type="search" />
</a-input>
<a-select v-model="query.interfaceSource">
<a-select-option value="">所有来源</a-select-option>
<a-select-option v-for="(item, index) of dict.interfaceSource" :key="index" :value="index">
<a-select-option
v-for="(item, index) of dict.interfaceSource"
:key="index"
:value="index"
>
{{ item }}
</a-select-option>
</a-select>
<a-select v-model="query.interfaceTag">
<a-select-option value="">所有标签</a-select-option>
<a-select-option v-for="(item, index) of dict.interfaceTag" :key="index" :value="index">
<a-select-option
v-for="(item, index) of dict.interfaceTag"
:key="index"
:value="index"
>
{{ item }}
</a-select-option>
</a-select>
<button class="search_btn" @click="getList()">搜索</button>
<a-button type="primary" class="addclass" @click="getList()"
>搜索</a-button
>
</span>
</div>
<div class="main">
<a-table size="small" bordered :row-key="(record) => record.id" :scroll="{ y: 590 }" :pagination="tablePagination"
@change="pagTableChange" :loading="tableLoading" :columns="tableHeaders" :dataSource="tableSourceData">
<template slot="network" slot-scope="text, record,index">
<span v-for="item, idx of dict.network" v-show="text.indexOf(idx) != -1" :key="idx"> {{ item }} </span>
<a-table
size="small"
bordered
:row-key="(record) => record.id"
:scroll="{ y: 590 }"
:pagination="tablePagination"
@change="pagTableChange"
:loading="tableLoading"
:columns="tableHeaders"
:dataSource="tableSourceData"
>
<template slot="network" slot-scope="text, record, index">
<span
v-for="(item, idx) of dict.network"
v-show="text.indexOf(idx) != -1"
:key="idx"
>
{{ item }}
</span>
</template>
<template slot="operation" slot-scope="text, record, index">
<a-button type="link" @click="openDetails(record)">编辑</a-button>
<a-popconfirm title="确定要删除此应用吗?" ok-text="确定" cancel-text="取消" @confirm="delRow(record)">
<a-popconfirm
title="确定要删除此应用吗?"
ok-text="确定"
cancel-text="取消"
@confirm="delRow(record)"
>
<a-button type="link" style="color: #ff4420">删除</a-button>
</a-popconfirm>
</template>
......@@ -47,7 +81,10 @@
<script>
import table from "@/mixins/table";
import Details from "./components/Details.vue";
import { getInterfaceList, getInterfaceDelete } from '@/api/thePlatformIsSet.js'
import {
getInterfaceList,
getInterfaceDelete,
} from "@/api/thePlatformIsSet.js";
export default {
mixins: [table],
name: "PortalAdminVueAlerting",
......@@ -71,19 +108,21 @@ export default {
title: "请求类型",
align: "center",
dataIndex: "requestType",
customRender: (text, record, index) => `${record.requestType == 1 ? 'POST' : 'GET'}`,
customRender: (text, record, index) =>
`${record.requestType == 1 ? "POST" : "GET"}`,
},
{
title: "标签",
align: "center",
dataIndex: "interfaceTag",
customRender: (text, record, index) => this.dict.interfaceTag[text]
customRender: (text, record, index) => this.dict.interfaceTag[text],
},
{
title: "请求协议",
align: "center",
dataIndex: "requestProtocol",
customRender: (text, record, index) => this.dict.requestProtocol[text]
customRender: (text, record, index) =>
this.dict.requestProtocol[text],
},
{
title: "版本",
......@@ -94,13 +133,15 @@ export default {
title: "来源",
align: "center",
dataIndex: "interfaceSource",
customRender: (text, record, index) => this.dict.interfaceSource[text]
customRender: (text, record, index) =>
this.dict.interfaceSource[text],
},
{
title: "策略",
align: "center",
dataIndex: "limitStrategy",
customRender: (text, record, index) => `${record.limitStrategy == 1 ? '分钟' : '小时'}`,
customRender: (text, record, index) =>
`${record.limitStrategy == 1 ? "分钟" : "小时"}`,
},
{
title: "访问网络",
......@@ -108,7 +149,7 @@ export default {
dataIndex: "network",
scopedSlots: {
customRender: "network",
}
},
},
{
......@@ -129,12 +170,10 @@ export default {
},
tablePagination: {
current: 1,
pageSize: 10
},
dict: {
pageSize: 10,
},
total: 0
dict: {},
total: 0,
};
},
components: {
......@@ -148,20 +187,16 @@ export default {
getInterfaceList({
page: this.tablePagination.current,
size: this.tablePagination.pageSize,
...this.query
}).then(res => {
...this.query,
}).then((res) => {
if (res.code == 1) {
let {
data,
total,
dict
} = res.data;
let { data, total, dict } = res.data;
this.dict = dict;
this.tableSourceData = data;
this.tablePagination.total = total;
return data
return data;
}
})
});
},
QueueState(type) {
switch (type) {
......@@ -176,21 +211,21 @@ export default {
},
delRow(item) {
getInterfaceDelete({
id: item.id
id: item.id,
}).then((res) => {
let { code, msg } = res
let { code, msg } = res;
if (code == 1) {
this.$message.success('删除成功');
this.getList()
this.$message.success("删除成功");
this.getList();
} else {
this.$message.error(msg);
}
})
});
},
openDetails(item) {
if (item) {
this.$refs.Details.modalInfo.title = "编辑接口";
this.$refs.Details.getInfo(item.id)
this.$refs.Details.getInfo(item.id);
} else {
this.$refs.Details.modalInfo.title = "新增接口";
}
......@@ -199,8 +234,8 @@ export default {
},
//分页
pagTableChange(page) {
this.tablePagination.current = page.current
this.tablePagination.pageSize = page.pageSize
this.tablePagination.current = page.current;
this.tablePagination.pageSize = page.pageSize;
this.getList();
},
},
......@@ -219,7 +254,7 @@ export default {
justify-content: space-between;
align-items: center;
&>div {
& > div {
display: flex;
justify-content: flex-start;
align-items: center;
......@@ -275,7 +310,7 @@ export default {
}
}
&>span {
& > span {
display: flex;
justify-content: space-between;
align-items: center;
......@@ -360,13 +395,10 @@ export default {
/deep/.ant-btn-link {
padding: 0 !important;
&+.ant-btn-link {
& + .ant-btn-link {
margin-left: 1rem !important;
}
}
}
}
</style>
......@@ -2,35 +2,70 @@
<div class="PoliticsShow-Container">
<div class="header_box">
<div>
<button class="add_btn" @click="openDetails()">
<a-button
type="primary"
class="addclass"
@click="openDetails()"
>
<span>新增</span>
</button>
</a-button>
</div>
<span>
<a-input allowClear v-model="searchForm.appName" placeholder="请输入应用名称查询">
<a-input
allowClear
v-model="searchForm.appName"
placeholder="请输入应用名称查询"
>
<a-icon slot="prefix" type="search" />
</a-input>
<a-select v-model="searchForm.deveLanguage">
<a-select-option value="">全部</a-select-option>
<a-select-option v-for="(item, index) of dict.deveLanguage" :key="index" :value="index">
<a-select-option
v-for="(item, index) of dict.deveLanguage"
:key="index"
:value="index"
>
{{ item }}
</a-select-option>
</a-select>
<button class="search_btn" @click="getList()">搜索</button>
<a-button
type="primary"
class="addclass"
@click="getList()"
>搜索</a-button
>
</span>
</div>
<div class="main">
<a-table size="small" bordered :row-key="(record) => record.id" :scroll="{ y: 590 }" :pagination="tablePagination"
@change="pagTableChange" :loading="tableLoading" :columns="tableHeaders" :dataSource="tableSourceData">
<a-table
size="small"
bordered
:row-key="(record) => record.id"
:scroll="{ y: 590 }"
:pagination="tablePagination"
@change="pagTableChange"
:loading="tableLoading"
:columns="tableHeaders"
:dataSource="tableSourceData"
>
<template slot="operation" slot-scope="text, record, index">
<a-button type="link" v-if="record.appFileUrl" @click="handleDowload(record.appFileUrl)">下载应用</a-button>
<a-button
type="link"
v-if="record.appFileUrl"
@click="handleDowload(record.appFileUrl)"
>下载应用</a-button
>
<a-button type="link" @click="openDetails(record)">编辑</a-button>
<a-popconfirm title="确定要删除此应用吗?" ok-text="确定" cancel-text="取消" @confirm="delRow(record)">
<a-popconfirm
title="确定要删除此应用吗?"
ok-text="确定"
cancel-text="取消"
@confirm="delRow(record)"
>
<a-button type="link" style="color: #ff4420">删除</a-button>
</a-popconfirm>
</template>
</a-table>
<Details ref="Details" :deveLanguage="dict.deveLanguage" />
......@@ -42,9 +77,7 @@
import { getApps, deleteApps } from "@/api/thePlatformIsSet.js";
import table from "@/mixins/table";
import Details from "./components/Details.vue";
let obj = {
}
let obj = {};
export default {
mixins: [table],
name: "PortalAdminVueAlerting",
......@@ -84,13 +117,14 @@ export default {
title: "是否启用",
align: "center",
dataIndex: "isEnable",
customRender: (text, record, index) => text == 1 ? '' : "",
customRender: (text, record, index) => (text == 1 ? "" : ""),
},
{
title: "上传时间",
align: "center",
dataIndex: "createTime",
customRender: (text, record, index) => this.$moment(text).format("YYYY年MM月DD日 HH:mm:ss"),
customRender: (text, record, index) =>
this.$moment(text).format("YYYY年MM月DD日 HH:mm:ss"),
},
{
title: "操作",
......@@ -104,7 +138,7 @@ export default {
],
tablePagination: {
current: 1,
pageSize: 10
pageSize: 10,
},
searchForm: {
deveLanguage: "",
......@@ -112,8 +146,8 @@ export default {
},
dict: {
deveLanguage: {},
isEnable: {}
}
isEnable: {},
},
};
},
components: {
......@@ -132,50 +166,45 @@ export default {
...search,
}).then((res) => {
if (res.code == 1) {
let {
data,
total,
dict
} = res.data;
let { data, total, dict } = res.data;
this.dict = dict;
this.tableSourceData = data;
this.tablePagination.total = total;
return data
return data;
}
})
});
},
//分页
pagTableChange(page) {
this.tablePagination.current = page.current
this.tablePagination.pageSize = page.pageSize
this.tablePagination.current = page.current;
this.tablePagination.pageSize = page.pageSize;
this.getList();
},
delRow(item) {
deleteApps({
id: item.id
id: item.id,
}).then((res) => {
console.log(res)
let { code, msg } = res
console.log(res);
let { code, msg } = res;
if (code == 1) {
this.$message.success('删除成功');
this.getList()
this.$message.success("删除成功");
this.getList();
} else {
this.$message.error(msg);
}
})
});
},
handleDowload(url) {
let arr = url.split('/')
let arr = url.split("/");
const a = document.createElement("a");
a.href = process.env.VUE_APP_API_BASE_URL + '/' + url;
a.href = process.env.VUE_APP_API_BASE_URL + "/" + url;
a.download = arr[arr.length - 1];
a.click();
},
openDetails(item) {
if (item) {
this.$refs.Details.modalInfo.title = "编辑应用";
this.$refs.Details.getInfo(item.id)
this.$refs.Details.getInfo(item.id);
} else {
this.$refs.Details.modalInfo.title = "新增应用";
}
......@@ -188,11 +217,10 @@ export default {
versionInfo: "",
appFileUrl: "",
isEnable: false,
}
this.$refs.Details.uploadInfo.fileList = []
};
this.$refs.Details.uploadInfo.fileList = [];
// this.$refs.Details.appForm.resetFields()
this.$refs.Details.modalInfo.width = "30%";
},
},
};
......@@ -210,7 +238,7 @@ export default {
justify-content: space-between;
align-items: center;
&>div {
& > div {
display: flex;
justify-content: flex-start;
align-items: center;
......@@ -266,7 +294,7 @@ export default {
}
}
&>span {
& > span {
display: flex;
justify-content: space-between;
align-items: center;
......@@ -351,13 +379,10 @@ export default {
/deep/.ant-btn-link {
padding: 0 !important;
&+.ant-btn-link {
& + .ant-btn-link {
margin-left: 1rem !important;
}
}
}
}
</style>
......@@ -2,24 +2,49 @@
<div class="PoliticsShow-Container">
<div class="header_box">
<div>
<button class="add_btn" @click="openDetails()">
<a-button type="primary" class="addclass" @click="openDetails()">
<span>新增</span>
</button>
</a-button>
</div>
<span>
<a-input allowClear v-model="searchName" placeholder="请输入资料名称查询">
<a-input
allowClear
v-model="searchName"
placeholder="请输入资料名称查询"
>
<a-icon slot="prefix" type="search" />
</a-input>
<button class="search_btn" @click="getList()">搜索</button>
<a-button type="primary" class="addclass" @click="getList()"
>搜索</a-button
>
</span>
</div>
<div class="main">
<a-table size="small" bordered :row-key="(record) => record.id" :scroll="{ y: 590 }" :pagination="tablePagination"
@change="pagTableChange" :loading="tableLoading" :columns="tableHeaders" :dataSource="tableSourceData">
<a-table
size="small"
bordered
:row-key="(record) => record.id"
:scroll="{ y: 590 }"
:pagination="tablePagination"
@change="pagTableChange"
:loading="tableLoading"
:columns="tableHeaders"
:dataSource="tableSourceData"
>
<template slot="operation" slot-scope="text, record, index">
<a-button type="link" v-if="record.docFileUrl" @click="handleDowload(record.docFileUrl)">下载</a-button>
<a-button
type="link"
v-if="record.docFileUrl"
@click="handleDowload(record.docFileUrl)"
>下载</a-button
>
<a-button type="link" @click="openDetails(record)">编辑</a-button>
<a-popconfirm title="确定要删除此应用吗?" ok-text="确定" cancel-text="取消" @confirm="delRow(record)">
<a-popconfirm
title="确定要删除此应用吗?"
ok-text="确定"
cancel-text="取消"
@confirm="delRow(record)"
>
<a-button type="link" style="color: #ff4420">删除</a-button>
</a-popconfirm>
</template>
......@@ -68,7 +93,8 @@ export default {
title: "上传时间",
align: "center",
dataIndex: "createTime",
customRender: (text, record, index) => this.$moment(text).format("YYYY年MM月DD日 HH:mm:ss"),
customRender: (text, record, index) =>
this.$moment(text).format("YYYY年MM月DD日 HH:mm:ss"),
},
{
......@@ -84,7 +110,7 @@ export default {
searchName: undefined,
tablePagination: {
current: 1,
pageSize: 10
pageSize: 10,
},
};
},
......@@ -105,49 +131,45 @@ export default {
...search,
}).then((res) => {
if (res.code == 1) {
let {
data,
total,
dict
} = res.data;
let { data, total, dict } = res.data;
this.dict = dict;
this.tableSourceData = data;
this.tablePagination.total = total;
return data
return data;
}
})
});
},
//分页
pagTableChange(page) {
this.tablePagination.current = page.current
this.tablePagination.pageSize = page.pageSize
this.tablePagination.current = page.current;
this.tablePagination.pageSize = page.pageSize;
this.getList();
},
delRow(item) {
deleteDocument({
id: item.id
id: item.id,
}).then((res) => {
console.log(res)
let { code, msg } = res
console.log(res);
let { code, msg } = res;
if (code == 1) {
this.$message.success('删除成功');
this.getList()
this.$message.success("删除成功");
this.getList();
} else {
this.$message.error(msg);
}
})
});
},
handleDowload(url) {
let arr = url.split('/')
let arr = url.split("/");
const a = document.createElement("a");
a.href = process.env.VUE_APP_API_BASE_URL + '/' + url;
a.href = process.env.VUE_APP_API_BASE_URL + "/" + url;
a.download = arr[arr.length - 1];
a.click();
},
openDetails(item) {
if (item) {
this.$refs.Details.modalInfo.title = "编辑材料";
this.$refs.Details.getInfo(item.id)
this.$refs.Details.getInfo(item.id);
} else {
this.$refs.Details.modalInfo.title = "新增材料";
}
......@@ -170,7 +192,7 @@ export default {
justify-content: space-between;
align-items: center;
&>div {
& > div {
display: flex;
justify-content: flex-start;
align-items: center;
......@@ -226,7 +248,7 @@ export default {
}
}
&>span {
& > span {
display: flex;
justify-content: space-between;
align-items: center;
......@@ -311,13 +333,10 @@ export default {
/deep/.ant-btn-link {
padding: 0 !important;
&+.ant-btn-link {
& + .ant-btn-link {
margin-left: 1rem !important;
}
}
}
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment