Commit 8b66b21f authored by 赵啸非's avatar 赵啸非

Merge remote-tracking branch 'origin/master'

parents a17b6cb5 9bcfc757
......@@ -9,7 +9,7 @@
color:#1BBC9B;
}
.edit{
color:#03d76f;
color:#03d76f !important;
}
.clofff{
color:#fff;
......
<template>
<div class="business flex flexc">
<a-tabs :activeKey="active" @change="changeRouter">
<a-tab-pane key="/business/businessmanage" tab="业务管理">
<!-- <BusinessTabs2 v-if="active === 1" ref="BusinessTabs2" /> -->
</a-tab-pane>
<a-tab-pane key="/business/businessmanage" tab="业务管理"> </a-tab-pane>
<a-tab-pane key="/business/mattermanage" tab="事项管理">
<!-- <BusinessTabs1 v-if="active === 2" ref="BusinessTabs1" /> -->
</a-tab-pane>
<a-tab-pane key="/business/mattermanage" tab="事项管理"> </a-tab-pane>
<a-tab-pane key="/business/businessinmanage" tab="业务事项关联">
<!-- <BusinessTabs3 v-if="active === 3" ref="BusinessTabs3" /> -->
</a-tab-pane>
<a-tab-pane key="/business/workguide" tab="办事指南数据管理">
</a-tab-pane>
</a-tabs>
<div class="business-out-box flex1">
......@@ -20,21 +17,12 @@
</template>
<script>
// import BusinessTabs1 from "./components/businessTabs1.vue";
// import BusinessTabs2 from "./components/businessTabs2.vue";
// import BusinessTabs3 from "./components/businessTabs3.vue";
export default {
components: {
// BusinessTabs1,
// BusinessTabs2,
// BusinessTabs3,
},
components: {},
data() {
return {
siteId: "", // 站点id
// active: 1,
};
},
computed: {
......@@ -60,15 +48,7 @@ export default {
/deep/.ant-tabs-nav-container {
border-bottom: 1px solid rgb(224, 224, 224) !important;
}
&::after {
content: "";
width: 1px;
height: 82vh;
position: absolute;
background-color: #eeeeee;
top: 44px;
left: 50%;
}
.business-out-box {
overflow-y: auto;
}
......
......@@ -354,17 +354,18 @@ export default {
onSelectLeftRow(record, selected) {
if (selected && record.children && record.children.length) {
record.children.forEach((v) => {
this.selectedLeftRowKeys= [...new Set([...this.selectedLeftRowKeys,v.id])]
this.deleteData=[...new Set([...this.deleteData,v])];
this.selectedLeftRowKeys = [
...new Set([...this.selectedLeftRowKeys, v.id]),
];
this.deleteData = [...new Set([...this.deleteData, v])];
});
} else if (!selected) {
this.selectedLeftRowKeys = this.selectedLeftRowKeys.filter(
(v) => v != record.id
);
this.deleteData = this.deleteData.filter((v) => {
return v.id !=record.id
return v.id != record.id;
});
}
},
// 批量删除
......@@ -525,6 +526,15 @@ export default {
width: 100%;
height: 100%;
display: flex;
&::after {
content: "";
width: 1px;
height: 82vh;
position: absolute;
background-color: #eeeeee;
top: 44px;
left: 50%;
}
.left,
.right {
width: 50%;
......
......@@ -586,6 +586,15 @@ export default {
.basicset-tab2 {
width: 100%;
display: flex;
&::after {
content: "";
width: 1px;
height: 82vh;
position: absolute;
background-color: #eeeeee;
top: 44px;
left: 50%;
}
.left,
.right {
width: 50%;
......
......@@ -666,6 +666,15 @@ export default {
.basicset-tab3 {
width: 100%;
display: flex;
&::after {
content: "";
width: 1px;
height: 82vh;
position: absolute;
background-color: #eeeeee;
top: 44px;
left: 50%;
}
.left,
.right {
width: 50%;
......
rrent" <template>
<div class="basicset-tab4">
<div class="left">
<div class="header">
<h3 class="titel">站点事项列表</h3>
<div class="header-bottom flex aic jcb">
<div class="left-btn"></div>
<div>
<a-space>
<a-select
style="min-width: 120px"
allowClear
v-model="dept"
class="select-department"
placeholder="部门搜索"
>
<a-select-option
v-for="v in deptList"
:key="v.id"
:value="v.deptNumber"
>
{{ v.name }}
</a-select-option>
</a-select>
<a-select
style="width: 120px"
allowClear
v-model="source"
class="select-department"
placeholder="事项来源"
>
<a-select-option :value="0"> 一体化添加 </a-select-option>
<a-select-option :value="1"> 手动添加 </a-select-option>
</a-select>
<a-input-search
v-model="searchVal"
placeholder="请输入事项名称搜索"
enter-button="搜索"
@search="onSearch"
allowClear
/>
</a-space>
</div>
</div>
</div>
<div class="table-content">
<!-- 表格 -->
<a-table
bordered
size="middle"
:loading="loading"
:pagination="{
showTotal: (total) => `共 ${total} 条`,
current: current,
total: total,
pageSize: size,
showSizeChanger: true,
showQuickJumper: true,
pageSizeOptions: pageSizeOptions,
onChange: changePage,
onShowSizeChange: showSizeChange,
}"
:scroll="{ y: 550 }"
:columns="columns"
:data-source="matterSiteData"
:rowKey="(record) => record.id"
>
<template slot="index" slot-scope="text, record, index">
<span>
{{ (current - 1) * size + index + 1 }}
</span>
</template>
<!-- 部门 -->
<template slot="deptName" slot-scope="text">
{{ text.deptName ? text.deptName : "--" }}
</template>
<!-- 事项名称 -->
<template slot="matterName" slot-scope="text">
<a-tooltip placement="topLeft">
<template slot="title">
{{ text.matterName }}
</template>
<div class="matter-name">{{ text.matterName }}</div>
</a-tooltip>
</template>
<!-- 事项来源 -->
<template slot="source" slot-scope="text">
<a-tag v-if="text.source == 0" color="green"> 一体化添加 </a-tag>
<a-tag v-else color="blue"> 手动添加 </a-tag>
</template>
<!-- 操作 -->
<template slot="action" slot-scope="text">
<a-space size="middle">
<div
class="workguide_btn"
:style="{ color: text.hot == 1 ? '#03d76f' : '#1890FF' }"
@click="handleSiteEdit(text, 'hot')"
>
{{ text.hot == 1 ? "取消热门" : "设置热门" }}
</div>
<div
class="workguide_btn"
style="width: 60px"
@click="handleSiteEdit(text, 'display')"
>
{{ text.display == 1 ? "取消展示" : "展示" }}
</div>
</a-space>
</template>
</a-table>
</div>
</div>
</div>
</template>
<script>
import { getSiteMatterList, addSitematter } from "@/services/matter";
import { getDeptList } from "@/services/dept";
import local from "@/utils/local";
const columns = [
{
title: "序号",
width: "50px",
scopedSlots: { customRender: "index" },
},
{
title: "部门",
width: "20%",
scopedSlots: {
customRender: "deptName",
},
},
{
title: "事项名称",
// ellipsis: true,
align: "left",
scopedSlots: {
customRender: "matterName",
},
},
{
title: "事项来源",
scopedSlots: {
customRender: "source",
},
},
{
title: "操作",
width: "200px",
scopedSlots: {
customRender: "action",
},
},
];
export default {
components: {},
data() {
return {
columns,
loading: false,
source: undefined, // 左边来源
selectedRowKeys: [],
matterSiteData: [], // 站点事项
matterDataList: [], //事项列表数据
current: 1,
total: 0,
size: 10,
pageSizeOptions: ["10", "30", "50", "100"],
siteId: local.getLocal("siteId"), // 站点id
deptList: [], // 站点部门
searchVal: "", // 站点事项搜索
dept: undefined, // 部门搜索
};
},
created() {
this.getDeptListData();
this.getMatterSiteData();
},
methods: {
// 获取部门列表
async getDeptListData(obj = {}) {
this.deptLoading = true;
let res = await getDeptList({
siteId: this.siteId,
page: 1,
size: -1,
...obj,
});
this.deptLoading = false;
let { code, data } = res.data;
if (code === 1) {
this.deptList = data.data;
}
},
// 获取站点事项
async getMatterSiteData(search = {}) {
this.loading = true;
let res = await getSiteMatterList({
page: this.current,
size: this.size,
siteId: this.siteId,
source: this.source,
matterName: `%${this.searchVal}%`,
deptCode: this.dept,
...search,
});
let { pageInfo, data } = res.data.data;
this.total = pageInfo.totalResult;
this.matterSiteData = data;
this.loading = false;
},
// 搜索
onSearch() {
this.current = 1;
this.getMatterSiteData();
},
// 左翻页
changePage(num) {
this.current = num;
this.getMatterSiteData();
},
// 左边改变每页显示数量
showSizeChange(current, size) {
this.current = current;
this.size = size;
this.getMatterSiteData();
},
// 设置热门、展示
async handleSiteEdit(row, type) {
let hot;
let display;
if (type === "hot") {
if (row.hot == 1) {
hot = 0;
} else {
hot = 1;
}
} else {
if (row.display == 1) {
display = 0;
} else {
display = 1;
}
}
let obj = {
id: row.id,
};
if (hot != "undefined") obj.hot = hot;
if (display != "undefined") obj.display = display;
let res = await addSitematter(obj);
if (res.data.code == 1) {
this.$message.success("设置成功");
this.getMatterSiteData();
this.$forceUpdate();
}
},
},
};
</script>
<style lang="less" scoped>
/deep/.business {
&::after {
content: "";
width: 1px;
height: 82vh;
position: absolute;
background-color: red;
top: 44px;
left: 50%;
}
}
.basicset-tab4 {
width: 100%;
height: 100%;
padding: 0px 20px;
.header {
margin-bottom: 15px;
}
.workguide_btn {
cursor: pointer;
width: 60px;
color: #1890ff;
}
.matter-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
</style>
......@@ -76,6 +76,7 @@ const options = {
"@/pages/basicset/business/components/businessTabs1"
),
},
// 事项管理
{
path: "mattermanage",
meta: {
......@@ -86,6 +87,7 @@ const options = {
"@/pages/basicset/business/components/businessTabs2"
),
},
// 业务事项关联
{
path: "businessinmanage",
meta: {
......@@ -96,6 +98,17 @@ const options = {
"@/pages/basicset/business/components/businessTabs3"
),
},
// 办事指南事项管理
{
path: "workguide",
meta: {
invisible: true,
},
component: () =>
import(
"@/pages/basicset/business/components/businessTabs4"
),
},
],
},
{
......
VUE_APP_API_BASE_URL=http://192.168.0.98:11072
VUE_APP_API_BASE_URL=http://192.168.0.98:11072
\ No newline at end of file
This diff is collapsed.
......@@ -11,6 +11,7 @@
},
"dependencies": {
"@babel/polyfill": "^7.12.1",
"@jiaminghi/data-view": "^2.10.0",
"ant-design-vue": "^1.7.8",
"axios": "^0.27.2",
"babel-polyfill": "^6.26.0",
......
import http from "../request/http";
let baseURL = process.env.VUE_APP_API_BASE_URL;
let BASEURL = process.env.VUE_APP_API_PHP_URL;
/* 使用行为分析 */
//事件分析
export function getEventCensus(params) {
return http.post(`${baseURL}/zwfw/act/analyse/pageEventCensus`, params);
}
//产品热力图
export function getProductHotCensus(params) {
return http.post(`${baseURL}/zwfw/act/analyse/productHotCensus`, params);
}
//页面访问分析
export function getAccessAnalyse(params) {
return http.post(`${baseURL}/zwfw/act/analyse/accessAnalyse`, params);
}
//路径分析
export function getWayAccessAnalyse(params) {
return http.post(`${baseURL}/zwfw/act/analyse/wayAccessAnalyse`, params);
}
\ No newline at end of file
......@@ -66,6 +66,10 @@ export function getWLLZCount(params) {
export function getWLLZInfo(params) {
return http.get(`${BASEURL}/wllz/index/complainInfo`, params);
}
// 12345报表
export function getSys12345(params) {
return http.get(`${BASEURL}/wllz/complainapi/sys12345`, params);
}
// 样表列表
export function getBillList(params) {
......@@ -137,3 +141,47 @@ export function getOtherList(params) {
export function getRigusersList(params) {
return http.get(`${BASEURL}/admin/reportforms/rigusers`, params);
}
/**
* 服务类型数据分析
*/
// 预约趋势
export function getTrend(params) {
return http.get(`${BASEURL}/admin/order/getTrend`, params);
}
// 预约热度排名
export function getOrderRanking(params) {
return http.get(`${BASEURL}/admin/order/getOrderRanking`, params);
}
// 预约人群画像-地域分布
export function getStatisticArea(params) {
return http.get(`${BASEURL}/admin/statistic/area`, params);
}
// 预约人群画像-年龄分布
export function getStatisticAges(params) {
return http.get(`${BASEURL}/admin/statistic/ages`, params);
}
// 预约人群画像-签到准确率
export function getStatisticSignin(params) {
return http.get(`${BASEURL}/admin/statistic/signin`, params);
}
// 预约人群画像-性别分布
export function getStatisticSexual(params) {
return http.get(`${BASEURL}/admin/statistic/sexual`, params);
}
/**
* 办不成事报表
*/
// 办不成事列表
export function getImpossible(params) {
return http.get(`${BASEURL}/admin/impossible/index`, params);
}
// 统计办不成事和已回复
export function getCountImpossible(params) {
return http.get(`${BASEURL}/admin/impossible/countImpossible`, params);
}
// 办不成事详情
export function getImpossibleInfo(params) {
return http.get(`${BASEURL}/admin/impossible/impossibleInfo`, params);
}
\ No newline at end of file
This diff is collapsed.
<template>
<img :src="imgsrc">
</template>
<script>
export default {
props:['src'],
computed:{
imgsrc:function(){
return this.src?`${process.env.VUE_APP_API_BASE_URL}/${this.src}`:require('./thumb.jpg')
}
}
}
</script>
\ No newline at end of file
<template>
<div class="thumb" >
<div v-if="fileType == 'img'">
<img :src="images[index]" v-if="src" @click="show">
<img src="./thumb.jpg" v-else>
</div>
<div v-else>
<a-icon type="play-circle" style="font-size:20px" @click="visible = true"/>
<a-modal
title="详情"
:visible="visible"
:footer="null"
@cancel="visible=false"
>
<video :src="images[0]" style="width:100%;height:100%" controls autoplay v-if="visible"></video>
</a-modal>
</div>
</div>
</template>
<script>
export default {
props:{
src:[String,Array],
index:{
type:Number,
default:0
}
},
data(){
return{
images:[],
fileType:"img",
visible:false
}
},
watch:{
src:{
handler:function(v){
if(v){
if(typeof v == 'string'){
this.images = v.split(",").map(v=>{
return this.publicSrc(v)
})
}else{
this.images = v.map(v=>{
return this.publicSrc(v)
})
}
// 判断视频格式
if(v.search(/mp4/ig)>=0){
this.fileType = 'mp4'
}else{
this.fileType = 'img'
}
}
},
immediate:true
}
},
methods:{
publicSrc(src){
if(src.search(/http/ig)>-1){
return `${src}`
}else{
return `${process.env.VUE_APP_API_BASE_URL}/${src}`
}
},
show(){
this.$viewerApi({
images: this.images,
options: {
initialViewIndex: this.index
},
})
}
}
}
</script>
<style lang="less" scoped>
.thumb{
width: 50px;
// height: 60px;
margin: 0 auto;
cursor: pointer;
img{
display: inline-block;
width: 100%;
height: 100%;
}
}
</style>
\ No newline at end of file
......@@ -20,6 +20,9 @@ import * as directives from "@/directive";
Object.keys(directives).forEach((name) =>
Vue.directive(name, directives[name])
);
// datav
import dataV from '@jiaminghi/data-view'
Vue.use(dataV)
// 引入lodash
import lodash from "lodash";
Vue.prototype.$_ = lodash;
......
......@@ -232,6 +232,27 @@ const routes = [
},
],
},
{
path: "Impossible",
name: "Impossible",
redirect: "/home/dataManagement/Impossible/ImpossibleForm",
component: () =>
import(
/* webpackChunkName: "oneYardPass" */ "@/views/dataAdmin/components/Impossible/module.vue"
),
meta: { title: "办不成事报表" },
children: [
{
path: "ImpossibleForm",
name: "ImpossibleForm",
component: () =>
import(
/* webpackChunkName: "reportForm" */ "@/views/dataAdmin/components/Impossible/index.vue"
),
meta: { title: "办不成事报表" },
},
],
},
{
path: "AIEfficiency",
name: "AIEfficiency",
......
......@@ -3,42 +3,51 @@
<div class="page">
<a-form-model :model="queryform" :label-col="labelCol" :wrapper-col="wrapperCol" layout="inline">
<a-form-model-item>
<a-select v-model="queryform.value" style="width: 200px" placeholder="选择产品">
<a-select-option value="jack">
Jack
<a-select v-model="queryform.productId" style="width: 200px" placeholder="选择产品">
<a-select-option :value="item.id" v-for="(item,index) in product" :key="index">
{{item.title}}
</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item>
<a-range-picker valueFormat="yyyy-MM-DD" v-model="queryform.value" style="width: 300px" />
<a-range-picker valueFormat="yyyy-MM-DD" v-model="time" style="width: 300px" :allowClear="false"/>
</a-form-model-item>
<a-form-model-item>
<a-button type="primary">
<a-button type="primary" @click="getList">
开始分析
</a-button>
</a-form-model-item>
</a-form-model>
<div class="main">
<a-table :columns="columns" :data-source="data" :scroll="{ y: 590 }">
<div class="mt20">
<a-table :columns="columns" :data-source="data" :scroll="{ y: 590 }" :pagination="false">
</a-table>
</div>
</div>
</template>
<script>
<script>
import {getEventCensus} from '@/api/dataActuary.js'
import moment from 'moment';
export default {
data() {
return {
queryform: {
value: null
},
productId: 1,
dateTimeStart:moment().format('yyyy-MM-DD'),
dateTimeEnd:moment().format('yyyy-MM-DD')
},
time:[moment().format('yyyy-MM-DD'),moment().format('yyyy-MM-DD')],
labelCol: {
span: 1
},
wrapperCol: {
span: 14
},
},
product:[{
title:'排队机',
id:1
}],
columns: [{
title: "序号",
width: "70px",
......@@ -47,27 +56,39 @@
},
{
title: "事件",
dataIndex: "title",
dataIndex: "eventName",
align: "center",
},
{
title: '事件ID',
dataIndex: 'address',
dataIndex: 'eventCode',
align: "center",
},
{
title: '事件数量(日均)',
dataIndex: 'address1',
dataIndex: 'dayAvg',
align: "center",
},
{
title: '事件平均使用时长(单次)',
dataIndex: 'address2',
dataIndex: 'takeTimeAvg',
align: "center",
}
],
data: []
data: [],
}
},
mounted() {
this.getList()
},
methods:{
getList() {
this.queryform.dateTimeStart = this.time ? this.time[0] : null
this.queryform.dateTimeStart = this.time ? this.time[1] : null
getEventCensus(this.queryform).then(res=>{
this.data = res.data.data
})
}
}
};
</script>
......
......@@ -3,17 +3,17 @@
<div class="page">
<a-form-model :model="queryform" :label-col="labelCol" :wrapper-col="wrapperCol" layout="inline">
<a-form-model-item>
<a-select v-model="queryform.value" style="width: 200px" placeholder="选择产品">
<a-select-option value="jack">
Jack
</a-select-option>
<a-select v-model="queryform.productId" style="width: 200px" placeholder="选择产品">
<a-select-option :value="item.id" v-for="(item,index) in product" :key="index">
{{item.title}}
</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item>
<a-range-picker valueFormat="yyyy-MM-DD" v-model="queryform.value" style="width: 300px" />
<a-range-picker valueFormat="yyyy-MM-DD" v-model="time" style="width: 300px" :allowClear="false"/>
</a-form-model-item>
<a-form-model-item>
<a-button type="primary">
<a-button type="primary" @click="getData">
开始分析
</a-button>
</a-form-model-item>
......@@ -23,11 +23,11 @@
<div>页面访问指标趋势</div>
<div class="txt-dv">
<div>
<div class="num">4058</div>
<div class="num">{{data ? data.accessSum : 0}}</div>
<div>页面累计访问次数</div>
</div>
<div>
<div class="num">4058</div>
<div class="num">{{data ? data.dayAccessAvg : 0}}</div>
<div>日均访问次数</div>
</div>
</div>
......@@ -37,11 +37,11 @@
<div class="page-box">
<div class="page-dv">
<div>人均访问深度</div>
<div class="page-num">4.00</div>
<div class="page-num">{{data ? data.depthAvg : 0}}</div>
</div>
<div class="page-dv">
<div>次均访问深度</div>
<div class="page-num">4.00</div>
<div class="page-num">{{data ? data.singleDepth : 0}}</div>
</div>
</div>
<div class="chatrs-dv">
......@@ -54,27 +54,49 @@
</template>
<script>
import * as echarts from 'echarts'
import * as echarts from 'echarts'
import {getAccessAnalyse} from '@/api/dataActuary.js'
import moment from 'moment';
export default {
data() {
return {
queryform: {
value: null
},
queryform: {
productId: 1,
dateTimeStart:moment().format('yyyy-MM-DD'),
dateTimeEnd:moment().format('yyyy-MM-DD')
},
time:[moment().format('yyyy-MM-DD'),moment().format('yyyy-MM-DD')],
product:[{
title:'排队机',
id:1
}],
labelCol: {
span: 1
},
wrapperCol: {
span: 14
},
},
data:null
}
},
mounted() {
this.initLine()
this.initBar()
mounted() {
this.getData()
},
methods: {
initBar() {
methods: {
getData() {
this.queryform.dateTimeStart = this.time ? this.time[0] : null
this.queryform.dateTimeStart = this.time ? this.time[1] : null
getAccessAnalyse(this.queryform).then(res=>{
this.data = res.data
let lineX = res.data.accessTrend.map(item=>item.accessDay)
let lineY = res.data.accessTrend.map(item=>item.accessCount)
let barX = res.data.pageAccessTop.map(item=>item.accessCount)
let barY = res.data.pageAccessTop.map(item=>item.pageName)
this.initLine(lineX,lineY)
this.initBar(barX,barY)
})
},
initBar(barX,barY) {
let chartDom = document.getElementById('pages')
let myChart = echarts.init(chartDom);
myChart.setOption({
......@@ -103,7 +125,7 @@
},
yAxis: {
type: 'category',
data: ['Brazil', 'Indonesia', 'USA', 'India', 'China', 'World'],
data: barY,
axisTick: {
show: false
}
......@@ -111,13 +133,13 @@
series: [{
name: '访问次数',
type: 'bar',
data: [18203, 23489, 29034, 104970, 131744, 630230],
data: barX,
barWidth:10
}
]
})
},
initLine() {
initLine(lineX,lineY) {
let chartDom = document.getElementById('number')
let myChart = echarts.init(chartDom);
myChart.setOption({
......@@ -132,7 +154,7 @@
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
data: lineX,
axisTick: {
show: false
}
......@@ -142,7 +164,7 @@
},
series: [{
name: '页面访问次数',
data: [150, 230, 224, 218, 135, 147, 260],
data: lineY,
type: 'line',
markLine: {
data: [{
......
......@@ -3,17 +3,17 @@
<div class="page">
<a-form-model :model="queryform" :label-col="labelCol" :wrapper-col="wrapperCol" layout="inline">
<a-form-model-item>
<a-select v-model="queryform.value" style="width: 200px" placeholder="选择产品">
<a-select-option value="jack">
Jack
<a-select v-model="queryform.productId" style="width: 200px" placeholder="选择产品">
<a-select-option :value="item.id" v-for="(item,index) in product" :key="index">
{{item.title}}
</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item>
<a-range-picker valueFormat="yyyy-MM-DD" v-model="queryform.value" style="width: 300px" />
<a-range-picker valueFormat="yyyy-MM-DD" v-model="time" style="width: 300px" :allowClear="false"/>
</a-form-model-item>
<a-form-model-item>
<a-button type="primary">
<a-button type="primary" @click="getData">
开始分析
</a-button>
</a-form-model-item>
......@@ -23,13 +23,22 @@
</template>
<script>
import * as echarts from 'echarts'
import * as echarts from 'echarts'
import {getWayAccessAnalyse} from '@/api/dataActuary.js'
import moment from 'moment';
export default {
data() {
return {
queryform: {
value: null
productId: 1,
dateTimeStart:moment().format('yyyy-MM-DD'),
dateTimeEnd:moment().format('yyyy-MM-DD')
},
time:[moment().format('yyyy-MM-DD'),moment().format('yyyy-MM-DD')],
product:[{
title:'排队机',
id:1
}],
labelCol: {
span: 1
},
......@@ -39,10 +48,30 @@
}
},
mounted() {
this.init()
this.getData()
},
methods: {
init() {
methods: {
getData() {
this.queryform.dateTimeStart = this.time ? this.time[0] : null
this.queryform.dateTimeStart = this.time ? this.time[1] : null
getWayAccessAnalyse(this.queryform).then(res=>{
let data = res.data.data.map(item=>({name:item.name}))
let links = res.data.links.map(item=>({
source:item.sourceName,
target:item.targetName,
value:item.value,
lineStyle:{
color:'source'
}
}))
this.init(data,links)
})
},
uniqueFunc(arr, uniId){
const res = new Map();
return arr.filter((item) => !res.has(item[uniId]) && res.set(item[uniId], 1));
},
init(data,links) {
let chartDom = document.getElementById('path')
let myChart = echarts.init(chartDom);
myChart.setOption({
......@@ -54,74 +83,8 @@
},
color:['#FFCAC4','#6D86DE','#409AFE','#4DB3EA','#07CF8C'],
nodeWidth:10,
data: [{
name: 'a'
},
{
name: 'b'
},
{
name: 'a1'
},
{
name: 'a2'
},
{
name: 'b1'
},
{
name: 'c'
}
],
links: [{
source: 'a',
target: 'a1',
value: 5,
lineStyle:{
color:'source'
}
},
{
source: 'a',
target: 'a2',
value: 3,
lineStyle:{
color:'source'
}
},
{
source: 'b',
target: 'b1',
value: 8,
lineStyle:{
color:'source'
}
},
{
source: 'a',
target: 'b1',
value: 3,
lineStyle:{
color:'source'
}
},
{
source: 'b1',
target: 'a1',
value: 1,
lineStyle:{
color:'source'
}
},
{
source: 'b1',
target: 'c',
value: 2,
lineStyle:{
color:'source'
}
}
]
data: data,
links: links
}
})
}
......
......@@ -2,29 +2,30 @@
<!-- 产品分析 -->
<div class="page">
<div class="img-dv">
<div id="queuing" @click="clickEvent"></div>
<img :src="BASE_URL + img" ref="img">
<div id="queuing"></div>
</div>
<div class="list-dv">
<a-form-model :model="queryform" :label-col="labelCol" :wrapper-col="wrapperCol" layout="inline">
<a-form-model-item>
<a-select v-model="queryform.value" style="width: 180px" placeholder="选择产品">
<a-select-option value="jack">
Jack
<a-select v-model="queryform.productId" style="width: 200px" placeholder="选择产品">
<a-select-option :value="item.id" v-for="(item,index) in product" :key="index">
{{item.title}}
</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item>
<a-range-picker valueFormat="yyyy-MM-DD" v-model="queryform.value" style="width: 300px" />
<a-range-picker valueFormat="yyyy-MM-DD" v-model="time" style="width: 300px" :allowClear="false" />
</a-form-model-item>
<a-form-model-item>
<a-select v-model="queryform.value" style="width: 390px" placeholder="选择产品">
<a-select-option value="jack">
Jack
<a-select v-model="queryform.pageCode" style="width: 410px">
<a-select-option :value="item.id" v-for="(item,index) in page" :key="index">
{{item.title}}
</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item>
<a-button type="primary">
<a-button type="primary" @click="getList">
开始分析
</a-button>
</a-form-model-item>
......@@ -35,7 +36,7 @@
<div>312321</div>
</div>
<div style="margin-bottom: 20px;">事件排名Top10</div>
<a-table :columns="columns" :data-source="data" :scroll="{ y: 590 }">
<a-table :columns="columns" :data-source="data" :scroll="{ y: 590 }" :pagination="false">
</a-table>
</div>
</div>
......@@ -44,12 +45,28 @@
<script>
import Heatmap from 'heatmap.js';
import moment from 'moment';
import {
getProductHotCensus
} from '@/api/dataActuary.js'
export default {
data() {
return {
queryform: {
value: null
productId: 1,
dateTimeStart: moment().format('yyyy-MM-DD'),
dateTimeEnd: moment().format('yyyy-MM-DD'),
pageCode: '/'
},
time: [moment().format('yyyy-MM-DD'), moment().format('yyyy-MM-DD')],
product: [{
title: '排队机',
id: 1
}],
page: [{
title: '首页',
id: '/'
}],
labelCol: {
span: 1
},
......@@ -64,43 +81,61 @@
},
{
title: "事件",
dataIndex: "title",
dataIndex: "businessName",
align: "center",
},
{
title: '点击次数',
dataIndex: 'address',
dataIndex: 'value',
align: "center",
},
{
title: '事件数量(日均)',
dataIndex: 'address1',
dataIndex: 'proportion',
align: "center",
}
],
data: [],
heatmapInstance: null,
dataPoint: []
dataPoint: [],
img: '',
BASE_URL: process.env.VUE_APP_API_BASE_URL + '/'
}
},
mounted() {
this.init('queuing')
},
methods: {
clickEvent(e) {
this.dataPoint.push({
x: e.layerX,
y: e.layerY,
value: 20
getList() {
this.queryform.dateTimeStart = this.time ? this.time[0] : null
this.queryform.dateTimeStart = this.time ? this.time[1] : null
getProductHotCensus(this.queryform).then(res => {
this.data = res.data.data
this.img = res.data.screenUrl
let imgSize = new Image();
imgSize.src = this.BASE_URL + this.img;
imgSize.onload = () => {
let w = this.$refs.img.width / imgSize.width
let h = this.$refs.img.height / imgSize.height
this.dataPoint = res.data.data.map(({
x,
y,
value
}) => ({
x: parseInt(x * w),
y: parseInt(y * h),
value
}))
let data = {
max: 10,
min: 0,
data: this.dataPoint
};
this.heatmapInstance.setData(data);
}
})
let data = {
max: 100,
min: 0,
data: this.dataPoint
};
this.heatmapInstance.setData(data);
},
init(el, dataPoint) {
init(el) {
let config = {
container: document.getElementById(el),
radius: 30,
......@@ -109,6 +144,7 @@
blur: .5
};
this.heatmapInstance = Heatmap.create(config);
this.getList()
}
}
};
......@@ -122,16 +158,20 @@
.img-dv {
width: 60%;
min-height: 100%;
display: flex;
justify-content: center;
align-items: center;
margin: 100px;
position: relative;
img {
width: 100%;
}
#queuing {
width: 740px;
height: 370px;
background-image: url('https://cdn.pixabay.com/photo/2023/03/22/20/16/muffin-7870491_640.jpg');
background-size: 100% 100%;
width: 100%;
height: 100%;
position: absolute !important;
top: 0;
left: 0;
z-index: 999;
}
}
......
import { deepClone } from "@/utils/js/common.js";
export default {
data() {
return {
defaultInfoForm: {},
modalInfo: {
confirmLoading: false,
visible: false,
title: '用户信息',
width: '30%',
},
}
},
props: {
sourceInfoForm: {
type: Object,
default: () => {
return {
// --------------申报人信息-----------------------
name: "张三",
Gender: "",
Age: "56",
Phone: "13080888888",
yuyuecishu: "12",
paiduicishu: "6",
guanlianyewu: "12",
haxizhi: "3sad54a5f4sda4da4sd4adasdqa1sda1g1d1ada4d4f1fgweqqwq01f4sa4dgds1eqw5e1c2c2vx",
qukuaigaodu: "24292496",
chuangjianshijian: "2022-04-25 18:22",
// --------------业务分析-----------------------
yewuming: '公安户籍类',
guanlianshixiang: [
{
shixiangmingcheng: '事项名称事项名称事项名称事项名称事项名称事项名称',
},
{
shixiangmingcheng: '事项名称事项名称事项名称事项名称事项名称事项名称',
},
{
shixiangmingcheng: '事项名称事项名称事项名称事项名称事项名称事项名称',
},
],
shoulicishu: "12546",
banjiecishu: "12348",
haopinglv: "99.99%",
// --------------工作人员-----------------------
workImgUrl: require('../../../../../assets/images/logo.png'),
workpeople: "刘明洋",
JobNo: "01",
department: '税务局',
PoliticalOutlook: '党员',
workPhone: '13080888888',
Starlevel: '5',
souliyewu: '12247877',
pingjiacishu: '1225454',
};
},
},
},
watch: {
sourceInfoForm: {
handler(newValue, oldValue) {
// console.log(newValue);
// console.log(oldValue);
this.defaultInfoForm = Object.assign({}, deepClone(newValue));
},
deep: true,
},
},
computed: {
},
created() {
setTimeout(() => {
this.defaultInfoForm = Object.assign({}, deepClone(this.sourceInfoForm));
// console.log(this.defaultInfoForm);
}, 0);
},
methods: {
modalClose() {
this.modalInfo.visible = false;
}
},
}
\ No newline at end of file
<template>
<div class="Container">
<div class="main">
<a-tabs v-model="tabsActive" @change="tabsChange" :forceRender="false">
<a-tab-pane
:key="item.path"
v-for="(item, index) of tabsList['children']"
:tab="item['meta']['title']"
>
</a-tab-pane>
</a-tabs>
<router-view style="padding: 0 1rem" />
</div>
</div>
</template>
<script>
import { getItemData } from "@/utils/js/common.js";
import common from "@/mixins/common";
export default {
name: "ImpossibleModule",
mixins: [common],
data() {
return {
tabsActive: undefined,
};
},
computed: {
tabsList() {
return getItemData(this.$router.options.routes, "name", "Impossible");
},
},
mounted() {
this.$nextTick(() => {
this.tabsActive = this.$route.path.substr(
this.$route.path.lastIndexOf("/") + 1
);
});
},
methods: {
tabsChange(val) {
this.$router.push({
path: `/home/dataManagement/Impossible/${val}`,
// query: { testoption: "test001" },
});
},
},
};
</script>
<style lang="less" scoped>
@headerH: 4.5rem;
.Container {
height: 100% !important;
// background: #fac;
background: #f5f5f5;
display: flex;
flex-direction: column;
.main {
// background: #afc;
background: #ffffff;
border-radius: 6px;
flex: 1;
overflow-y: auto;
overflow-x: hidden;
margin: 1.2rem 2rem;
}
&::before {
content: "";
display: block;
width: 100%;
height: @headerH;
background: rgb(59, 135, 255);
background: -moz-linear-gradient(
174deg,
rgba(59, 135, 255, 1) 24%,
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(59, 135, 255, 1) 24%,
rgba(108, 53, 247, 1) 85%
);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#3b87ff",endColorstr="#6c35f7",GradientType=1);
}
/deep/.ant-tabs-nav {
.ant-tabs-tab {
margin: 0 !important;
}
}
/deep/.ant-tabs-tab {
font-size: 1rem !important;
& + .ant-tabs-tab {
margin: 0 !important;
margin-left: 0.7rem !important;
}
}
}
</style>
......@@ -2,16 +2,16 @@
<div class="callRecord-Container">
<div class="header_box">
<div>
<a-button type="success" @click="exportTable">
<a-button :loading="btnLoading" type="success" @click="handleExportTable">
<span>{{ tableSelectedRows.length ? "导出" : "导出全部" }}</span>
</a-button>
<b>拨打次数:<i>233</i></b>
<b>拨打次数:<i>{{total}}</i></b>
</div>
<span>
<a-input style="width:250px;" v-model="searchName" placeholder="请输入标题或姓名关键字搜索">
<a-icon slot="prefix" type="search" />
</a-input>
<a-button type="primary">搜索</a-button>
<a-button type="primary" @click="getList">搜索</a-button>
</span>
</div>
<div class="main">
......@@ -19,7 +19,7 @@
selectedRowKeys: tableSelectedKeys,
onChange: onSelectChange,
}" :scroll="{ y: 590 }" :pagination="tablePagination" @change="pagTableChange" :loading="tableLoading"
:columns="tableHeaders" :dataSource="tableSourceData">
:columns="tableHeaders" :dataSource="tableSourceData" >
</a-table>
</div>
</div>
......@@ -27,7 +27,10 @@
<script>
import table from "@/mixins/table";
import {getSys12345} from "@/api/dataAdmin"
import {
export2Excel
} from "@/utils/js/exportExcel";
export default {
mixins: [table],
name: "callRecordForm",
......@@ -45,49 +48,55 @@ export default {
{
title: "微信号",
align: "center",
dataIndex: "微信号",
dataIndex: "nickname",
customRender: (text, record, index) => `${record.nickname || '--'}`
},
{
title: "电话号码",
align: "center",
dataIndex: "电话号码",
dataIndex: "phone",
customRender: (text, record, index) => `${record.phone || '--'}`
},
{
title: "拨打位置",
align: "center",
dataIndex: "拨打位置",
dataIndex: "address",
customRender: (text, record, index) => `${record.address || '--'}`
},
{
title: "拨打时间",
align: "center",
dataIndex: "拨打时间",
dataIndex: "create_time",
customRender: (text, record, index) => `${record.create_time || '--'}`
},
],
btnLoading: false,
tableSelectedKeys: [],
tableSelectedRows: [],
BegindAndEndTime: [],
searchName: undefined,
visible: false,
total:0
};
},
components: {
},
mounted() {
this.setMoment();
for (let key = 0; key < 20; key++) {
this.tableSourceData.push({
id: `00${key + 1}`,
微信号: `liudefa${key + 1}`,
电话号码: `1388888888888`,
拨打位置: `四川省成都市武侯区天益街1号理想中心3栋170${key + 1}号`,
拨打时间: `2022-09-26 13:30:00`
});
}
this.getList();
},
methods: {
getList(){
getSys12345({
phone:this.searchName
}).then(res=>{
this.tableSourceData = res.data.data
this.total = res.data.total
})
},
rangePickerChange(val) {
console.log(val);
},
QueueState(type) {
switch (type) {
case 0:
......@@ -98,7 +107,61 @@ export default {
return "type0";
}
},
// 选中
onSelectChange(keys, rows) {
this.tableSelectedKeys = keys;
const res = new Map();
this.tableSelectedRows = [...this.tableSelectedRows, ...rows]
.filter((v) => {
return !res.has(v.id) && res.set(v.id, 1);
})
.filter((v) => {
return this.tableSelectedKeys.some((val) => v.id == val);
});
},
// 导出
async handleExportTable() {
this.btnLoading = true;
let obj = {
1: "本地打印",
2: "在线提交",
};
let data = [];
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
// 深度克隆避免影响页面表格展示
data = this.$_.cloneDeep(this.tableSelectedRows);
data.forEach((item) => {
Object.keys(obj).forEach((keys) => {
if (item.type == keys) {
item.type = obj[keys];
}
});
});
} else {
let datas = this.$_.cloneDeep(
await getSys12345({
page: 1,
size: -1
})
);
data = datas.data.data
if (!data.length) return;
for (let item of data) {
Object.keys(obj).forEach((key) => {
if (item.type == key) {
item.type = obj[key];
}
});
}
}
export2Excel(
this.tHeader,
this.filterVal,
data,
"填单记录报表" + this.$moment().format("YYYYMMDDHHmmss")
);
this.btnLoading = false;
},
showDrawer() {
this.visible = true;
},
......
......@@ -11,31 +11,32 @@
</div>
<span>
<a-space>
<a-checkbox @change="changeReply">
<a-checkbox @change="changeReply" v-model="isReply">
只看未回复
</a-checkbox>
<a-select placeholder="全部类型" @change="changeType">
<a-select placeholder="全部类型" v-model="nowType" @change="changeType">
<a-select-option value="1"> 部门建议 </a-select-option>
<a-select-option value="2"> 办事建议 </a-select-option>
<a-select-option value="3"> 网站建议 </a-select-option>
<a-select-option value="4"> 我要就错 </a-select-option>
<a-select-option value="5"> 我要投诉 </a-select-option>
</a-select>
<a-select placeholder="全部来源" @change="changeDevice">
<a-select placeholder="全部来源" v-model="nowDevice" @change="changeDevice">
<a-select-option value="1"> 评价系统 </a-select-option>
<a-select-option value="2"> 导视系统 </a-select-option>
<a-select-option value="3"> 自助服务系统 </a-select-option>
<a-select-option value="4"> 微官网 </a-select-option>
<a-select-option value="5"> 数字填单系统 </a-select-option>
</a-select>
<a-range-picker style="width:250px;" format="YYYY年MM月DD日" class="range_picker_style"
@change="rangePickerChange">
<a-range-picker style="width:250px;" format="YYYY-MM-DD" class="range_picker_style"
@change="rangePickerChange" v-model="timeList">
</a-range-picker>
<a-input style="width:250px;" v-model="searchName" placeholder="请输入标题或姓名关键字搜索">
<a-icon slot="prefix" type="search" />
</a-input>
<a-button type="primary" @click="togetWLLZCount">搜索</a-button>
<a-button @click="resetting">重置</a-button>
</a-space>
</span>
</div>
......@@ -153,8 +154,8 @@ export default {
visible: false,
nowSite:null,//当前站点
isReply:false,//是否回复
nowType:null,//当前类型
nowDevice:null,// 来源
nowType:undefined,//当前类型
nowDevice:undefined,// 来源
timeList:[],// 时间
JYCount:0,//建议次数
HFCount:0,//回复次数
......@@ -166,7 +167,7 @@ export default {
mounted() {
this.setMoment();
// 设置默认时间为今天
this.timeList=[this.$moment(new Date()).format("YYYY-MM-DD"),this.$moment(new Date()).format("YYYY-MM-DD")]
this.timeList=[this.$moment().format("YYYY-MM-DD"),this.$moment().format("YYYY-MM-DD")]
this.nowSite = localStorage.getItem('siteId');
this.togetWLLZCount()
},
......@@ -176,6 +177,15 @@ export default {
}
},
methods: {
//重置
resetting() {
this.timeList=[this.$moment().format("YYYY-MM-DD"),this.$moment().format("YYYY-MM-DD")]
this.nowType = undefined
this.nowDevice = undefined
this.searchName = undefined
this.isReply = false
this.togetWLLZCount()
},
// 重写导出
toexportTable() {
let tableData = [];
......
......@@ -353,7 +353,7 @@ export default {
},
// 获取列表数据
async getCallQueListArr(search = {}) {
let res = getCallQueList({
let res = await getCallQueList({
page: this.tablePagination.current,
size: this.tablePagination.pageSize,
...this.searchForm,
......@@ -363,6 +363,7 @@ export default {
let { data, total } = res.data;
this.tableList = data;
this.tablePagination.total = total;
console.log(this.tableList)
return data;
}
},
......
......@@ -4,6 +4,7 @@
<script>
import { deepClone } from "@/utils/js/common.js";
import lodash from "lodash";
import{getStatisticAges} from '@/api/dataAdmin.js'
export default {
props: {
info: {
......@@ -40,19 +41,16 @@ export default {
default: () => {},
},
},
mounted() {
this._initEcharts();
async mounted() {
let {data} = await getStatisticAges()
let label = data.map(item=> item.age_area)
let value = data.map(item=> item.nums)
this._initEcharts(label,value);
},
methods: {
_initEcharts() {
const NAME = [];
const VALUE = [];
_initEcharts(label,value) {
const myChart = this.$echarts.init(this.$el);
const echarts = this.$echarts;
this.info.forEach((item) => {
NAME.push(item.name);
VALUE.push(item.value);
});
let option = {
legend: {
data: ["预约次数"],
......@@ -72,7 +70,10 @@ export default {
},
xAxis: {
type: "category",
data: NAME,
data: label,
axisTick:{
show:false
}
},
yAxis: {
type: "value",
......@@ -85,7 +86,7 @@ export default {
},
series: [
{
data: VALUE,
data: value,
name: "预约次数",
barWidth: "50%",
type: "bar",
......
......@@ -8,58 +8,18 @@ export default {
props: {
info: {
type: Array,
default: () => [
{
value: 140,
name: "08:00~09:00",
},
{
value: 150,
name: "09:00~10:00",
},
{
value: 160,
name: "10:00~11:00",
},
{
value: 170,
name: "11:00~12:00",
},
{
value: 180,
name: "12:00~13:00",
},
{
value: 190,
name: "13:00~14:00",
},
{
value: 200,
name: "14:00~15:00",
},
{
value: 210,
name: "15:00~16:00",
},
{
value: 220,
name: "16:00~17:00",
},
{
value: 230,
name: "18:00~19:00",
},
{
value: 240,
name: "19:00~20:00",
},
],
default: () => [],
},
option: {
type: Object,
default: () => {},
},
},
watch:{
info(){
this._initEcharts();
}
},
mounted() {
this._initEcharts();
},
......@@ -70,8 +30,8 @@ export default {
const myChart = this.$echarts.init(this.$el);
const echarts = this.$echarts;
this.info.forEach((item) => {
NAME.push(item.name);
VALUE.push(item.value);
NAME.push(item.datetime);
VALUE.push(item.count);
});
let option = {
legend: {
......
......@@ -4,6 +4,7 @@
<script>
import { deepClone } from "@/utils/js/common.js";
import lodash from "lodash";
import{getStatisticSexual} from '@/api/dataAdmin.js'
export default {
props: {
info: {
......@@ -24,11 +25,13 @@ export default {
default: () => {},
},
},
mounted() {
this._initEcharts();
async mounted() {
let {data} = await getStatisticSexual()
let value = data.map(({idcard_Sex,nums})=>({name:idcard_Sex,value:nums}))
this._initEcharts(value);
},
methods: {
_initEcharts() {
_initEcharts(value) {
const myChart = this.$echarts.init(this.$el);
const echarts = this.$echarts;
......@@ -43,7 +46,6 @@ export default {
},
legend: {
data: this.info.map((item) => item.name),
bottom: "5%",
right: "center",
itemWidth: 13,
......@@ -84,19 +86,13 @@ export default {
rich_green: {
color: "#50CCCB",
},
},
formatter: function (params) {
if (params.name === "女士") {
return (
params.name + "\n\n" + `{rich_blue|${params.percent}%}`
);
} else if (params.name === "男士") {
return (
params.name + "\n\n" + `{rich_green|${params.percent}%}`
);
}
},
}
},
label: {
normal: {
formatter: '{d}%' //自定义显示格式(b:name, c:value, d:百分比)
}
},
labelLine: {
length: 10,
length2: 60,
......@@ -110,7 +106,7 @@ export default {
},
},
},
data: this.info,
data: value,
},
],
};
......
......@@ -29,7 +29,7 @@ export default {
const echarts = this.$echarts;
let option = {
title: {
text: `{c|${this.info.name}} \n{a|` + this.info.value + "%" + "}",
text: `{c|${this.info.starttime}~${this.info.endtime}} \n{a|` + this.info.success_rate * 100 + "%" + "}",
x: "center",
y: "center",
textStyle: {
......@@ -62,7 +62,7 @@ export default {
},
data: [
{
value: this.info.value,
value: this.info.success_rate * 100,
name: "",
itemStyle: {
normal: {
......@@ -82,7 +82,7 @@ export default {
},
},
{
value: 100 - this.info.value,
value: 100 - (this.info.success_rate * 100),
name: "",
label: {
normal: {
......
......@@ -4,54 +4,51 @@
<Head :title="'预约热度排名'">
<template slot="operation">
<a-range-picker
format="YYYY年MM月DD日"
valueFormat="YYYY-MM-DD"
class="range_picker_style"
@change="rangePickerChange"
v-model="BegindAndEndTime"
v-if="day == 5"
>
</a-range-picker>
<a-select default-value="001">
<!-- <a-select-option
v-for="(item, index) of selectOptions"
:key="index"
:value="item.value"
>
{{ item.label }}
</a-select-option> -->
<a-select-option value="001"> 近3天 </a-select-option>
<a-select-option value="002"> 近7天 </a-select-option>
<a-select v-model="day">
<a-select-option value="0"> 今天 </a-select-option>
<a-select-option value="1"> 近7天 </a-select-option>
<a-select-option value="2"> 近30天 </a-select-option>
<a-select-option value="3"> 近90天 </a-select-option>
<a-select-option value="4"> 近180天 </a-select-option>
<a-select-option value="5"> 自定义 </a-select-option>
</a-select>
<a-button type="primary">搜索</a-button>
<a-button type="primary" @click="getData">搜索</a-button>
</template>
</Head>
<div class="heat_box">
<div class="heat_box" v-if="data">
<ul class="heat_left">
<li class="list">
<span>排名</span>
<i>部门名称</i>
<b>预约热度</b>
</li>
<li class="list" v-for="item of 5">
<span>NO.{{ item }}</span>
<i>区发改局</i>
<li class="list" v-for="item,index in data.section" :key="index">
<span>NO.{{ index+1 }}</span>
<i>{{item.deptname}}</i>
<b>
<a-progress :percent="90" :show-info="false" status="active"
<a-progress :percent="item.count" :show-info="false" status="active"
/></b>
</li>
</ul>
<ul class="heat_right">
<li class="list">
<span>排名</span>
<i>部门名称</i>
<i>事项名称</i>
<b>预约热度</b>
</li>
<li class="list" v-for="item of 5">
<span>NO.{{ item }}</span>
<i>区发改局</i>
<li class="list" v-for="item,index in data.matter" :key="index">
<span>NO.{{ index+1 }}</span>
<i>{{item.mattername}}</i>
<b>
<a-progress :percent="90" :show-info="false" status="active"
<a-progress :percent="item.count" :show-info="false" status="active"
/></b>
</li>
</ul>
......@@ -62,20 +59,37 @@
<script>
import Head from "./components/header.vue";
import {getOrderRanking} from '@/api/dataAdmin.js'
export default {
name: "PortalAdminVueHeatRanking",
data() {
return {
day:'0',
BegindAndEndTime: [],
data:null
};
},
components: {
Head,
},
mounted() {},
watch:{
day(val){
if (val != 5) this.BegindAndEndTime = []
}
},
mounted() {
this.getData()
},
methods: {
getData(){
getOrderRanking({
selected:this.day == 5 ? null : this.day,
time:this.BegindAndEndTime
}).then(res=>{
this.data = res.data
})
},
rangePickerChange(val) {
console.log(val);
},
......
......@@ -4,30 +4,27 @@
<Head :title="'预约趋势研究'">
<template slot="operation">
<a-range-picker
format="YYYY年MM月DD日"
valueFormat="YYYY-MM-DD"
class="range_picker_style"
@change="rangePickerChange"
v-model="BegindAndEndTime"
v-if="day == 5"
>
</a-range-picker>
<a-select default-value="001">
<!-- <a-select-option
v-for="(item, index) of selectOptions"
:key="index"
:value="item.value"
>
{{ item.label }}
</a-select-option> -->
<a-select-option value="001"> 近3天 </a-select-option>
<a-select-option value="002"> 近7天 </a-select-option>
<a-select v-model="day">
<a-select-option value="0"> 今天 </a-select-option>
<a-select-option value="1"> 近7天 </a-select-option>
<a-select-option value="2"> 近30天 </a-select-option>
<a-select-option value="3"> 近90天 </a-select-option>
<a-select-option value="4"> 近180天 </a-select-option>
<a-select-option value="5"> 自定义 </a-select-option>
</a-select>
<a-button type="primary">搜索</a-button>
<a-button type="primary" @click="getData">搜索</a-button>
</template>
</Head>
<div class="echarts">
<Brokenline />
<Brokenline :info="chartsData" v-if="chartsData"/>
</div>
</div>
<div class="fx">
......@@ -39,11 +36,11 @@
:pagination="false"
:columns="tableHeaders"
:dataSource="tableSourceData"
:scroll="{ y: 590 }"
>
</a-table>
<p class="updateTime">
<i class="fa fa-info-circle"></i>数据更新时间:2021-07-12
18:00:00,受数据波动影响,可能会有延迟。
<i class="fa fa-info-circle"></i>数据更新时间:{{date}},受数据波动影响,可能会有延迟。
</p>
</div>
</div>
......@@ -53,22 +50,18 @@
<script>
import Head from "./components/header.vue";
import Brokenline from "./components/line.vue";
import {getTrend} from '@/api/dataAdmin.js'
import moment from 'moment'
export default {
name: "PortalAdminVueMakeDataAnalyse",
data() {
return {
day:'0',
date:'',
BegindAndEndTime: [],
chartsData:null,
tableSourceData: [],
tableHeaders: [
{
title: "序号",
dataIndex: "index",
width: "60px",
key: "index",
align: "center",
customRender: (text, record, index) => `${index + 1}`,
},
{
title: "研究对象",
align: "center",
......@@ -106,22 +99,33 @@ export default {
Head,
Brokenline,
},
watch:{
day(val){
if (val != 5) this.BegindAndEndTime = []
}
},
mounted() {
for (let key = 0; key < 2; key++) {
this.tableSourceData.push({
id: `00${key + 1}`,
研究对象: `预约次数${key + 1}`,
预约总量: `56 ${key + 1}`,
开放预约天数: `1 ${key + 1}`,
预约日均值: `56 ${key + 1}`,
整体同比: `23% ${key + 1}`,
整体环比: `18% ${key + 1}`,
});
}
this.date = moment().format('yyyy-MM-DD hh:mm:ss')
this.getData()
},
methods: {
getData(){
getTrend({
selected:this.day == 5 ? null : this.day,
time:this.BegindAndEndTime
}).then(res=>{
this.chartsData = res.data.list
this.tableSourceData.push({
研究对象: `预约次数`,
预约总量: res.data.orderAll,
开放预约天数: res.data.openday,
预约日均值: res.data.prev_num,
整体同比: res.data.tbi,
整体环比: res.data.hbi,
});
})
},
rangePickerChange(val) {
console.log(val);
},
......@@ -141,7 +145,7 @@ export default {
.table_box {
padding: 15px;
.updateTime {
margin: 10px 0;
margin: 15px 0;
i {
margin: 0 5px;
-webkit-transform: rotate(180deg);
......
......@@ -38,7 +38,7 @@
</li>
</template>
</ul>
<p class="bottom">服务类数据分析<a-icon type="swap-right" /></p>
<p class="bottom" @click="handleCkeck('/home/dataManagement/serviceDataAnalyse/makeTrendResearch')">服务类数据分析<a-icon type="swap-right" /></p>
</li>
</ul>
......
......@@ -937,7 +937,7 @@
"@babel/types" "^7.4.4"
"esutils" "^2.0.2"
"@babel/runtime@^7.12.13", "@babel/runtime@^7.8.4":
"@babel/runtime@^7.12.13", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4":
"integrity" "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ=="
"resolved" "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.7.tgz"
"version" "7.20.7"
......@@ -990,6 +990,51 @@
dependencies:
"@hapi/hoek" "^9.0.0"
"@jiaminghi/bezier-curve@*":
"integrity" "sha512-u9xJPOEl6Dri2E9FfmJoGxYQY7vYJkURNX04Vj64tdi535tPrpkuf9Sm0lNr3QTKdHQh0DdNRsaa62FLQNQEEw=="
"resolved" "https://registry.npmjs.org/@jiaminghi/bezier-curve/-/bezier-curve-0.0.9.tgz"
"version" "0.0.9"
dependencies:
"@babel/runtime" "^7.5.5"
"@jiaminghi/c-render@^0.4.3":
"integrity" "sha512-FJfzj5hGj7MLqqqI2D7vEzHKbQ1Ynnn7PJKgzsjXaZpJzTqs2Yw5OSeZnm6l7Qj7jyPAP53lFvEQNH4o4j6s+Q=="
"resolved" "https://registry.npmjs.org/@jiaminghi/c-render/-/c-render-0.4.3.tgz"
"version" "0.4.3"
dependencies:
"@babel/runtime" "^7.5.5"
"@jiaminghi/bezier-curve" "*"
"@jiaminghi/color" "*"
"@jiaminghi/transition" "*"
"@jiaminghi/charts@*":
"integrity" "sha512-K+HXaOOeWG9OOY1VG6M4mBreeeIAPhb9X+khG651AbnwEwL6G2UtcAQ8GWCq6GzhczcLwwhIhuaHqRygwHC0sA=="
"resolved" "https://registry.npmjs.org/@jiaminghi/charts/-/charts-0.2.18.tgz"
"version" "0.2.18"
dependencies:
"@babel/runtime" "^7.5.5"
"@jiaminghi/c-render" "^0.4.3"
"@jiaminghi/color@*":
"integrity" "sha512-ZY3hdorgODk4OSTbxyXBPxAxHPIVf9rPlKJyK1C1db46a50J0reFKpAvfZG8zMG3lvM60IR7Qawgcu4ZDO3+Hg=="
"resolved" "https://registry.npmjs.org/@jiaminghi/color/-/color-1.1.3.tgz"
"version" "1.1.3"
"@jiaminghi/data-view@^2.10.0":
"integrity" "sha512-Cud2MTiMcqc5k2KWabR/svuVQmXHANqURo+yj40370/LdI/gyUJ6LG203hWXEnT1nMCeiv/SLVmxv3PXLScCeA=="
"resolved" "https://registry.npmjs.org/@jiaminghi/data-view/-/data-view-2.10.0.tgz"
"version" "2.10.0"
dependencies:
"@babel/runtime" "^7.5.5"
"@jiaminghi/charts" "*"
"@jiaminghi/transition@*":
"integrity" "sha512-owBggipoHMikDHHDW5Gc7RZYlVuvxHADiU4bxfjBVkHDAmmck+fCkm46n2JzC3j33hWvP9nSCAeh37t6stgWeg=="
"resolved" "https://registry.npmjs.org/@jiaminghi/transition/-/transition-1.1.11.tgz"
"version" "1.1.11"
dependencies:
"@babel/runtime" "^7.5.5"
"@jridgewell/gen-mapping@^0.1.0":
"integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w=="
"resolved" "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz"
......
-- ----------------------------
-- 页面事件记录表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_page_event`;
CREATE TABLE mortals_xhx_page_event(
`id` bigint(20) AUTO_INCREMENT COMMENT '序号,主键,自增长',
`deviceNum` varchar(256) COMMENT '设备编码',
`productId` bigint(20) COMMENT '产品id',
`productName` varchar(256) COMMENT '产品名称',
`businessCode` varchar(256) COMMENT '业务场景编码',
`businessName` varchar(256) COMMENT '业务场景名称',
`eventCode` varchar(256) COMMENT '事件编码',
`eventName` varchar(256) COMMENT '事件名称',
`takeTime` int(8) COMMENT '事件耗时(单位毫秒)',
`pageCode` varchar(256) COMMENT '页面编码(页面路由)',
`pageName` varchar(256) COMMENT '页面名称',
`coordinate` varchar(128) COMMENT '事件坐标(x,y)',
`createUserId` bigint(20) COMMENT '创建用户',
`createTime` datetime COMMENT '创建时间',
`updateUserId` bigint(20) COMMENT '更新用户',
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='页面事件记录';
-- ----------------------------
-- 页面路径记录表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_page_route`;
CREATE TABLE mortals_xhx_page_route(
`id` bigint(20) AUTO_INCREMENT COMMENT '序号,主键,自增长',
`deviceNum` varchar(256) COMMENT '设备编码',
`productId` bigint(20) COMMENT '产品id',
`productName` varchar(256) COMMENT '产品名称',
`sourceCode` varchar(256) COMMENT '开始页面编码(路由)',
`sourceName` varchar(256) COMMENT '开始页面名称',
`targetCode` varchar(256) COMMENT '目标页面编码(路由)',
`targetName` varchar(256) COMMENT '目标页面名称',
`createUserId` bigint(20) COMMENT '创建用户',
`createTime` datetime COMMENT '创建时间',
`updateUserId` bigint(20) COMMENT '更新用户',
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='页面路径记录';
-- ----------------------------
-- 产品页面配置表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_page_info`;
CREATE TABLE mortals_xhx_page_info(
`id` bigint(20) AUTO_INCREMENT COMMENT '序号,主键,自增长',
`deviceNum` varchar(256) COMMENT '设备编码',
`productId` bigint(20) COMMENT '产品id',
`productName` varchar(256) COMMENT '产品名称',
`pageCode` varchar(256) COMMENT '页面编码(页面路由)',
`pageName` varchar(256) COMMENT '页面名称',
`screenUrl` varchar(256) COMMENT '页面截图地址',
`createUserId` bigint(20) COMMENT '创建用户',
`createTime` datetime COMMENT '创建时间',
`updateUserId` bigint(20) COMMENT '更新用户',
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品页面配置';
-- ----------------------------
-- 产品页面访问记录表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_page_access`;
CREATE TABLE mortals_xhx_page_access(
`id` bigint(20) AUTO_INCREMENT COMMENT '序号,主键,自增长',
`deviceNum` varchar(256) COMMENT '设备编码',
`productId` bigint(20) COMMENT '产品id',
`productName` varchar(256) COMMENT '产品名称',
`firstCode` varchar(256) COMMENT '页面编码(页面路由)',
`firstName` varchar(256) COMMENT '页面名称',
`secondCode` varchar(256) COMMENT '页面编码(页面路由)',
`secondName` varchar(256) COMMENT '页面名称',
`thirdCode` varchar(256) COMMENT '页面编码(页面路由)',
`thirdName` varchar(256) COMMENT '页面名称',
`fourthCode` varchar(256) COMMENT '页面编码(页面路由)',
`fourthName` varchar(256) COMMENT '页面名称',
`accessContent` text COMMENT '完整路径',
`pageDepth` int(8) DEFAULT '0' COMMENT '页面深度',
`createUserId` bigint(20) COMMENT '创建用户',
`createTime` datetime COMMENT '创建时间',
`updateUserId` bigint(20) COMMENT '更新用户',
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品页面访问记录';
-- ----------------------------
-- 产品页面配置表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_page_access_depth`;
CREATE TABLE mortals_xhx_page_access_depth(
`id` bigint(20) AUTO_INCREMENT COMMENT '序号,主键,自增长',
`deviceNum` varchar(256) COMMENT '设备编码',
`productId` bigint(20) COMMENT '产品id',
`productName` varchar(256) COMMENT '产品名称',
`pageCode` varchar(256) COMMENT '页面编码(页面路由)',
`pageName` varchar(256) COMMENT '页面名称',
`depthValue` int(8) COMMENT '本次访问深度',
`createUserId` bigint(20) COMMENT '创建用户',
`createTime` datetime COMMENT '创建时间',
`updateUserId` bigint(20) COMMENT '更新用户',
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品页面配置';
This diff is collapsed.
......@@ -2,6 +2,8 @@ package com.mortals.xhx.module.page.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.page.model.PageAccessEntity;
import com.mortals.xhx.module.page.model.pdu.PageCensusPdu;
import java.util.List;
/**
* 产品页面配置Dao
......@@ -13,5 +15,10 @@ import java.util.List;
public interface PageAccessDao extends ICRUDDao<PageAccessEntity,Long>{
/**
* 信息流分析
* @param pdu
* @return
*/
List<PageAccessEntity> getInformationFlow(PageCensusPdu pdu);
}
......@@ -2,6 +2,9 @@ package com.mortals.xhx.module.page.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.page.model.PageAccessDepthEntity;
import com.mortals.xhx.module.page.model.pdu.PageCensusPdu;
import com.mortals.xhx.module.page.model.vo.AccessTrendCensusVo;
import java.util.List;
/**
* 产品页面配置Dao
......@@ -13,5 +16,10 @@ import java.util.List;
public interface PageAccessDepthDao extends ICRUDDao<PageAccessDepthEntity,Long>{
/**
* 人均访问深度
* @param pdu
* @return
*/
List<AccessTrendCensusVo> getDepthAvg(PageCensusPdu pdu);
}
......@@ -2,6 +2,12 @@ package com.mortals.xhx.module.page.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.page.model.PageEventEntity;
import com.mortals.xhx.module.page.model.pdu.PageCensusPdu;
import com.mortals.xhx.module.page.model.vo.AccessTrendCensusVo;
import com.mortals.xhx.module.page.model.vo.PageEventCensusVo;
import com.mortals.xhx.module.page.model.vo.ProductHotCensusVo;
import com.mortals.xhx.module.page.model.vo.UsageCensusVo;
import java.util.List;
/**
* 页面事件记录Dao
......@@ -13,5 +19,39 @@ import java.util.List;
public interface PageEventDao extends ICRUDDao<PageEventEntity,Long>{
/**
* 事件分析
* @param pdu
* @return
*/
List<PageEventCensusVo> getPageEventCensus(PageCensusPdu pdu);
/**
* 产品热力图
* @param pdu
* @return
*/
List<ProductHotCensusVo> getProductHotCensus(PageCensusPdu pdu);
/**
* 页面访问指标趋势
* @param pdu
* @return
*/
List<AccessTrendCensusVo> getPageAccessTrend(PageCensusPdu pdu);
/**
* 页面访问次数TOP10
* @param pdu
* @return
*/
List<AccessTrendCensusVo> getPageAccessTop(PageCensusPdu pdu);
/**
* 使用习惯
* @param pdu
* @return
*/
List<UsageCensusVo> getUsageCensus(PageCensusPdu pdu);
}
......@@ -2,7 +2,12 @@ package com.mortals.xhx.module.page.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.page.model.PageRouteEntity;
import com.mortals.xhx.module.page.model.pdu.PageCensusPdu;
import com.mortals.xhx.module.page.model.vo.PageWayCensusVo;
import java.util.List;
import java.util.Map;
/**
* 页面路径记录Dao
* 页面路径记录 DAO接口
......@@ -13,5 +18,17 @@ import java.util.List;
public interface PageRouteDao extends ICRUDDao<PageRouteEntity,Long>{
/**
* 路径图
* @param pdu
* @return
*/
List<PageWayCensusVo> getPageWayCensus(PageCensusPdu pdu);
/**
* 获取路径图页面名称
* @param pdu
* @return
*/
List<Map<String,Object>> getPageWayCode(PageCensusPdu pdu);
}
package com.mortals.xhx.module.page.dao.ibatis;
import com.mortals.xhx.module.page.model.pdu.PageCensusPdu;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.page.dao.PageAccessDao;
import com.mortals.xhx.module.page.model.PageAccessEntity;
......@@ -17,5 +18,8 @@ import java.util.List;
public class PageAccessDaoImpl extends BaseCRUDDaoMybatis<PageAccessEntity,Long> implements PageAccessDao {
@Override
public List<PageAccessEntity> getInformationFlow(PageCensusPdu pdu) {
return this.getSqlSession().selectList(this.getSqlId("getInformationFlow"), pdu);
}
}
package com.mortals.xhx.module.page.dao.ibatis;
import com.mortals.xhx.module.page.model.pdu.PageCensusPdu;
import com.mortals.xhx.module.page.model.vo.AccessTrendCensusVo;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.page.dao.PageAccessDepthDao;
import com.mortals.xhx.module.page.model.PageAccessDepthEntity;
......@@ -16,6 +18,9 @@ import java.util.List;
@Repository("pageAccessDepthDao")
public class PageAccessDepthDaoImpl extends BaseCRUDDaoMybatis<PageAccessDepthEntity,Long> implements PageAccessDepthDao {
@Override
public List<AccessTrendCensusVo> getDepthAvg(PageCensusPdu pdu) {
return this.getSqlSession().selectList(this.getSqlId("getDepthAvg"), pdu);
}
}
package com.mortals.xhx.module.page.dao.ibatis;
import com.mortals.xhx.module.page.model.pdu.PageCensusPdu;
import com.mortals.xhx.module.page.model.vo.AccessTrendCensusVo;
import com.mortals.xhx.module.page.model.vo.PageEventCensusVo;
import com.mortals.xhx.module.page.model.vo.ProductHotCensusVo;
import com.mortals.xhx.module.page.model.vo.UsageCensusVo;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.page.dao.PageEventDao;
import com.mortals.xhx.module.page.model.PageEventEntity;
......@@ -17,5 +22,30 @@ import java.util.List;
public class PageEventDaoImpl extends BaseCRUDDaoMybatis<PageEventEntity,Long> implements PageEventDao {
@Override
public List<PageEventCensusVo> getPageEventCensus(PageCensusPdu pdu) {
return this.getSqlSession().selectList(this.getSqlId("getPageEventCensus"), pdu);
}
@Override
public List<ProductHotCensusVo> getProductHotCensus(PageCensusPdu pdu) {
return this.getSqlSession().selectList(this.getSqlId("getProductHotCensus"), pdu);
}
@Override
public List<AccessTrendCensusVo> getPageAccessTrend(PageCensusPdu pdu) {
return this.getSqlSession().selectList(this.getSqlId("getPageAccessTrend"), pdu);
}
@Override
public List<AccessTrendCensusVo> getPageAccessTop(PageCensusPdu pdu) {
return this.getSqlSession().selectList(this.getSqlId("getPageAccessTop"), pdu);
}
@Override
public List<UsageCensusVo> getUsageCensus(PageCensusPdu pdu) {
return this.getSqlSession().selectList(this.getSqlId("getUsageCensus"), pdu);
}
}
package com.mortals.xhx.module.page.dao.ibatis;
import com.mortals.xhx.module.page.model.pdu.PageCensusPdu;
import com.mortals.xhx.module.page.model.vo.PageWayCensusVo;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.page.dao.PageRouteDao;
import com.mortals.xhx.module.page.model.PageRouteEntity;
import java.util.Date;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import java.util.List;
import java.util.Map;
/**
* 页面路径记录DaoImpl DAO接口
*
......@@ -17,5 +21,13 @@ import java.util.List;
public class PageRouteDaoImpl extends BaseCRUDDaoMybatis<PageRouteEntity,Long> implements PageRouteDao {
@Override
public List<PageWayCensusVo> getPageWayCensus(PageCensusPdu pdu) {
return this.getSqlSession().selectList(this.getSqlId("getPageWayCensus"), pdu);
}
@Override
public List<Map<String, Object>> getPageWayCode(PageCensusPdu pdu) {
return this.getSqlSession().selectList(this.getSqlId("getPageWayCode"), pdu);
}
}
......@@ -10,12 +10,16 @@ import com.mortals.xhx.module.page.model.vo.PageAccessDepthVo;
* 产品页面配置实体对象
*
* @author zxfei
* @date 2023-04-10
* @date 2023-04-12
*/
public class PageAccessDepthEntity extends PageAccessDepthVo {
private static final long serialVersionUID = 1L;
/**
* 设备编码
*/
private String deviceNum;
/**
* 产品id
*/
......@@ -41,6 +45,20 @@ public class PageAccessDepthEntity extends PageAccessDepthVo {
public PageAccessDepthEntity(){}
/**
* 获取 设备编码
* @return String
*/
public String getDeviceNum(){
return deviceNum;
}
/**
* 设置 设备编码
* @param deviceNum
*/
public void setDeviceNum(String deviceNum){
this.deviceNum = deviceNum;
}
/**
* 获取 产品id
* @return Long
*/
......@@ -98,7 +116,7 @@ public class PageAccessDepthEntity extends PageAccessDepthVo {
}
/**
* 获取 本次访问深度
* @return String
* @return Integer
*/
public Integer getDepthValue(){
return depthValue;
......@@ -132,6 +150,7 @@ public class PageAccessDepthEntity extends PageAccessDepthVo {
public String toString(){
StringBuilder sb = new StringBuilder("");
sb.append(",deviceNum:").append(getDeviceNum());
sb.append(",productId:").append(getProductId());
sb.append(",productName:").append(getProductName());
sb.append(",pageCode:").append(getPageCode());
......@@ -142,6 +161,8 @@ public class PageAccessDepthEntity extends PageAccessDepthVo {
public void initAttrValue(){
this.deviceNum = "";
this.productId = null;
this.productName = "";
......
......@@ -10,12 +10,16 @@ import com.mortals.xhx.module.page.model.vo.PageEventVo;
* 页面事件记录实体对象
*
* @author zxfei
* @date 2023-04-10
* @date 2023-04-12
*/
public class PageEventEntity extends PageEventVo {
private static final long serialVersionUID = 1L;
/**
* 设备编码
*/
private String deviceNum;
/**
* 产品id
*/
......@@ -61,6 +65,20 @@ public class PageEventEntity extends PageEventVo {
public PageEventEntity(){}
/**
* 获取 设备编码
* @return String
*/
public String getDeviceNum(){
return deviceNum;
}
/**
* 设置 设备编码
* @param deviceNum
*/
public void setDeviceNum(String deviceNum){
this.deviceNum = deviceNum;
}
/**
* 获取 产品id
* @return Long
*/
......@@ -222,6 +240,7 @@ public class PageEventEntity extends PageEventVo {
public String toString(){
StringBuilder sb = new StringBuilder("");
sb.append(",deviceNum:").append(getDeviceNum());
sb.append(",productId:").append(getProductId());
sb.append(",productName:").append(getProductName());
sb.append(",businessCode:").append(getBusinessCode());
......@@ -237,6 +256,8 @@ public class PageEventEntity extends PageEventVo {
public void initAttrValue(){
this.deviceNum = "";
this.productId = null;
this.productName = "";
......
package com.mortals.xhx.module.page.model.pdu;
import lombok.Data;
@Data
public class AccessPdu {
/*** 页面编码(页面路由) */
private String pageCode;
/** 页面名称 */
private String pageName;
}
......@@ -37,6 +37,7 @@ public class PageAccessDepthServiceImpl extends AbstractCRUDServiceImpl<PageAcce
return null;
}
PageAccessDepthEntity entity = new PageAccessDepthEntity();
entity.setDeviceNum(pdu.getDeviceNum());
entity.setProductId(pdu.getProductId());
entity.setProductName(pdu.getProductName());
entity.setPageCode(pdu.getPageCode());
......
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