Commit 9926fff2 by xue_wengang

业务审计,移动警务终端及APP应用运控

parent 32fb48ed
......@@ -177,6 +177,13 @@
<el-row>
<el-col :span="24">
<span class="flTtitle">查询结果</span>
<span
v-if="activeUserNum"
style="font-size: 16px; line-height: 21px; color: #ed073b"
>近7日鲜活用户数:{{ activeUserNum }} 在线用户数:{{
activeUserNumIn
}}</span
>
<!--可配置化图标-->
<div style="
height: 30px;
......@@ -442,6 +449,11 @@
</div>
<span v-else></span>
</div>
<div v-else-if="columnTitle.prop == 'ydjwyyqk'">
<span v-if="scope.row['ydjwzdzcs'] <= 10">低频</span>
<span v-else-if="10 < scope.row['ydjwzdzcs'] < 30">中频</span>
<span v-else>高频</span>
</div>
<div v-else-if="columnTitle.prop == 'sjzy_sfzjxz'">
<span v-if="scope.row[columnTitle.prop] == '1'"></span>
<span v-else-if="scope.row[columnTitle.prop] == '0'"></span>
......@@ -588,6 +600,8 @@ export default {
pageType: String,
peopleUrl: String,
pageBs: String,
activeUserNum: Number, //鲜活用户数
activeUserNumIn: Number, //在线人数
},
data () {
return {
......
......@@ -522,9 +522,75 @@ export default [
title: "运控管理"
}
},
{
path: "ywsjTjbbDwdl",
name: "ywsjTjbbDwdl",
component: () => import("@/views/rzcx/ywsjTjbbDwdl.vue"),
meta: {
title: "业务审计"
}
},
{
path: "ywsjTjbbGrdl",
name: "ywsjTjbbGrdl",
component: () => import("@/views/rzcx/ywsjTjbbGrdl.vue"),
meta: {
title: "业务审计"
}
},
{
path: "ywsjTjbbDwcz",
name: "ywsjTjbbDwcz",
component: () => import("@/views/rzcx/ywsjTjbbDwcz.vue"),
meta: {
title: "业务审计"
}
},
{
path: "ywsjTjbbGrcz",
name: "ywsjTjbbGrcz",
component: () => import("@/views/rzcx/ywsjTjbbGrcz.vue"),
meta: {
title: "业务审计"
}
},
]
},
{
path: "/queryDwcztj",
name: "queryDwcztj",
component: () => import("@/views/rzcx/queryDwcztj.vue"),
meta: {
title: "单位操作统计主信息"
}
},
{
path: "/PerspectiveAndAnalysis",
name: "PerspectiveAndAnalysis",
component: () => import("@/views/rzcx/PerspectiveAndAnalysis.vue"),
meta: {
title: "分析"
}
},
{
path: "/grczxq",
name: "grczxq",
meta: {
title: '个人操作详情',
auth: 5
},
component: () => import("@/views/rzcx/grczxq.vue")
},
{
path: "/grczfx",
name: "grczfx",
meta: {
title: '个人操作分析',
auth: 5
},
component: () => import("@/views/rzcx/grczfx.vue")
},
{
path: "/qsajIndex",
name: "qsajIndex",
meta: {
......
......@@ -7,6 +7,7 @@
*
* */
/*————————————————————————基础查询界面--数据————————————————————————————————————————*/
import moment from 'moment'
let jccxFormData = {
asjbh: '',
jjbh: '',
......@@ -12206,6 +12207,26 @@ let rzcxPropLeftMenu2 = [
id: 'ldfwrzIndex',
label: '刑专使用情况',
index: '1-4',
},
{
id: 'ywsjTjbbDwdl',
label: '单位登录统计报表',
index: '1-5',
},
{
id: 'ywsjTjbbGrdl',
label: '个人登录统计报表',
index: '1-6',
},
{
id: 'ywsjTjbbDwcz',
label: '单位操作统计报表',
index: '1-7',
},
{
id: 'ywsjTjbbGrcz',
label: '个人操作统计报表',
index: '1-8',
}
]
},
......@@ -12231,9 +12252,9 @@ let rzcxPropLeftMenu2 = [
/*登录日志*/
let rzcxcxHeader = '登录日志'
let rzcxcxFormData = {
cxSj: [`${get3month.last} 00:00:00`, `${get3month.now} 00:00:00`],
cxSj: [moment().subtract(3, "month").format("YYYY-MM-DD HH:mm:ss"), moment().format("YYYY-MM-DD HH:mm:ss")],
unitcode: '',
userName: '',
userName: "",
limit: 10,
page: 1
}
......@@ -12394,7 +12415,7 @@ let rzcxGncxHeader = '功能操作日志'
let rzcxGncxFormData = {
czlx: '',
czmk: '',
cxSj: [`${get3day.last} 00:00:00`, `${get3day.now} 00:00:00`],
cxSj: [moment().subtract(3, "month").format("YYYY-MM-DD HH:mm:ss"), moment().format("YYYY-MM-DD HH:mm:ss")],
unitcode: '',
userName: '',
limit: 10,
......@@ -12589,7 +12610,7 @@ let rzcxGnCxURL = '/log/getCzLog'
/*刑专使用情况*/
let rzcxSyqkcxHeader = '刑专使用情况'
let rzcxSyqkcxFormDataYh = {
loginTime: [`${get3month.last}`, `${get3month.now}`],
loginTime: [moment().subtract(3, "month").format("YYYY-MM-DD HH:mm:ss"), moment().format("YYYY-MM-DD HH:mm:ss")],
name: '',
unitCode: '',
policeId: '',
......@@ -13923,6 +13944,10 @@ let jjwzdjappykglDefaultFormThead = [
{
label: 'APP授权数',
prop: 'appsqs'
},
{
label: '应用情况',
prop: 'ydjwyyqk'
}
]
let jjwzdjappykglURL = '/getFunctionService/getYkglJwzdAppMessage'
......
export default {
dateToStr(from) {
let date = new Date();
date.setTime(from);
let y = date.getFullYear();
let m = date.getMonth() + 1;
m = m < 10 ? "0" + m : m;
let d = date.getDate();
d = d < 10 ? "0" + d : d;
return y + '-' + m + '-' + d;
},
/**
* 时间戳转日期格式
* @param {Object} timeStamp
......@@ -38,19 +49,19 @@ export default {
* @param {Object} arr
* @param {Object} i
*/
inArray: function(elem, arr) {
inArray: function (elem, arr) {
return arr == null ? -1 : arr.indexOf(elem);
},
/**
* 获取某天日期
* @param {Object} day
*/
getDay: function(day) {
getDay: function (day) {
var today = new Date();
var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
today.setTime(targetday_milliseconds);
const doHandleMonth = function(month) {
const doHandleMonth = function (month) {
var m = month;
if (month.toString().length == 1) {
m = "0" + month;
......@@ -80,7 +91,7 @@ export default {
* @param {Object} obj
*/
deepClone(obj) {
const isObject = function(obj) {
const isObject = function (obj) {
return typeof obj == "object";
};
......
<template>
<div class="paneDiv">
<div style="text-align: right;">
<el-button
plain
style="margin-top: 1%; margin-right: 2% !important"
size="small"
@click="exportFile"
>
<i
class="fa fa-external-link"
aria-hidden="true"
style="margin-right: 5px"
></i>
导出
</el-button>
</div>
<el-row style="padding-top: 10px;">
<el-col :span="12">
<table v-loading="loading" id="table" class="table" border="1" cellpadding="0" cellspacing="0">
<tr>
<th>序号</th>
<th v-for="(item,index) in tableColumn" :key="index">{{ item.label }}</th>
</tr>
<tr v-for="(item, index) in tableData" :key="index">
<td>{{ index }}</td>
<td v-for="td in tableColumn" :key="td.prop">{{ item[td.prop] }}</td>
</tr>
</table>
</el-col>
<el-col :span="12">
<div
v-loading="loading"
id="e-charts"
style="height: 480px"
></div>
</el-col>
</el-row>
</div>
</template>
<script>
import request from "@/utils/axiosHttp";
import url from "@/api/base";
import { saveAs } from 'file-saver';
import XLSX from 'xlsx';
export default {
name: 'PerspectiveAndAnalysis',
data() {
return {
loading: false,
tableColumn: [
{
label: '日时段',
prop: 'czDay'
},
{
label: '次数',
prop: 'czCount'
}
],
tableData: [],
ExeclArr: []
}
},
methods: {
// /ywsjTj/queryDwczTjInner
initECharts(rows,cols) {
let myChart = this.$echarts.init(document.getElementById("e-charts"));
myChart.setOption({
xAxis: {
type: 'category',
data: rows
},
yAxis: {
type: 'value'
},
series: [
{
data: cols,
type: 'bar',
itemStyle: {
color: '#58a5ff'
}
},
{
data: cols,
type: 'line',
smooth: false,
itemStyle: {
color: '#298bfe'
}
}
]
});
},
initData() {
let self = this;
self.loading = true
const { unitCode, yymcdm, djsjKssj, djsjJssj } = self.$route.query
let url = `/ywsjTj/queryDwczTjInner?unitCode=${unitCode}&yymcdm=${yymcdm}&djsjKssj=${djsjKssj}&djsjJssj=${djsjJssj}`;
self.requestPost(url).then((res) => {
let { code, data } = res;
const rows = []
const cols = []
if (code == 200) {
console.log(data)
for (let i = 0; i < data.rows.length; i++) {
rows.push(data.rows[i].czDay)
cols.push(data.rows[i].czCount)
}
self.initECharts(rows, cols)
this.tableData = data.rows
this.ExeclArr = data.rows.map(item => {
return {
czDay: item.czDay,
czCount: item.czCount
}
})
}
self.loading = false
});
},
exportFile() {
var wb = XLSX.utils.table_to_book(document.querySelector('#table'), {
raw: true
});
var wbout = XLSX.write(wb, {
bookType: "xlsx",
bookSST: false,
type: "array"
});
try {
saveAs(
new Blob([wbout], { type: "application/octet-stream" }),
'单位操作分析' + ".xlsx"
);
if(this) this.$message.success("导出成功"); //导出成功的提示
} catch (e) {
if (typeof console !== "undefined") console.log(e, wbout);
}
},
requestPost(urlPath) {
return request({
url: url.rzURL + urlPath
});
}
},
mounted() {
const { unitCode } = this.$route.query
console.log(unitCode)
this.initData()
this.initECharts()
}
}
</script>
<style lang="scss" scoped>
.paneDiv{
width: 95%;
background: #ffffff;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.06);
border-radius: 4px;
margin: 15px auto;
padding: 20px;
box-sizing: border-box;
}
.table{
width: 100%;
tr{
td,th{
text-align: center;
}
}
}
</style>
\ No newline at end of file
<template>
<div>
<right-content :header="header" :cxFormData="cxFormData" :cxQueryField="cxQueryField" :cxDefaultFormThead="cxDefaultFormThead" :cxUrl="cxUrl"></right-content>
</div>
<div>
<right-content
:header="header"
:cxFormData="cxFormData"
:cxQueryField="cxQueryField"
:cxDefaultFormThead="cxDefaultFormThead"
:cxUrl="cxUrl"
:activeUserNum="activeUserNums"
:activeUserNumIn="activeUserNumIns"
></right-content>
</div>
</template>
<script>
import rightContent from "@c/ptCxForm_components.vue";
import {
rzcxcxHeader,
rzcxcxFormData,
rzcxCxQueryField,
rzcxCxDefaultFormThead,
rzcxCxURL
} from "@/utils/params";
export default {
name: "dlrz",
components:{
rightContent
},
data() {
return {
cxFormData:rzcxcxFormData,
cxQueryField: rzcxCxQueryField,
cxDefaultFormThead:rzcxCxDefaultFormThead,
cxUrl:rzcxCxURL,
header:rzcxcxHeader
};
import rightContent from "@c/ptCxForm_components.vue";
import Http from "@/utils/axiosHttp.js";
import {
rzcxcxHeader,
rzcxcxFormData,
rzcxCxQueryField,
rzcxCxDefaultFormThead,
rzcxCxURL,
hysURL
} from "@/utils/params";
import url from "@/api/base";
export default {
name: "dlrz",
components: {
rightContent,
},
data() {
return {
cxFormData: rzcxcxFormData,
cxQueryField: rzcxCxQueryField,
cxDefaultFormThead: rzcxCxDefaultFormThead,
cxUrl: rzcxCxURL,
header: rzcxcxHeader,
activeUserNums: 0,
activeUserNumIns: 0,
hysUrl: hysURL,
};
},
created() {
this.hys();
this.getZxrsTwo();
},
methods: {
hys() {
let self = this;
self.doQueryRequest("", self.hysUrl).then((response) => {
if (response.success === true) {
self.activeUserNums = response.data.activeUserNum;
} else {
self.$message({
type: "error",
message: response.message,
});
}
}
});
},
doQueryRequest(form, path) {
let queryurl = "";
if (path == "/dlcount") {
queryurl = url.wokerURL + path;
} else {
queryurl = url.rzURL + path;
}
return Http({
url: queryurl,
params: form,
method: "get",
});
},
getZxrsTwo() {
let self = this;
self.doQueryRequest("", "/dlcount").then((res) => {
self.activeUserNumIns = res.count;
});
},
},
};
</script>
<style scoped>
</style>
<template>
<div class="paneDiv" v-loading='loading'>
<el-row>
<el-col :span="24">
<span class="flTtitle">查询结果</span>
<el-button
plain
class="zdybtn export"
style="float: right; margin-top: 1%; margin-right: 2% !important"
size="small"
@click="exportFile"
>
<i
class="fa fa-external-link"
aria-hidden="true"
style="margin-right: 5px"
></i>
导出
</el-button>
</el-col>
</el-row>
<el-row style="padding-top: 10px">
<el-col :span="6">
<table style="width: 100%" border="1" cellpadding="0" cellspacing="0">
<tr>
<th>序号</th>
<th>日时段</th>
<th>次数</th>
</tr>
<tr v-for="(item,index) in dates" :key="index">
<td>{{index}}</td>
<td>{{item}}</td>
<td>{{vals[index]}}</td>
</tr>
</table>
</el-col>
<el-col :span="18">
<div id="e-charts" style="height: 480px"></div>
</el-col>
</el-row>
</div>
</template>
<script>
import request from "@/utils/axiosHttp";
import url from "@/api/base";
import qs from "qs";
export default {
name: "PerspectiveAndAnalysis",
data() {
return {
formData: {},
dates:[],
vals:[],
loading:false
};
},
methods: {
initECharts() {
let myChart = this.$echarts.init(document.getElementById("e-charts"));
myChart.setOption({
xAxis: {
type: "category",
data: this.dates,
},
yAxis: {
type: "value",
},
series: [
{
data: this.vals,
type: "bar",
itemStyle: {
color: "#58a5ff",
},
},
{
data: this.vals,
type: "line",
smooth: false,
itemStyle: {
color: "#298bfe",
},
},
],
});
this.loading = false;
},
exportFile() {
this.qeruestFile(this.formData, "/ywsjTj/exportRyccfx").then((res) => {
let blob = new Blob([res]);
let fileName = "个人操作统计.xlsx";
// 组装a标签
let elink = document.createElement("a");
// 设置下载文件名
elink.download = fileName;
elink.style.display = "none";
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
});
},
detail(sfzh) {
this.$router.pushToTab({
path: "/grczxq",
query: {
...this.formData,
sfzh,
},
});
},
fx() {},
initDate() {
let self = this;
this.loading = true;
let url = "/ywsjTj/queryRyccfx";
this.qeruestPost(this.formData, url).then((res) => {
let { code, data } = res;
if (code == 200) {
for (const key in data) {
this.dates.push(key)
this.vals.push(data[key])
this.initECharts()
}
}
});
},
qeruestFile(form, urls) {
return request({
url: url.rzURL + urls,
data: qs.stringify(form),
responseType: "blob",
method: "post",
headers: {
"content-type": "application/x-www-form-urlencoded",
},
});
},
qeruestPost(form, urls) {
return request({
url: url.rzURL + urls,
data: qs.stringify(form),
method: "post",
headers: {
"content-type": "application/x-www-form-urlencoded",
},
});
},
},
mounted() {
this.formData = this.$route.query;
this.initDate();
},
};
</script>
<style lang="scss" scoped>
.paneDiv {
width: 95%;
background: #ffffff;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.06);
opacity: 1;
border-radius: 4px;
margin: 15px auto;
padding: 20px;
}
</style>
\ No newline at end of file
<template>
<div class="Content">
<div class="paneDiv">
<el-row>
<el-col :span="24">
<span class="flTtitle">查询结果</span>
<span class="total">共有{{ dataCount }}条查询结果</span>
<el-button
plain
class="zdybtn export"
style="float: right; margin-top: 1%; margin-right: 2% !important"
size="small"
@click="exportFile"
>
<i
class="fa fa-external-link"
aria-hidden="true"
style="margin-right: 5px"
></i>
导出
</el-button>
</el-col>
</el-row>
<el-table
v-loading="tableLoading"
element-loading-text="拼命加载中"
:data="tableData"
tooltip-effect="dark"
width="100%"
size="small"
border
>
<el-table-column type="index" label="序号" width="50" />
<el-table-column align="center" label="身份证号" prop="sfzh" />
<el-table-column align="center" label="单位名称" prop="unitname" />
<el-table-column align="center" label="姓名" prop="xm" />
<el-table-column align="center" label="警号" prop="jh" />
<el-table-column align="center" label="联系电话" prop="lxdh" />
>
<el-table-column align="center" label="访问时间" prop="fwsj" />
<el-table-column align="center" label="应用名称" prop="yymc" />
<el-table-column
align="center"
label="操作参数"
prop="czcs"
width="300px"
/>
</el-table>
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="formData.page"
:small="true"
:total="dataCount"
>
</el-pagination>
</div>
</div>
</template>
<script>
import request from "@/utils/axiosHttp";
import url from "@/api/base";
import qs from "qs";
export default {
name: "ywsjTjbbGrcz",
data() {
return {
tableLoading: false,
tableData: [],
dataCount: 0,
formData: {},
};
},
mounted() {
this.formData = this.$route.query;
this.initDate();
},
methods: {
exportFile() {
this.qeruestFile(this.formData, "/ywsjTj/exportRyccxq").then((res) => {
let blob = new Blob([res]);
let fileName = "个人操作统计.xlsx";
// 组装a标签
let elink = document.createElement("a");
// 设置下载文件名
elink.download = fileName;
elink.style.display = "none";
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
});
},
detail(sfzh) {
this.$router.pushToTab({
path: "/grczxq",
query: {
...this.formData,
sfzh,
},
});
},
fx() {},
initDate() {
let self = this;
this.tableLoading = true;
let url = "/ywsjTj/queryRyccxq";
this.qeruestPost(this.formData, url).then((res) => {
let { code, data, total } = res;
if (code == 200) {
self.tableData = data.rows;
self.dataCount = data.total;
self.tableLoading = false;
}
});
},
qeruestFile(form, urls) {
return request({
url: url.rzURL + urls,
data: qs.stringify(form),
responseType: "blob",
method: "post",
headers: {
"content-type": "application/x-www-form-urlencoded",
},
});
},
qeruestPost(form, urls) {
return request({
url: url.rzURL + urls,
data: qs.stringify(form),
method: "post",
headers: {
"content-type": "application/x-www-form-urlencoded",
},
});
},
clearData() {
this.formData.daterange = [];
this.formData.djsjJssj = "";
this.formData.djsjKssj = "";
},
query() {
let dataRange = this.formData.daterange;
if (dataRange.length > 0) {
this.formData.djsjKssj = this.$moment(dataRange[0]).format(
"YYYY-MM-DD"
);
this.formData.djsjJssj = this.$moment(dataRange[1]).format(
"YYYY-MM-DD"
);
}
this.tableLoading = true;
this.formData.daterange = [];
this.initDate();
this.tableLoading = false;
},
handleSizeChange(val) {
this.formData.limit = val;
this.initDate();
},
handleCurrentChange(val) {
this.formData.page = val;
this.initDate();
},
},
};
</script>
<style>
.el-dialog__body {
padding: 10px 15px !important;
}
.rightContent .el-input__inner,
#formCommonPage .el-input__inner {
height: 36px;
line-height: 36px;
font-family: inherit;
}
.el-table__header-wrapper th,
.el-table__header-wrapper tr {
background: #f4f6f7;
}
.rightContent .el-input__icon,
#formCommonPage .el-input__icon,
.el-input__suffix-inner {
line-height: 36px;
}
.rightContent .el-range-separator {
position: relative;
top: -4px;
}
.rightContent .el-textarea__inner,
#formCommonPage .el-textarea__inner {
width: 100%;
font-family: inherit;
}
.rightContent .el-range-input,
#formCommonPage .el-range-input {
vertical-align: top;
}
.rightContent .el-date-editor .el-range__close-icon {
margin-top: -4px;
}
.rightContent .el-form-item__error {
left: calc(66% - 27px);
top: 12px;
}
.success-row {
background-color: #fbf9f4 !important;
}
.Content .el-input,
.Content .el-date-editor--daterange.el-input__inner {
width: 100% !important;
}
</style>
<style scoped lang="scss">
@import "@/assets/styles/rightContent.scss";
.Content {
width: 1200px;
background: #ffffff;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.06);
opacity: 1;
border-radius: 4px;
margin: 15px auto;
padding: 20px;
}
.zdybtns {
width: 76px !important;
height: 32px !important;
line-height: 32px !important;
background: #ffffff;
border: 1px solid #d9d9d9;
opacity: 1;
border-radius: 4px;
}
.gxrInfo {
display: flex;
flex-wrap: wrap;
flex: 2;
.gxrItem {
display: flex;
width: 45%;
.gxrTitle {
font-size: 16px;
font-family: Source Han Sans CN;
color: #363636;
}
.gxrContent {
color: #808591;
font-size: 16px;
padding-left: 10px;
}
}
}
</style>
\ No newline at end of file
......@@ -50,7 +50,6 @@ export default {
window.open(routeData.href, "_blank");
},
changeSidebarIndex(index, item) {
debugger
if (index.indexOf("-") == -1) {
this.sidebarItemName = item[index - 1].id;
this.$router.push({
......
<template>
<div class="paneDiv">
<div style="text-align: right;">
<el-button
plain
style="margin-top: 1%; margin-right: 2% !important"
size="small"
@click="exportFile"
>
<i
class="fa fa-external-link"
aria-hidden="true"
style="margin-right: 5px"
></i>
导出
</el-button>
</div>
<table class="table" cellpadding="0" cellspacing="0">
<tr>
<th>序号</th>
<th v-for="(th,thIndex) in tableData" :key="thIndex">
{{ th.label }}
</th>
</tr>
<tr v-for="(item,index) in tableList" :key="index">
<td>{{ index }}</td>
<td v-for="(td,tdIndex) in tableData" :key="tdIndex" class="cursor">
<div :class="[{color: td.showJump}, td.align]" @click="onAnalysis(item,td)">{{ item[td.prop] }}</div>
</td>
</tr>
</table>
</div>
</template>
<script>
import request from "@/utils/axiosHttp";
import url from "@/api/base";
// import qs from "qs";
export default {
name: 'queryDwcztj',
data() {
return {
tableData: [
{
label: '单位',
prop: 'unitName',
align: 'center',
showJump: true
},
{
label: '案件侦办',
prop: 'ajzbCount',
align: 'center',
showJump: true
},
{
label: '证据材料检查',
prop: 'zjclCount',
align: 'center',
showJump: true
},
{
label: '工作指令',
prop: 'gzzlCount',
align: 'center',
showJump: true
},
{
label: '有组织犯罪',
prop: 'yzzfzCount',
align: 'center',
showJump: true
},
{
label: '线索核办',
prop: 'xshbCount',
align: 'center',
showJump: true
},
{
label: '线索查询比对',
prop: 'xscxbdCount',
align: 'center',
showJump: true
},
{
label: '多生物特征',
prop: 'dswtzCount',
align: 'center',
showJump: true
},
{
label: '刑嫌调控',
prop: 'xxtkCount',
align: 'center',
showJump: true
},
{
label: '阵地管控',
prop: 'zdgkCount',
align: 'center',
showJump: true
},
{
label: '业务效能',
prop: 'ywxnCount',
align: 'center',
showJump: true
},
{
label: '大屏统计',
prop: 'dptjCount',
align: 'center',
showJump: true
}
],
tableList: []
}
},
methods: {
initData() {
let self = this;
self.loading = true;
const { unitCode, yymcdm, djsjKssj, djsjJssj } = self.$route.query
console.log(unitCode)
let url = `/ywsjTj/queryDwczTj?unitCode=${unitCode}&yymcdm=${yymcdm}&djsjKssj=${djsjKssj}&djsjJssj=${djsjJssj}`;
self.requestGet(url).then((res) => {
let { code, data } = res;
if (code == 200) {
this.tableList = data.rows
}
});
},
onAnalysis(row,type) {
const { djsjKssj, djsjJssj } = this.$route.query
if (type.prop === 'unitName') {
this.$router.pushToTab({
path: '/queryDwcztj',
query: {
unitCode: row.unitCode,
yymcdm: row.yymcdm??'',
djsjKssj: djsjKssj??'',
djsjJssj: djsjJssj??''
}
})
} else {
this.$router.pushToTab({
path: '/PerspectiveAndAnalysis',
query: {
unitCode: row.unitCode,
yymcdm: row.yymcdm??'',
djsjKssj: djsjKssj??'',
djsjJssj: djsjJssj??''
}
})
}
},
exportFile() {
const { djsjJssj, djsjKssj, unitCode, yymcdm } = this.$route.query
// this.qeruestFile(`/ywsjTj/exportDwczTj?djsjJssj=${djsjJssj}&djsjKssj=${djsjKssj}&unitCode=${unitCode}&yymcdm=${yymcdm}`
this.requestFile(`/ywsjTj/exportDwczTj?djsjJssj=${djsjJssj}&djsjKssj=${djsjKssj}&unitCode=${unitCode}&yymcdm=${yymcdm}`).then((res) => {
let blob = new Blob([res]);
let fileName = "单位操作透视.xlsx";
// 组装a标签
let elink = document.createElement("a");
// 设置下载文件名
elink.download = fileName;
elink.style.display = "none";
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
})
},
requestGet(urls) {
return request({
url: url.rzURL + urls
});
},
requestFile(urls) {
return request({
url: url.rzURL + urls,
// data: qs.stringify(form),
responseType: "blob",
// method: "post",
headers: {
"content-type": "application/x-www-form-urlencoded",
},
});
}
},
mounted() {
this.initData()
}
}
</script>
<style lang="scss" scoped>
.paneDiv{
width: 95%;
background: #ffffff;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.06);
border-radius: 4px;
margin: 15px auto;
padding: 20px;
box-sizing: border-box;
}
.table{
width: 100%;
tr{
td,th{
border: 1px solid #EBEEF5;
padding: 10px 8px;
box-sizing: border-box;
text-align: center;
}
}
}
.color{
color: #409eff
}
.left{
text-align: left;
}
.center{
text-align: center;
}
.right{
text-align: right;
}
.cursor{
cursor: pointer;
}
</style>
\ No newline at end of file
<template>
<div class="Content">
<div class="cxtjWrap paneDiv">
<el-row>
<el-col :span="24">
<span class="flTtitle">查询条件</span>
</el-col>
</el-row>
<el-form
label-position="right"
label-width="140px"
ref="queryForm"
:model="formData"
>
<el-row>
<!-- <el-col :span="6">-->
<!-- <el-form-item label="报表源">-->
<!-- <el-select v-model="formData.type" clearable>-->
<!-- <el-option-->
<!-- v-for="item in queryTypeList"-->
<!-- :key="item.value"-->
<!-- :label="item.name"-->
<!-- :value="item.value"-->
<!-- >-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="10">
<el-form-item label="操作日期">
<el-date-picker
v-model="formData.daterange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-button-group style="float: right;display: -webkit-inline-box">
<el-button plain size="small" @click="clearData" style="width: 60%;">重置</el-button>
<el-button
type="primary"
size="small"
style="width: 60%;"
@click="query">查询
</el-button>
</el-button-group>
</el-col>
</el-row>
</el-form>
</div>
<div class="paneDiv">
<el-row>
<el-col :span="24">
<span class="flTtitle">查询结果</span>
<span class="total">共有{{ page.dataCount }}条查询结果</span>
<el-button plain class="zdybtn export" style="float: right;margin-top: 1%;margin-right: 2%!important;"
size="small" @click="exportFile">
<i class="fa fa-external-link" aria-hidden="true" style="margin-right: 5px"></i>
导出
</el-button>
</el-col>
</el-row>
<!--表格-->
<el-table
v-loading="tableLoading"
element-loading-text="拼命加载中"
:data="tableData"
tooltip-effect="dark"
width="100%"
size="small"
border>
<el-table-column type="index" label="序号" width="50"/>
<el-table-column align="center" label="登录单位">
<template v-slot="scope">
<el-button type="text" @click="getNextUnitInfo(scope.row)">{{ scope.row.unitName }}</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="登录人数" prop="peopleCount"/>
<el-table-column align="center" label="人数同比率" prop="peopleYoy"/>
<el-table-column align="center" label="人数环比率" prop="peopleQoq"/>
<el-table-column align="center" label="登录次数" prop="loginCount"/>
<el-table-column align="center" label="次数同比率" prop="loginCountYoy"/>
<el-table-column align="center" label="次数环比率" prop="loginCountQoq"/>
<el-table-column align="center" label="平均登录次数" prop="loginCountAvg"/>
</el-table>
<!--分页-->
<!-- <el-pagination-->
<!-- background-->
<!-- @size-change="handleSizeChange"-->
<!-- @current-change="handleCurrentChange"-->
<!-- :current-page.sync="page.currentPage"-->
<!-- :page-sizes="[10]"-->
<!-- :page-size="page.pageCount"-->
<!-- layout="sizes,prev, pager, next"-->
<!-- :small="true"-->
<!-- :total="page.dataCount"-->
<!-- >-->
<!-- </el-pagination>-->
</div>
</div>
</template>
<script>
import request from "@/utils/axiosHttp";
import url from "@/api/base";
export default {
name: "ywsjTjbbDwdl",
data() {
return {
tableLoading: false,
tableData: [],
formData: {
type: '1',
daterange: [],
djsjKssj: '',
djsjJssj: '',
page: 1,
limit: 10,
unitcode: ''
},
queryTypeList: [
{name: '单位登录统计', value: '1'},
{name: '人员登录统计', value: '2'},
{name: '单位操作统计', value: '3'},
{name: '人员操作统计', value: '4'},
],
page: {
currentPage: 1,
pageCount: 10,
dataCount: 0
}
};
},
mounted() {
this.initDate();
this.query();
},
methods: {
exportFile() {
request({
url: url.rzURL + "/ywsjTj/exportDwdlTj",
params: {djsjKssj: this.formData.djsjKssj, djsjJssj: this.formData.djsjJssj, unitCode: this.formData.unitcode},
method: "get",
responseType: "blob"
}).then(res => {
this.tableLoading = false;
if (res.size > 0) {
let blob = new Blob([res]);
let fileName = '单位登录统计.xlsx'
console.log('fileName_', fileName)
fileName = fileName.replace(new RegExp("%2C", "gm"), ",");
// 组装a标签
let elink = document.createElement("a");
// 设置下载文件名
elink.download = fileName;
elink.style.display = "none";
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
} else {
this.$message.error("未找到有效的文件")
}
});
},
getNextUnitInfo(row) {
console.log(row)
this.formData.unitcode = row.unitCode;
this.query();
},
initDate() {
let start = new Date(new Date().setDate(1));
let current = new Date();
this.formData.daterange.push(start);
this.formData.daterange.push(current);
},
clearData() {
this.formData.daterange = [];
this.formData.djsjJssj = '';
this.formData.djsjKssj = '';
this.formData.unitcode = '';
},
query() {
let dataRange = this.formData.daterange;
if (dataRange && dataRange.length > 0) {
this.formData.djsjKssj = dataRange[0];
this.formData.djsjJssj = dataRange[1];
}else {
this.formData.djsjKssj = '';
this.formData.djsjJssj = '';
}
this.tableLoading = true;
request({
url: url.rzURL + "/ywsjTj/queryDwdlTj",
params: {djsjKssj: this.formData.djsjKssj, djsjJssj: this.formData.djsjJssj, unitCode: this.formData.unitcode},
method: "get"
}).then(res => {
this.tableLoading = false;
if (res.code == 200) {
this.tableData = res.data.rows;
this.page.dataCount = res.data.total;
} else {
this.$message.error(res.msg);
}
});
},
handleSizeChange(val) {
console.log(val)
},
handleCurrentChange(val) {
console.log(val)
},
}
}
</script>
<style>
.el-dialog__body {
padding: 10px 15px !important;
}
.rightContent .el-input__inner,
#formCommonPage .el-input__inner {
height: 36px;
line-height: 36px;
font-family: inherit;
}
.el-table__header-wrapper th,
.el-table__header-wrapper tr {
background: #f4f6f7;
}
.rightContent .el-input__icon,
#formCommonPage .el-input__icon,
.el-input__suffix-inner {
line-height: 36px;
}
.rightContent .el-range-separator {
position: relative;
top: -4px;
}
.rightContent .el-textarea__inner,
#formCommonPage .el-textarea__inner {
width: 100%;
font-family: inherit;
}
.rightContent .el-range-input,
#formCommonPage .el-range-input {
vertical-align: top;
}
.rightContent .el-date-editor .el-range__close-icon {
margin-top: -4px;
}
.rightContent .el-form-item__error {
left: calc(66% - 27px);
top: 12px;
}
.success-row {
background-color: #fbf9f4 !important;
}
.Content .el-input,
.Content .el-date-editor--daterange.el-input__inner {
width: 100% !important;
}
</style>
<style scoped lang="scss">
@import "@/assets/styles/rightContent.scss";
.zdybtns {
width: 76px !important;
height: 32px !important;
line-height: 32px !important;
background: #ffffff;
border: 1px solid #d9d9d9;
opacity: 1;
border-radius: 4px;
}
.gxrInfo {
display: flex;
flex-wrap: wrap;
flex: 2;
.gxrItem {
display: flex;
width: 45%;
.gxrTitle {
font-size: 16px;
font-family: Source Han Sans CN;
color: #363636;
}
.gxrContent {
color: #808591;
font-size: 16px;
padding-left: 10px;
}
}
}
</style>
\ No newline at end of file
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