Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
smart_gov_platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
smart_gov_platform
Commits
8d2afe0a
Commit
8d2afe0a
authored
Apr 20, 2023
by
赵啸非
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
4d6aa33a
ae855c32
Changes
32
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
111951 additions
and
5559 deletions
+111951
-5559
common-lib/src/main/java/com/mortals/xhx/common/pdu/RespData.java
...ib/src/main/java/com/mortals/xhx/common/pdu/RespData.java
+1
-0
common-lib/src/main/java/com/mortals/xhx/common/pdu/product/ProductPdu.java
...n/java/com/mortals/xhx/common/pdu/product/ProductPdu.java
+207
-0
common-lib/src/main/java/com/mortals/xhx/feign/product/IProductFeign.java
...ain/java/com/mortals/xhx/feign/product/IProductFeign.java
+44
-0
portal-manager-ui/admin/src/api/dataActuary.js
portal-manager-ui/admin/src/api/dataActuary.js
+8
-0
portal-manager-ui/admin/src/assets/json/china.json
portal-manager-ui/admin/src/assets/json/china.json
+103310
-0
portal-manager-ui/admin/src/mixins/menu.js
portal-manager-ui/admin/src/mixins/menu.js
+0
-1
portal-manager-ui/admin/src/router/routes.js
portal-manager-ui/admin/src/router/routes.js
+91
-22
portal-manager-ui/admin/src/views/dataActuary/behaviour/eventanalyse/eventanalyse.vue
...views/dataActuary/behaviour/eventanalyse/eventanalyse.vue
+117
-94
portal-manager-ui/admin/src/views/dataActuary/behaviour/information/information.vue
...c/views/dataActuary/behaviour/information/information.vue
+94
-37
portal-manager-ui/admin/src/views/dataActuary/behaviour/usinghabit/usinghabit.vue
...src/views/dataActuary/behaviour/usinghabit/usinghabit.vue
+46
-50
portal-manager-ui/admin/src/views/dataActuary/business/Component/bar/index.vue
...in/src/views/dataActuary/business/Component/bar/index.vue
+78
-0
portal-manager-ui/admin/src/views/dataActuary/business/Component/doublePie/index.vue
.../views/dataActuary/business/Component/doublePie/index.vue
+146
-0
portal-manager-ui/admin/src/views/dataActuary/business/Component/emptyPie/index.vue
...c/views/dataActuary/business/Component/emptyPie/index.vue
+93
-0
portal-manager-ui/admin/src/views/dataActuary/business/Component/line/index.vue
...n/src/views/dataActuary/business/Component/line/index.vue
+96
-0
portal-manager-ui/admin/src/views/dataActuary/business/Component/map/index.vue
...in/src/views/dataActuary/business/Component/map/index.vue
+80
-0
portal-manager-ui/admin/src/views/dataActuary/business/Component/pie/index.vue
...in/src/views/dataActuary/business/Component/pie/index.vue
+83
-0
portal-manager-ui/admin/src/views/dataActuary/business/Component/radar/index.vue
.../src/views/dataActuary/business/Component/radar/index.vue
+65
-0
portal-manager-ui/admin/src/views/dataActuary/business/analysiscontent/index.vue
.../src/views/dataActuary/business/analysiscontent/index.vue
+166
-0
portal-manager-ui/admin/src/views/dataActuary/business/basecontent/index.vue
...dmin/src/views/dataActuary/business/basecontent/index.vue
+649
-0
portal-manager-ui/admin/src/views/dataActuary/business/breadcrumb/index.vue
...admin/src/views/dataActuary/business/breadcrumb/index.vue
+46
-0
portal-manager-ui/admin/src/views/dataActuary/business/index.vue
...manager-ui/admin/src/views/dataActuary/business/index.vue
+164
-0
portal-manager-ui/admin/src/views/dataActuary/portrayal/breadcrumb/index.vue
...dmin/src/views/dataActuary/portrayal/breadcrumb/index.vue
+46
-0
portal-manager-ui/admin/src/views/dataActuary/portrayal/index.vue
...anager-ui/admin/src/views/dataActuary/portrayal/index.vue
+126
-0
portal-manager-ui/admin/src/views/dataActuary/portrayal/portrayalAnalysis/index.vue
...c/views/dataActuary/portrayal/portrayalAnalysis/index.vue
+243
-0
portal-manager-ui/admin/src/views/dataActuary/portrayal/portrayalBase/index.vue
...n/src/views/dataActuary/portrayal/portrayalBase/index.vue
+382
-0
portal-manager-ui/admin/src/views/dataActuary/portrayal/register/index.vue
.../admin/src/views/dataActuary/portrayal/register/index.vue
+279
-0
portal-manager-ui/admin/src/views/dataAdmin/components/makeRecordReport/makeRecordReport.vue
...ataAdmin/components/makeRecordReport/makeRecordReport.vue
+12
-3
portal-manager-ui/admin/src/views/dataAdmin/components/makeRecordReport/recordReportdetails.vue
...Admin/components/makeRecordReport/recordReportdetails.vue
+10
-2
portal-manager-ui/admin/yarn.lock
portal-manager-ui/admin/yarn.lock
+5219
-5345
portal-manager/doc/api.md
portal-manager/doc/api.md
+5
-1
portal-manager/src/main/java/com/mortals/xhx/module/page/web/BuryPointController.java
.../com/mortals/xhx/module/page/web/BuryPointController.java
+4
-4
portal-manager/src/main/java/com/mortals/xhx/module/page/web/PageInfoController.java
...a/com/mortals/xhx/module/page/web/PageInfoController.java
+41
-0
No files found.
common-lib/src/main/java/com/mortals/xhx/common/pdu/RespData.java
View file @
8d2afe0a
...
...
@@ -14,6 +14,7 @@ public class RespData<T> {
private
T
data
;
private
T
entity
;
private
PageInfo
pageInfo
;
private
Object
dict
;
public
static
void
main
(
String
[]
args
)
{
...
...
common-lib/src/main/java/com/mortals/xhx/common/pdu/product/ProductPdu.java
0 → 100644
View file @
8d2afe0a
package
com.mortals.xhx.common.pdu.product
;
import
com.mortals.framework.model.BaseEntityLong
;
public
class
ProductPdu
extends
BaseEntityLong
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 关联平台
*/
private
Long
platformId
;
/**
* 产品名称,名称唯一
*/
private
String
productName
;
/**
* 产品编码
*/
private
String
productCode
;
/**
* 皮肤id
*/
private
Long
skinId
;
/**
* 皮肤名称
*/
private
String
skinName
;
/**
* 首页地址
*/
private
String
homeUrl
;
/**
* 事件地址,评价器使用
*/
private
String
eventUrl
;
/**
* 备注
*/
private
String
productRemark
;
public
ProductPdu
(){}
/**
* 获取 关联平台
* @return Long
*/
public
Long
getPlatformId
(){
return
platformId
;
}
/**
* 设置 关联平台
* @param platformId
*/
public
void
setPlatformId
(
Long
platformId
){
this
.
platformId
=
platformId
;
}
/**
* 获取 产品名称,名称唯一
* @return String
*/
public
String
getProductName
(){
return
productName
;
}
/**
* 设置 产品名称,名称唯一
* @param productName
*/
public
void
setProductName
(
String
productName
){
this
.
productName
=
productName
;
}
/**
* 获取 产品编码
* @return String
*/
public
String
getProductCode
(){
return
productCode
;
}
/**
* 设置 产品编码
* @param productCode
*/
public
void
setProductCode
(
String
productCode
){
this
.
productCode
=
productCode
;
}
/**
* 获取 皮肤id
* @return Long
*/
public
Long
getSkinId
(){
return
skinId
;
}
/**
* 设置 皮肤id
* @param skinId
*/
public
void
setSkinId
(
Long
skinId
){
this
.
skinId
=
skinId
;
}
/**
* 获取 皮肤名称
* @return String
*/
public
String
getSkinName
(){
return
skinName
;
}
/**
* 设置 皮肤名称
* @param skinName
*/
public
void
setSkinName
(
String
skinName
){
this
.
skinName
=
skinName
;
}
/**
* 获取 首页地址
* @return String
*/
public
String
getHomeUrl
(){
return
homeUrl
;
}
/**
* 设置 首页地址
* @param homeUrl
*/
public
void
setHomeUrl
(
String
homeUrl
){
this
.
homeUrl
=
homeUrl
;
}
/**
* 获取 事件地址,评价器使用
* @return String
*/
public
String
getEventUrl
(){
return
eventUrl
;
}
/**
* 设置 事件地址,评价器使用
* @param eventUrl
*/
public
void
setEventUrl
(
String
eventUrl
){
this
.
eventUrl
=
eventUrl
;
}
/**
* 获取 备注
* @return String
*/
public
String
getProductRemark
(){
return
productRemark
;
}
/**
* 设置 备注
* @param productRemark
*/
public
void
setProductRemark
(
String
productRemark
){
this
.
productRemark
=
productRemark
;
}
@Override
public
int
hashCode
()
{
return
this
.
getId
().
hashCode
();
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
obj
==
null
)
return
false
;
if
(
obj
instanceof
ProductPdu
)
{
ProductPdu
tmp
=
(
ProductPdu
)
obj
;
if
(
this
.
getId
()
==
tmp
.
getId
())
{
return
true
;
}
}
return
false
;
}
public
String
toString
(){
StringBuilder
sb
=
new
StringBuilder
(
""
);
sb
.
append
(
",platformId:"
).
append
(
getPlatformId
());
sb
.
append
(
",productName:"
).
append
(
getProductName
());
sb
.
append
(
",productCode:"
).
append
(
getProductCode
());
sb
.
append
(
",skinId:"
).
append
(
getSkinId
());
sb
.
append
(
",skinName:"
).
append
(
getSkinName
());
sb
.
append
(
",homeUrl:"
).
append
(
getHomeUrl
());
sb
.
append
(
",eventUrl:"
).
append
(
getEventUrl
());
sb
.
append
(
",productRemark:"
).
append
(
getProductRemark
());
return
sb
.
toString
();
}
public
void
initAttrValue
(){
this
.
platformId
=
null
;
this
.
productName
=
""
;
this
.
productCode
=
""
;
this
.
skinId
=
null
;
this
.
skinName
=
""
;
this
.
homeUrl
=
""
;
this
.
eventUrl
=
""
;
this
.
productRemark
=
""
;
}
}
common-lib/src/main/java/com/mortals/xhx/feign/product/IProductFeign.java
0 → 100644
View file @
8d2afe0a
package
com.mortals.xhx.feign.product
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.xhx.common.pdu.RespData
;
import
com.mortals.xhx.common.pdu.product.ProductPdu
;
import
com.mortals.xhx.feign.IFeign
;
import
feign.hystrix.FallbackFactory
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
java.util.List
;
@FeignClient
(
name
=
"device-manager"
,
path
=
"/m"
,
fallbackFactory
=
ProductFeignFallbackFactory
.
class
)
public
interface
IProductFeign
extends
IFeign
{
/**
* 查看产品列表
*
* @param productPdu
* @return
*/
@PostMapping
(
value
=
"/product/list"
)
Rest
<
RespData
<
List
<
ProductPdu
>>>
list
(
@RequestBody
ProductPdu
productPdu
);
}
@Slf4j
@Component
class
ProductFeignFallbackFactory
implements
FallbackFactory
<
IProductFeign
>
{
@Override
public
IProductFeign
create
(
Throwable
throwable
)
{
return
new
IProductFeign
(){
@Override
public
Rest
<
RespData
<
List
<
ProductPdu
>>>
list
(
ProductPdu
productPdu
)
{
return
Rest
.
fail
(
"暂时无法获取产品列表,请稍后再试!"
);
}
};
}
}
portal-manager-ui/admin/src/api/dataActuary.js
View file @
8d2afe0a
...
...
@@ -19,3 +19,11 @@ export function getAccessAnalyse(params) {
export
function
getWayAccessAnalyse
(
params
)
{
return
http
.
post
(
`
${
baseURL
}
/zwfw/act/analyse/wayAccessAnalyse`
,
params
);
}
//使用习惯
export
function
getUsageCensus
(
params
)
{
return
http
.
post
(
`
${
baseURL
}
/zwfw/act/analyse/usageCensus`
,
params
);
}
//信息流分析
export
function
getInformationFlow
(
params
)
{
return
http
.
post
(
`
${
baseURL
}
/zwfw/act/analyse/informationFlow`
,
params
);
}
\ No newline at end of file
portal-manager-ui/admin/src/assets/json/china.json
0 → 100644
View file @
8d2afe0a
This diff is collapsed.
Click to expand it.
portal-manager-ui/admin/src/mixins/menu.js
View file @
8d2afe0a
...
...
@@ -93,7 +93,6 @@ export default {
this
.
menuListData
=
data
.
data
;
this
.
menuTreeData
=
toTreeData
(
data
.
data
,
-
1
,
"
id
"
,
"
parentId
"
);
this
.
SET_menuList_X
(
deepClone
(
this
.
menuListData
));
this
.
SET_menuTree_X
(
deepClone
(
this
.
menuTreeData
));
...
...
portal-manager-ui/admin/src/router/routes.js
View file @
8d2afe0a
...
...
@@ -6,7 +6,7 @@ const routes = [
redirect
:
"
/home/dataManagement
"
,
component
:
()
=>
import
(
/* webpackChunkName: "home" */
"
@/views/home/home.vue
"
),
meta
:
{
title
:
"
首页
"
},
meta
:
{
title
:
"
政务一体化平台
"
},
children
:
[
{
path
:
"
dataManagement
"
,
...
...
@@ -436,6 +436,75 @@ const routes = [
),
meta
:
{
title
:
"
数据精算
"
},
},
{
path
:
"
dataActuary/business
"
,
name
:
"
business
"
,
component
:
()
=>
import
(
/* webpackChunkName: "dataActuary" */
"
@/views/dataActuary/business/index.vue
"
),
meta
:
{
title
:
"
业务数据分析
"
},
redirect
:
'
dataActuary/business/basecontent
'
,
children
:
[
{
path
:
"
basecontent
"
,
name
:
"
basecontent
"
,
component
:
()
=>
import
(
/* webpackChunkName: "dataActuary" */
"
@/views/dataActuary/business/basecontent/index.vue
"
),
meta
:
{
title
:
"
基本分析
"
},
},
{
path
:
"
analysiscontent
"
,
name
:
"
analysiscontent
"
,
component
:
()
=>
import
(
/* webpackChunkName: "dataActuary" */
"
@/views/dataActuary/business/analysiscontent/index.vue
"
),
meta
:
{
title
:
"
分析结果
"
},
},
]
},
{
path
:
"
dataActuary/portrayal
"
,
name
:
"
portrayal
"
,
component
:
()
=>
import
(
/* webpackChunkName: "dataActuary" */
"
@/views/dataActuary/portrayal/index.vue
"
),
meta
:
{
title
:
"
群众画像图谱
"
},
redirect
:
'
dataActuary/portrayal/portrayalbase
'
,
children
:
[
{
path
:
"
portrayalbase
"
,
name
:
"
portrayalbase
"
,
component
:
()
=>
import
(
/* webpackChunkName: "dataActuary" */
"
@/views/dataActuary/portrayal/portrayalBase/index.vue
"
),
meta
:
{
title
:
"
基本分析
"
},
},
{
path
:
"
portrayalanalysis
"
,
name
:
"
portrayalanalysis
"
,
component
:
()
=>
import
(
/* webpackChunkName: "dataActuary" */
"
@/views/dataActuary/portrayal/portrayalAnalysis/index.vue
"
),
meta
:
{
title
:
"
分析结果
"
},
},
]
},
{
path
:
"
dataActuary/portrayal/register
"
,
name
:
"
register
"
,
component
:
()
=>
import
(
/* webpackChunkName: "dataActuary" */
"
@/views/dataActuary/portrayal/register/index.vue
"
),
meta
:
{
title
:
"
群众注册列表
"
},
},
{
path
:
"
dataActuary/behaviour
"
,
name
:
"
behaviour
"
,
...
...
portal-manager-ui/admin/src/views/dataActuary/behaviour/eventanalyse/eventanalyse.vue
View file @
8d2afe0a
<
template
>
<!-- 事件分析 -->
<div
class=
"page"
>
<a-form-model
:model=
"queryform"
:label-col=
"labelCol"
:wrapper-col=
"wrapperCol"
layout=
"inline"
>
<a-form-model
:model=
"queryform"
:label-col=
"labelCol"
:wrapper-col=
"wrapperCol"
layout=
"inline"
>
<a-form-model-item>
<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
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=
"time"
style=
"width: 300px"
:allowClear=
"false"
/>
<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"
@
click=
"getList"
>
开始分析
</a-button>
<a-button
type=
"primary"
@
click=
"getList"
>
开始分析
</a-button>
</a-form-model-item>
</a-form-model>
<div
class=
"mt20"
>
<a-table
:columns=
"columns"
:data-source=
"data"
:scroll=
"
{ y: 590 }" :pagination="false">
<a-table
:columns=
"columns"
:data-source=
"data"
:scroll=
"
{ y: 590 }"
:pagination="false"
>
</a-table>
</div>
</div>
</
template
>
<
script
>
import
{
getEventCensus
}
from
'
@/api/dataActuary.js
'
import
moment
from
'
moment
'
;
export
default
{
import
{
getEventCensus
}
from
"
@/api/dataActuary.js
"
;
import
moment
from
"
moment
"
;
export
default
{
data
()
{
return
{
queryform
:
{
productId
:
1
,
dateTimeStart
:
moment
().
format
(
'
yyyy-MM-DD
'
),
dateTimeEnd
:
moment
().
format
(
'
yyyy-MM-DD
'
)
dateTimeStart
:
moment
().
format
(
"
yyyy-MM-DD
"
),
dateTimeEnd
:
moment
().
format
(
"
yyyy-MM-DD
"
),
},
time
:[
moment
().
format
(
'
yyyy-MM-DD
'
),
moment
().
format
(
'
yyyy-MM-DD
'
)],
time
:
[
moment
().
format
(
"
yyyy-MM-DD
"
),
moment
().
format
(
"
yyyy-MM-DD
"
)],
labelCol
:
{
span
:
1
span
:
1
,
},
wrapperCol
:
{
span
:
14
span
:
14
,
},
product
:
[
{
title
:
"
排队机
"
,
id
:
1
,
},
product
:[{
title
:
'
排队机
'
,
id
:
1
}],
columns
:
[{
],
columns
:
[
{
title
:
"
序号
"
,
width
:
"
70px
"
,
customRender
:
(
text
,
record
,
index
)
=>
`
${
index
+
1
}
`
,
customRender
:
(
text
,
record
,
index
)
=>
`
${
index
+
1
}
`
,
align
:
"
center
"
,
},
{
...
...
@@ -60,41 +83,41 @@
align
:
"
center
"
,
},
{
title
:
'
事件ID
'
,
dataIndex
:
'
eventCode
'
,
title
:
"
事件ID
"
,
dataIndex
:
"
eventCode
"
,
align
:
"
center
"
,
},
{
title
:
'
事件数量(日均)
'
,
dataIndex
:
'
dayAvg
'
,
title
:
"
事件数量(日均)
"
,
dataIndex
:
"
dayAvg
"
,
align
:
"
center
"
,
},
{
title
:
'
事件平均使用时长(单次)
'
,
dataIndex
:
'
takeTimeAvg
'
,
title
:
"
事件平均使用时长(单次)
"
,
dataIndex
:
"
takeTimeAvg
"
,
align
:
"
center
"
,
}
},
],
data
:
[],
}
};
},
mounted
()
{
this
.
getList
()
this
.
getList
();
},
methods
:{
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
})
}
}
};
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
>
<
style
lang=
"less"
scoped
>
.page{
.page {
padding: 15px;
}
}
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/behaviour/information/information.vue
View file @
8d2afe0a
...
...
@@ -3,38 +3,39 @@
<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-date-picker
valueFormat=
"yyyy-MM-DD"
v-model=
"time"
style=
"width: 200px"
:allowClear=
"false"
/>
</a-form-model-item>
<a-form-model-item>
<a-select
v-model=
"queryform.particleType"
style=
"width: 200px"
placeholder=
"选择时间粒度"
>
<a-select-option
value=
"1"
>
10分钟
</a-select-option>
<a-select-option
value=
"2"
>
30分钟
</a-select-option>
<a-select-option
value=
"3"
>
1小时
</a-select-option>
</a-select>
</a-form-model-item>
<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>
</a-form-model-item>
<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>
</a-form-model-item>
<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>
</a-form-model-item>
<a-form-model-item>
<a-button
type=
"primary"
>
<a-button
type=
"primary"
@
click=
"getData"
>
开始分析
</a-button>
</a-form-model-item>
...
...
@@ -42,20 +43,31 @@
<div
class=
"table-box"
>
<div
class=
"mb"
>
<span
style=
"margin-right: 30px;"
>
指标筛选
</span>
<a-checkbox-group
v-model=
"queryform.value
"
>
<a-checkbox
value=
"
1
"
>
访问人数
</a-checkbox>
<a-checkbox
value=
"
2
"
>
打开次数
</a-checkbox>
<a-checkbox
value=
"
3
"
>
访问页面数
</a-checkbox>
<a-checkbox-group
@
change=
"changeIndex"
v-model=
"indexList
"
>
<a-checkbox
value=
"
accessCount
"
>
访问人数
</a-checkbox>
<a-checkbox
value=
"
accessCount1
"
>
打开次数
</a-checkbox>
<a-checkbox
value=
"
pageDepth
"
>
访问页面数
</a-checkbox>
</a-checkbox-group>
</div>
<div
class=
"mb"
>
<span
style=
"margin-right: 30px;"
>
对比筛选
</span>
<a-checkbox-group
v-model=
"queryform.value"
>
<a-checkbox
value=
"1"
>
日对比
</a-checkbox>
</a-checkbox-group
>
<a-checkbox
@
change=
"onChange"
>
日对比
</a-checkbox
>
</div>
<a-table
:columns=
"columns"
:data-source=
"data"
:scroll=
"
{ y: 590 }" :pagination="pagination">
<a-table
:columns=
"columns"
:data-source=
"data"
:scroll=
"
{ y: 590 }" :pagination="false">
<template
slot=
"访问人数"
slot-scope=
"text, record, index"
>
<div>
{{
record
.
accessCount
}}
</div>
<div
v-show=
"queryform.isRatio == 1"
>
日对比:
{{
(
record
.
accessRatio
*
100
).
toFixed
(
2
)
}}
%
</div>
</
template
>
<
template
slot=
"打开次数"
slot-scope=
"text, record, index"
>
<div>
{{
record
.
accessCount
}}
</div>
<div
v-show=
"queryform.isRatio == 1"
>
日对比:
{{
(
record
.
accessRatio
*
100
).
toFixed
(
2
)
}}
%
</div>
</
template
>
<
template
slot=
"访问页面数"
slot-scope=
"text, record, index"
>
<div>
{{
record
.
pageDepth
}}
</div>
<div
v-show=
"queryform.isRatio == 1"
>
日对比:
{{
(
record
.
depthRatio
*
100
).
toFixed
(
2
)
}}
%
</div>
</
template
>
</a-table>
</div>
...
...
@@ -63,12 +75,24 @@
</template>
<
script
>
import
{
getInformationFlow
}
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
'
),
particleType
:
'
1
'
,
isRatio
:
0
},
time
:
moment
().
format
(
'
yyyy-MM-DD
'
),
product
:[{
title
:
'
排队机
'
,
id
:
1
}],
indexList
:[
'
accessCount
'
,
'
accessCount1
'
,
'
pageDepth
'
],
labelCol
:
{
span
:
1
},
...
...
@@ -78,45 +102,55 @@
columns
:
[{
title
:
"
序号
"
,
width
:
"
70px
"
,
dataIndex
:
'
index
'
,
customRender
:
(
text
,
record
,
index
)
=>
`
${
index
+
1
}
`
,
align
:
"
center
"
,
},
{
title
:
"
时间
"
,
dataIndex
:
"
title
"
,
dataIndex
:
"
dateStr
"
,
align
:
"
center
"
,
},
{
title
:
'
产品名称
'
,
dataIndex
:
'
address
'
,
dataIndex
:
'
productName
'
,
align
:
"
center
"
,
},
{
title
:
'
一级场景
'
,
dataIndex
:
'
address1
'
,
dataIndex
:
'
firstName
'
,
align
:
"
center
"
,
},
{
title
:
'
二级场景
'
,
dataIndex
:
'
address2
'
,
dataIndex
:
'
secondName
'
,
align
:
"
center
"
,
},
{
title
:
'
三级场景
'
,
dataIndex
:
'
address3
'
,
dataIndex
:
'
thirdName
'
,
align
:
"
center
"
,
},{
title
:
'
访问人数
'
,
dataIndex
:
'
a
ddress5
'
,
dataIndex
:
'
a
ccessCount
'
,
align
:
"
center
"
,
scopedSlots
:
{
customRender
:
"
访问人数
"
,
},
},{
title
:
'
打开次数
'
,
dataIndex
:
'
a
ddress4
'
,
dataIndex
:
'
a
ccessCount1
'
,
align
:
"
center
"
,
scopedSlots
:
{
customRender
:
"
打开次数
"
,
},
},{
title
:
'
访问页面数
'
,
dataIndex
:
'
address8
'
,
dataIndex
:
'
pageDepth
'
,
align
:
"
center
"
,
scopedSlots
:
{
customRender
:
"
访问页面数
"
,
},
}
],
data
:
[],
...
...
@@ -127,7 +161,30 @@
pageSizeOptions
:
[
"
10
"
,
"
20
"
,
"
50
"
,
"
100
"
],
//每页中显示的数据
showTotal
:
total
=>
`共有
${
total
}
条数据`
,
//分页中显示总的数据
},
filterColumns
:[]
}
},
mounted
()
{
this
.
filterColumns
=
this
.
columns
this
.
getData
()
},
methods
:{
onChange
(
e
){
this
.
queryform
.
isRatio
=
e
.
target
.
checked
?
1
:
0
this
.
getData
()
},
changeIndex
(
e
)
{
e
=
e
.
concat
([
'
index
'
,
'
dateStr
'
,
'
productName
'
,
'
firstName
'
,
'
secondName
'
,
'
thirdName
'
])
let
columns
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
filterColumns
))
this
.
columns
=
columns
.
filter
(
item
=>
e
.
some
(
items
=>
item
.
dataIndex
==
items
))
},
getData
()
{
this
.
queryform
.
dateTimeStart
=
this
.
time
?
this
.
time
:
null
this
.
queryform
.
dateTimeStart
=
this
.
time
?
this
.
time
:
null
getInformationFlow
(
this
.
queryform
).
then
(
res
=>
{
this
.
data
=
res
.
data
})
},
}
};
</
script
>
...
...
portal-manager-ui/admin/src/views/dataActuary/behaviour/usinghabit/usinghabit.vue
View file @
8d2afe0a
...
...
@@ -3,37 +3,47 @@
<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>
</a-form-model>
<div
class=
"charts-box"
>
<
div
id=
"canal"
></div
>
<
!--
<div
id=
"canal"
></div>
--
>
<div
id=
"type"
></div>
<
div
id=
"way"
></div
>
<
!--
<div
id=
"way"
></div>
--
>
</div>
</div>
</
template
>
<
script
>
import
*
as
echarts
from
'
echarts
'
import
moment
from
'
moment
'
;
import
{
getUsageCensus
}
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
}],
labelCol
:
{
span
:
1
},
...
...
@@ -43,11 +53,17 @@
}
},
mounted
()
{
this
.
initCanal
()
this
.
initType
()
this
.
initWay
()
this
.
getData
()
},
methods
:
{
getData
()
{
this
.
queryform
.
dateTimeStart
=
this
.
time
?
this
.
time
[
0
]
:
null
this
.
queryform
.
dateTimeStart
=
this
.
time
?
this
.
time
[
1
]
:
null
getUsageCensus
(
this
.
queryform
).
then
(
res
=>
{
let
data
=
res
.
data
.
map
(({
businessName
,
propValue
})
=>
({
name
:
businessName
,
value
:
propValue
*
100
}))
this
.
initType
(
data
)
})
},
initWay
(){
let
chartDom
=
document
.
getElementById
(
'
way
'
)
let
myChart
=
echarts
.
init
(
chartDom
);
...
...
@@ -104,7 +120,8 @@
}]
})
},
initType
()
{
initType
(
data
)
{
console
.
log
(
data
)
let
chartDom
=
document
.
getElementById
(
'
type
'
)
let
myChart
=
echarts
.
init
(
chartDom
);
myChart
.
setOption
({
...
...
@@ -123,7 +140,6 @@
},
color
:
[
'
#6395F9
'
,
'
#64DAAB
'
,
'
#647798
'
,
'
#F6C02D
'
,
'
#7567FA
'
,
'
#75CBED
'
],
series
:
[{
name
:
'
Access From
'
,
type
:
'
pie
'
,
radius
:
'
65%
'
,
label
:
{
...
...
@@ -136,27 +152,7 @@
length
:
1
}
},
data
:
[{
value
:
1048
,
name
:
'
Search Engine
'
},
{
value
:
735
,
name
:
'
Direct
'
},
{
value
:
580
,
name
:
'
Email
'
},
{
value
:
484
,
name
:
'
Union Ads
'
},
{
value
:
300
,
name
:
'
Video Ads
'
}
],
data
:
data
}]
})
},
...
...
@@ -221,7 +217,7 @@
.charts-box {
flex: 1;
display: flex;
justify-content:
space-between
;
justify-content:
center
;
padding: 50px 0;
#canal,#type,#way {
...
...
portal-manager-ui/admin/src/views/dataActuary/business/Component/bar/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<div
:id=
"id"
:style=
"
{height: this.height+'px', width: this.width+'px'}">
</div>
</div>
</
template
>
<
script
>
import
*
as
echarts
from
'
echarts
'
let
myChart
=
null
export
default
{
props
:
{
id
:
{
type
:
String
},
height
:{
type
:
String
|
Number
,
},
width
:{
type
:
String
|
Number
,
},
datas
:
Object
},
data
()
{
return
{
}
},
watch
:{
datas
:
function
(
obj
)
{
let
arr
=
[]
if
(
obj
)
{
obj
.
data
.
map
((
item
)
=>
{
let
objData
=
{
data
:
[],
name
:
''
,
type
:
''
}
if
(
item
){
objData
.
data
=
item
.
data
objData
.
name
=
item
.
name
objData
.
type
=
item
.
type
arr
.
push
(
objData
)
}
})
this
.
barInit
(
obj
.
title
,
obj
.
xData
,
arr
)
}
}
},
methods
:
{
barInit
(
name
,
xData
,
data
)
{
myChart
=
echarts
.
init
(
document
.
getElementById
(
this
.
id
))
let
option
=
{
title
:
{
text
:
name
,
textStyle
:
{
fontSize
:
'
14
'
}
},
legend
:{},
xAxis
:
{
type
:
'
category
'
,
data
:
xData
},
yAxis
:
{
type
:
'
value
'
},
series
:
data
}
myChart
.
setOption
(
option
)
// 让图表跟随屏幕自动的去适应
window
.
addEventListener
(
'
resize
'
,
function
()
{
myChart
.
resize
()
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/business/Component/doublePie/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<div
:id=
"id"
:style=
"
{height: this.height+'px', width: this.width+'px'}">
</div>
</div>
</
template
>
<
script
>
import
*
as
echarts
from
'
echarts
'
let
myChart
=
null
export
default
{
props
:
{
id
:
{
type
:
String
},
height
:{
type
:
String
|
Number
,
},
width
:{
type
:
String
|
Number
,
},
datas
:
Object
},
data
()
{
return
{
}
},
watch
:{
datas
:
function
(
obj
){
if
(
obj
)
{
this
.
pieInit
(
obj
.
title
,
obj
.
pieName
,
obj
.
firstName
,
obj
.
firstVal
,
obj
.
firstTotal
,
obj
.
secondName
,
obj
.
secondVal
,
obj
.
secondTotal
)
}
}
},
methods
:
{
pieInit
(
title
,
pieName
,
firstName
,
firstVal
,
firstTotal
,
secondName
,
secondVal
,
secondTotal
)
{
myChart
=
echarts
.
init
(
document
.
getElementById
(
this
.
id
))
let
option
=
{
title
:
{
text
:
title
,
textStyle
:
{
fontSize
:
'
14
'
}
},
series
:
[
{
name
:
pieName
,
type
:
'
pie
'
,
radius
:
[
"
55%
"
,
'
70%
'
],
center
:
[
'
25%
'
,
'
50%
'
],
label
:
{
show
:
false
},
data
:
[
{
value
:
firstVal
,
name
:
firstName
,
label
:
{
show
:
true
,
position
:
'
center
'
,
formatter
:
'
{b|{b}}
\n
{d|{d}}%
'
,
rich
:
{
b
:
{
fontSize
:
14
,
lineHeight
:
30
,
color
:
"
#333
"
},
d
:
{
fontSize
:
14
,
color
:
"
#333
"
,
lineHeight
:
30
,
fontWeight
:
"
bold
"
}
},
color
:
"
#333
"
},
itemStyle
:
{
color
:
'
#04CA8F
'
}
},
{
value
:
firstTotal
-
firstVal
,
//不需要显示的数据,颜色设置成和背景一样
itemStyle
:
{
color
:
'
#F0F2F5
'
}
}
]
},
{
name
:
pieName
,
type
:
'
pie
'
,
radius
:
[
"
55%
"
,
'
70%
'
],
center
:
[
'
75%
'
,
'
50%
'
],
label
:
{
show
:
false
},
data
:
[
{
value
:
secondVal
,
name
:
secondName
,
label
:
{
show
:
true
,
position
:
'
center
'
,
formatter
:
'
{b|{b}}
\n
{d|{d}}%
'
,
rich
:
{
b
:
{
fontSize
:
14
,
lineHeight
:
30
,
color
:
"
#333
"
},
d
:
{
fontSize
:
14
,
color
:
"
#333
"
,
lineHeight
:
30
,
fontWeight
:
"
bold
"
}
},
color
:
"
#333
"
},
itemStyle
:
{
color
:
'
#6394f9
'
}
},
{
value
:
secondTotal
-
secondVal
,
//不需要显示的数据,颜色设置成和背景一样
itemStyle
:
{
color
:
'
#F0F2F5
'
}
}
]
}
]
}
myChart
.
setOption
(
option
)
// 让图表跟随屏幕自动的去适应
window
.
addEventListener
(
'
resize
'
,
function
()
{
myChart
.
resize
()
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/business/Component/emptyPie/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<div
:id=
"id"
:style=
"
{height: height+'px', width: width+'px'}">
</div>
</div>
</
template
>
<
script
>
import
*
as
echarts
from
'
echarts
'
let
myChart
=
null
export
default
{
props
:
{
id
:
String
,
height
:
{
type
:
String
|
Number
},
width
:{
type
:
String
|
Number
,
},
datas
:
Object
},
data
()
{
return
{
}
},
watch
:{
datas
:
function
(
obj
){
if
(
obj
){
this
.
pieInit
(
obj
.
name
,
obj
.
val
,
obj
.
total
,
obj
.
color
)
}
}
},
created
()
{
},
methods
:
{
pieInit
(
name
,
val
,
total
,
color
)
{
myChart
=
echarts
.
init
(
document
.
getElementById
(
this
.
id
))
let
option
=
{
series
:
[
{
name
:
name
,
type
:
'
pie
'
,
radius
:
[
"
65%
"
,
'
80%
'
],
center
:
[
'
50%
'
,
'
50%
'
],
label
:
{
show
:
false
},
data
:
[
{
value
:
val
,
name
:
name
,
label
:
{
show
:
true
,
position
:
'
center
'
,
formatter
:
'
{b|{b}}
\n
{d|{d}}%
'
,
rich
:
{
b
:
{
fontSize
:
14
,
lineHeight
:
30
,
color
:
"
#333
"
},
d
:
{
fontSize
:
14
,
color
:
"
#333
"
,
lineHeight
:
30
,
fontWeight
:
"
bold
"
}
},
color
:
"
#333
"
},
itemStyle
:
{
color
:
color
}
},
{
value
:
total
-
val
,
//不需要显示的数据,颜色设置成和背景一样
itemStyle
:
{
color
:
'
#F0F2F5
'
}
}]
}]
}
myChart
.
setOption
(
option
)
// 让图表跟随屏幕自动的去适应
window
.
addEventListener
(
'
resize
'
,
function
()
{
myChart
.
resize
()
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/business/Component/line/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<div
:id=
"id"
:style=
"
{height: this.height+'px', width: this.width+'px'}">
</div>
</div>
</
template
>
<
script
>
import
*
as
echarts
from
'
echarts
'
let
myChart
=
null
export
default
{
props
:
{
id
:
{
type
:
String
},
height
:
{
type
:
String
|
Number
},
width
:{
type
:
String
|
Number
,
},
datas
:
Object
},
data
()
{
return
{
}
},
watch
:{
datas
:
function
(
obj
){
let
arr
=
[]
if
(
obj
){
obj
.
dataList
.
map
((
item
)
=>
{
let
obj
=
{
name
:
''
,
type
:
'
line
'
,
emphasis
:
{
focus
:
'
series
'
},
data
:
[]
}
if
(
item
){
obj
.
name
=
item
.
name
obj
.
data
=
item
.
data
arr
.
push
(
obj
)
}
})
this
.
lineInit
(
obj
.
title
,
obj
.
legend
,
obj
.
xData
,
arr
)
}
}
},
methods
:
{
lineInit
(
title
,
legend
,
xData
,
data
)
{
myChart
=
echarts
.
init
(
document
.
getElementById
(
this
.
id
))
let
option
=
{
title
:
{
text
:
title
,
textStyle
:
{
fontSize
:
'
14
'
}
},
tooltip
:
{
trigger
:
'
axis
'
},
legend
:
{
data
:
legend
},
grid
:
{
left
:
'
3%
'
,
right
:
'
4%
'
,
bottom
:
'
3%
'
,
containLabel
:
true
},
xAxis
:
[
{
type
:
'
category
'
,
boundaryGap
:
false
,
data
:
xData
}
],
yAxis
:
[
{
type
:
'
value
'
}
],
series
:
data
}
myChart
.
setOption
(
option
)
// 让图表跟随屏幕自动的去适应
window
.
addEventListener
(
'
resize
'
,
function
()
{
myChart
.
resize
()
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/business/Component/map/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<div
:id=
"id"
:style=
"
{height: this.height+'px', width: this.width+'px'}">
</div>
</div>
</
template
>
<
script
>
import
axios
from
'
axios
'
import
*
as
echarts
from
'
echarts
'
import
china
from
"
@/assets/json/china.json
"
;
let
myChart
=
null
export
default
{
props
:
{
id
:
{
type
:
String
},
height
:{
type
:
String
|
Number
,
},
width
:{
type
:
String
|
Number
,
},
datas
:
Object
},
data
()
{
return
{
}
},
created
(){
echarts
.
registerMap
(
'
china
'
,
china
);
},
watch
:{
datas
:
function
(
obj
)
{
if
(
obj
){
this
.
mapInit
(
obj
.
title
,
obj
.
data
)
}
}
},
methods
:
{
mapInit
(
name
,
data
)
{
myChart
=
echarts
.
init
(
document
.
getElementById
(
this
.
id
))
let
option
=
{
title
:
{
text
:
name
,
textStyle
:
{
fontSize
:
'
14
'
}
},
tooltip
:
{
trigger
:
'
item
'
,
formatter
:
'
{b}: {c}
'
},
series
:
[
{
name
:
'
china
'
,
type
:
'
map
'
,
map
:
'
china
'
,
label
:
{
show
:
false
},
data
:
data
}
]
}
// axios.get('https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json').then((chinaJson)=>{
// echarts.registerMap('china', chinaJson.data);
// myChart.setOption(option)
// })
myChart
.
setOption
(
option
)
// 让图表跟随屏幕自动的去适应
window
.
addEventListener
(
'
resize
'
,
function
()
{
myChart
.
resize
()
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/business/Component/pie/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<div
:id=
"id"
:style=
"
{height: this.height+'px', width: this.width+'px'}">
</div>
</div>
</
template
>
<
script
>
import
*
as
echarts
from
'
echarts
'
let
myChart
=
null
export
default
{
props
:
{
id
:
{
type
:
String
},
height
:{
type
:
String
|
Number
,
},
width
:{
type
:
String
|
Number
,
},
datas
:
Object
},
data
()
{
return
{
}
},
watch
:{
datas
:
function
(
obj
){
if
(
obj
){
this
.
pieInit
(
obj
.
title
,
obj
.
type
,
obj
.
legend
,
obj
.
data
)
}
}
},
methods
:
{
pieInit
(
name
,
type
,
legend
,
data
)
{
myChart
=
echarts
.
init
(
document
.
getElementById
(
this
.
id
))
let
option
=
{
title
:
{
text
:
name
,
textStyle
:
{
fontSize
:
'
14
'
},
left
:
'
left
'
},
tooltip
:
{
trigger
:
'
item
'
,
formatter
:
'
{a} <br/>{b} : {c} ({d}%)
'
},
legend
:
{
type
:
type
,
orient
:
'
vertical
'
,
right
:
10
,
top
:
20
,
bottom
:
20
,
data
:
legend
},
series
:
[
{
name
:
name
,
type
:
'
pie
'
,
radius
:
'
45%
'
,
center
:
[
'
50%
'
,
'
50%
'
],
data
:
data
,
emphasis
:
{
itemStyle
:
{
shadowBlur
:
10
,
shadowOffsetX
:
0
,
shadowColor
:
'
rgba(0, 0, 0, 0.5)
'
}
}
}
]
};
myChart
.
setOption
(
option
)
// 让图表跟随屏幕自动的去适应
window
.
addEventListener
(
'
resize
'
,
function
()
{
myChart
.
resize
()
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/business/Component/radar/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<div
:id=
"id"
:style=
"
{height: this.height+'px', width: this.width+'px'}">
</div>
</div>
</
template
>
<
script
>
import
*
as
echarts
from
'
echarts
'
let
myChart
=
null
export
default
{
props
:
{
id
:
{
type
:
String
},
height
:{
type
:
String
|
Number
,
},
width
:{
type
:
String
|
Number
,
},
datas
:
Object
},
data
()
{
return
{
}
},
watch
:{
datas
:
function
(
obj
){
if
(
obj
){
this
.
pieInit
(
obj
.
data
)
}
}
},
methods
:
{
pieInit
(
data
)
{
myChart
=
echarts
.
init
(
document
.
getElementById
(
this
.
id
))
let
option
=
{
radar
:
{
// shape: 'circle',
indicator
:
[
{
name
:
'
在线预约
'
,
max
:
100
},
{
name
:
'
现场取号
'
,
max
:
100
},
{
name
:
'
个人申报
'
,
max
:
100
},
{
name
:
'
评价次数
'
,
max
:
100
},
{
name
:
'
意见建议
'
,
max
:
100
},
{
name
:
'
办不成事
'
,
max
:
100
}
]
},
series
:
[
{
type
:
'
radar
'
,
data
:
data
}
]
};
myChart
.
setOption
(
option
)
// 让图表跟随屏幕自动的去适应
window
.
addEventListener
(
'
resize
'
,
function
()
{
myChart
.
resize
()
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/business/analysiscontent/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<a-card
:bordered=
"false"
class=
"mb_15"
>
<template
slot=
"title"
>
<div
class=
"head"
>
<div
class=
"head_title"
>
分析结果
</div>
</div>
</
template
>
<a-row
type=
"flex"
align=
"middle"
>
<a-col
:span=
"4"
>
<div
class=
"f_40 f_center"
>
{{ formState.name }}
</div>
<div
class=
"f_center"
>
业务名称
</div>
</a-col>
<a-col
:span=
"10"
>
<a-form
layout=
"horizontal"
:model=
"formState"
:label-col=
"{span: 4}"
:wrapper-col=
"{span: 20}"
>
<a-form-item
label=
"流水号:"
>
{{ formState.flownum }}
</a-form-item>
<a-form-item
label=
"关联排号:"
>
{{ formState.device_name }}
</a-form-item>
<a-form-item
label=
"受理区域:"
>
<a-tag
v-for=
"(item, index) in formState.region"
:key=
"index"
>
{{ item }}
</a-tag>
</a-form-item>
<a-form-item
label=
"是否延时:"
>
{{ formState.isweek_work ? '是' : '否' }}
</a-form-item>
<a-form-item
label=
"优先叫号:"
>
{{ formState.first ? '是' : '否' }}
</a-form-item>
</a-form>
</a-col>
<a-col
:span=
"10"
>
<a-form
layout=
"horizontal"
:model=
"formState"
:label-col=
"{span: 4}"
:wrapper-col=
"{span: 20}"
>
<a-form-item
label=
"业务级别:"
>
{{ formState.level }}
</a-form-item>
<a-form-item
label=
"父级业务:"
>
{{ formState.parent_name }}
</a-form-item>
<a-form-item
label=
"关联事项:"
>
<a-tag
v-for=
"(item, index) in formState.matter"
:key=
"index"
>
{{ item.matterName }}
</a-tag>
</a-form-item>
<a-form-item
label=
"是否预约:"
>
{{ formState.canorder ? '允许' : '不允许'}}
</a-form-item>
<a-form-item
label=
"验证方式:"
>
{{ }}
</a-form-item>
</a-form>
</a-col>
</a-row>
</a-card>
<a-card
:bordered=
"false"
class=
"mb_15"
>
<
template
slot=
"title"
>
<div
class=
"head"
>
<div
class=
"head_title"
>
使用趋势
</div>
</div>
</
template
>
<
template
#extra
>
<a-select
ref=
"select"
v-model:value=
"useNumber"
:options=
"options"
style=
"width: 120px"
@
change=
"handleChange"
>
</a-select>
</
template
>
<LineChart
:id=
"`one_line`"
:datas=
"lineData"
:height=
"200"
:width=
"1700"
/>
</a-card>
</div>
</template>
<
script
>
import
axios
from
'
axios
'
import
LineChart
from
"
../Component/line/index.vue
"
;
export
default
{
components
:{
LineChart
},
props
:{
},
data
(){
return
{
options
:[
{
value
:
'
0
'
,
label
:
'
今天
'
,
},
{
value
:
'
1
'
,
label
:
'
近7日
'
,
},
{
value
:
'
2
'
,
label
:
'
近30日
'
,
},
{
value
:
'
3
'
,
label
:
'
近3个月
'
,
},
{
value
:
'
4
'
,
label
:
'
本年度
'
,
},
],
lineData
:
{},
useNumber
:
'
0
'
,
checkName
:
''
,
formState
:
{}
}
},
mounted
(){
// this.getAnalysisData()
},
watch
:{
'
$route.query
'
:
{
immediate
:
true
,
handler
(
newVal
,
oldVal
){
this
.
checkName
=
newVal
this
.
getAnalysisData
(
newVal
.
name
)
}
}
},
methods
:
{
async
getAnalysisData
(
name
,
val
)
{
if
(
val
==
undefined
)
{
val
=
0
}
await
axios
.
get
(
'
http://192.168.0.98:8090/inter/statistic/busInfoById
'
,{
params
:
{
bus_name
:
name
,
selected
:
val
}}).
then
((
res
)
=>
{
if
(
res
&&
res
.
status
==
200
){
this
.
formState
=
res
.
data
.
data
console
.
log
(
this
.
formState
)
}
})
},
handleChange
(
val
){
this
.
getAnalysisData
(
this
.
checkName
,
val
)
}
},
}
</
script
>
<
style
lang=
"less"
scoped
>
/deep/ .ant-form-item{
margin-bottom: 0
}
.head{
display: flex;
justify-content: flex-start;
align-items: center;
.head_title{
font-weight: 700;
font-style: normal;
font-size: 1.125rem;
color: #0595FD;
margin-right: 1.25rem;
}
.head_desc{
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #888888;
}
}
.mb_15{
margin-bottom: .9375rem;
}
.f_40{
font-size: 2.5rem;
}
.f_center{
text-align: center;
}
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/business/basecontent/index.vue
0 → 100644
View file @
8d2afe0a
This diff is collapsed.
Click to expand it.
portal-manager-ui/admin/src/views/dataActuary/business/breadcrumb/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<a-breadcrumb
separator=
" > "
class=
"bread"
>
<a-breadcrumb-item
v-for=
"(item) in breadArr"
:key=
"item.path"
>
<span>
{{
item
.
title
}}
</span>
<!--
<router-link
:to=
"
{ path: item.path}">
{{
item
.
title
}}
</router-link>
-->
</a-breadcrumb-item>
</a-breadcrumb>
</div>
</
template
>
<
script
>
export
default
{
data
(){
return
{
// 面包屑导航
breadArr
:
[]
}
},
mounted
(){
this
.
filterBread
()
},
methods
:{
// 面包屑
filterBread
(){
let
newArr
=
[]
this
.
$route
.
matched
.
forEach
(
item
=>
{
if
(
item
.
path
!=
''
){
newArr
.
push
({
path
:
item
.
path
,
title
:
item
.
meta
.
title
})
}
})
this
.
breadArr
=
newArr
},
}
}
</
script
>
<
style
scoped
>
.bread
{
height
:
2.8125rem
;
line-height
:
2.8125rem
;
}
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/business/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div
class=
"Container"
>
<div
class=
"main"
>
<div
class=
"first_card"
>
<div
class=
"breadMenu"
>
<Breadcrumb/>
</div>
<div
class=
"searchBox"
>
<a-auto-complete
v-model=
"businessName"
:data-source=
"dataSource"
optionLabelProp=
"value"
style=
"width: 35.625rem"
placeholder=
"请输入业务名称搜索"
@
select=
"onSelect"
@
search=
"onSearch"
/>
<a-button
type=
"primary"
@
click=
"startAnalysis"
>
开始分析
</a-button>
<a-button
type=
"primary"
v-if=
"btnShow"
@
click=
"backBase"
>
返回
</a-button>
</div>
</div>
<div
class=
"content_view"
>
<router-view
/>
</div>
</div>
</div>
</
template
>
<
script
>
import
_
from
'
lodash
'
import
axios
from
'
axios
'
import
Breadcrumb
from
"
./breadcrumb/index.vue
"
;
export
default
{
components
:{
Breadcrumb
},
data
()
{
return
{
// 搜索框
businessName
:
''
,
dataSource
:
[],
dataList
:
[],
btnShow
:
false
,
}
},
mounted
()
{
this
.
getList
()
},
methods
:{
startAnalysis
()
{
if
(
!
this
.
businessName
){
this
.
$message
.
error
(
'
请输入业务名称搜索
'
)
}
else
{
this
.
$router
.
push
({
path
:
'
analysiscontent
'
,
query
:{
name
:
this
.
businessName
}})
this
.
btnShow
=
true
}
},
backBase
()
{
this
.
$router
.
push
({
path
:
'
basecontent
'
})
this
.
btnShow
=
false
this
.
businessName
=
''
},
async
getList
(){
await
axios
.
get
(
'
http://192.168.0.98:8090/inter/statistic/busList
'
,{
params
:
{
siteid
:
1
}}).
then
((
res
)
=>
{
if
(
res
&&
res
.
status
==
200
){
res
.
data
.
data
.
forEach
(
item
=>
{
this
.
dataList
.
push
(
item
.
name
)
})
}
})
},
onSearch
:
_
.
debounce
(
function
(
val
){
this
.
dataSource
=
[]
this
.
dataList
.
forEach
(
item
=>
{
if
(
item
.
indexOf
(
val
)
!==
-
1
){
this
.
dataSource
.
push
(
item
)
}
})
},
1000
),
onSelect
(
val
){
this
.
businessName
=
val
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
@headerH: 4.5rem;
.Container {
height: 100% !important;
// background: #fac;
background: #f5f5f5;
display: flex;
flex-direction: column;
.main {
// background: #afc;
border-radius: 6px;
flex: 1;
overflow-y: auto;
overflow-x: hidden;
}
&::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;
}
}
/deep/.ant-tabs-bar{
margin: 0;
}
}
.first_card{
background: #FFF;
margin-bottom: .9375rem;
}
.breadMenu{
height: 2.8125rem;
line-height: 2.8125rem;
padding: 0 5rem;
border-bottom: 1px solid rgba(226, 226, 226, 1);
}
.searchBox{
height: 6.25rem;
display: flex;
justify-content: center;
align-items: center;
}
.content_view{
padding: 0 5rem;
}
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/portrayal/breadcrumb/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<a-breadcrumb
separator=
" > "
class=
"bread"
>
<a-breadcrumb-item
v-for=
"(item) in breadArr"
:key=
"item.path"
>
<span>
{{
item
.
title
}}
</span>
<!--
<router-link
:to=
"
{ path: item.path}">
{{
item
.
title
}}
</router-link>
-->
</a-breadcrumb-item>
</a-breadcrumb>
</div>
</
template
>
<
script
>
export
default
{
data
(){
return
{
// 面包屑导航
breadArr
:
[]
}
},
mounted
(){
this
.
filterBread
()
},
methods
:{
// 面包屑
filterBread
(){
let
newArr
=
[]
this
.
$route
.
matched
.
forEach
(
item
=>
{
if
(
item
.
path
!=
''
){
newArr
.
push
({
path
:
item
.
path
,
title
:
item
.
meta
.
title
})
}
})
this
.
breadArr
=
newArr
},
}
}
</
script
>
<
style
scoped
>
.bread
{
height
:
2.8125rem
;
line-height
:
2.8125rem
;
}
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/portrayal/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div
class=
"Container"
>
<div
class=
"main"
>
<div
class=
"first_card"
>
<div
class=
"breadMenu"
>
<Breadcrumb/>
</div>
<div
class=
"searchBox"
>
<a-input
v-model=
"peopleName"
placeholder=
"请输入群众名称搜索"
style=
"width: 35.625rem"
></a-input>
<a-button
type=
"primary"
@
click=
"startAnalysis()"
>
开始分析
</a-button>
<a-button
type=
"primary"
v-if=
"btnShow"
@
click=
"backBase()"
>
返回
</a-button>
</div>
</div>
<div
class=
"content_view"
>
<router-view
/>
</div>
</div>
</div>
</
template
>
<
script
>
import
Breadcrumb
from
"
./breadcrumb/index.vue
"
;
export
default
{
components
:{
Breadcrumb
},
data
()
{
return
{
// 搜索框
peopleName
:
''
,
btnShow
:
false
,
}
},
methods
:{
startAnalysis
()
{
this
.
peopleName
=
''
this
.
$router
.
push
({
path
:
'
portrayalAnalysis
'
})
this
.
btnShow
=
true
},
backBase
()
{
this
.
peopleName
=
''
this
.
$router
.
push
({
path
:
'
portrayalBase
'
})
this
.
btnShow
=
false
},
}
}
</
script
>
<
style
lang=
"less"
scoped
>
@headerH: 4.5rem;
.Container {
height: 100% !important;
// background: #fac;
background: #f5f5f5;
display: flex;
flex-direction: column;
.main {
// background: #afc;
border-radius: 6px;
flex: 1;
overflow-y: auto;
overflow-x: hidden;
}
&::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;
}
}
/deep/.ant-tabs-bar{
margin: 0;
}
}
.first_card{
background: #FFF;
margin-bottom: .9375rem;
}
.breadMenu{
height: 2.8125rem;
line-height: 2.8125rem;
padding: 0 5rem;
border-bottom: 1px solid rgba(226, 226, 226, 1);
}
.searchBox{
height: 6.25rem;
display: flex;
justify-content: center;
align-items: center;
}
.content_view{
padding: 0 5rem;
}
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/portrayal/portrayalAnalysis/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<a-card
:bordered=
"false"
class=
"mb_15"
>
<template
slot=
"title"
>
<div
class=
"head"
>
<div
class=
"head_title"
>
分析结果
</div>
</div>
</
template
>
<a-row>
<a-col
:span=
"8"
>
<div
class=
"inside_card"
>
<div
class=
"head_title mb_15"
>
用户信息
</div>
<a-form
layout=
"horizontal"
:model=
"formState"
:label-col=
"{span: 4}"
:wrapper-col=
"{span: 20}"
>
<a-form-item
label=
"openID:"
>
{{ formState.openId }}
</a-form-item>
<a-form-item
label=
"微信昵称:"
>
{{ formState.name }}
</a-form-item>
<a-form-item
label=
"城市:"
>
{{ formState.city }}
</a-form-item>
<a-form-item
label=
"联系电话:"
>
{{ formState.phone }}
</a-form-item>
<a-form-item
label=
"身份证号:"
>
{{ formState.ID }}
</a-form-item>
<a-form-item
label=
"注册时间:"
>
{{ formState.registerTime }}
</a-form-item>
<a-form-item
label=
"注册来源:"
>
{{ formState.source }}
</a-form-item>
<a-form-item
label=
"户籍地址:"
>
{{ formState.address }}
</a-form-item>
</a-form>
</div>
<div
class=
"inside_card"
>
<div
class=
"head_title mb_15"
>
关键数据
</div>
<a-form
layout=
"horizontal"
:model=
"formState"
:label-col=
"{span: 4}"
:wrapper-col=
"{span: 20}"
>
<a-form-item
label=
"预约最多:"
>
{{ formState.appointment.name }}({{ formState.appointment.value }})
</a-form-item>
<a-form-item
label=
"取号最多:"
>
{{ formState.appointment.name }}({{ formState.appointment.value }})
</a-form-item>
<a-form-item
label=
"申报最多:"
>
{{ formState.appointment.name }}({{ formState.appointment.value }})
</a-form-item>
<a-form-item
label=
"小程序最多:"
>
{{ formState.appointment.name }}({{ formState.appointment.value }})
</a-form-item>
</a-form>
<div
class=
"evaluate_box"
>
<div
class=
"good_box"
>
<div
class=
"good_title"
>
{{ formState.good.value }}({{ formState.good.percent }}%)
</div>
<div
class=
"good_desc"
>
好评次数
</div>
</div>
<div
class=
"bad_box"
>
<div
class=
"bad_title"
>
{{ formState.bad.value }}({{ formState.bad.percent }}%)
</div>
<div
class=
"bad_desc"
>
差评次数
</div>
</div>
</div>
</div>
</a-col>
<a-col
:span=
"8"
class=
"f_center"
>
<img
src=
"http://sy.scsmile.cn/YX-4.0/03-02YHHXTP/images/%E7%BE%A4%E4%BC%97%E5%88%86%E6%9E%90/u1433.png"
alt=
""
style=
"height: 31.25rem"
>
<div
class=
"information"
>
<div
class=
"info_name"
>
神奇小伙
<a-tag
color=
"green"
class=
"info_tag"
>
实名认证
</a-tag>
</div>
<a-row>
<a-col
:span=
"8"
>
年龄:18
</a-col>
<a-col
:span=
"8"
>
性别:未知
</a-col>
<a-col
:span=
"8"
>
民族:氪族
</a-col>
</a-row>
<div>
点击查看区块链信息
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"inside_card"
>
<Radar
:id=
"`radar`"
:height=
"350"
:width=
"500"
:datas=
"radarData"
/>
</div>
<div>
</div>
</a-col>
</a-row>
</a-card>
</div>
</template>
<
script
>
import
Radar
from
"
../../business/Component/radar/index.vue
"
;
export
default
{
components
:
{
Radar
},
data
(){
return
{
options
:[
{
value
:
'
0
'
,
label
:
'
今天
'
,
},
{
value
:
'
1
'
,
label
:
'
近7日
'
,
},
{
value
:
'
2
'
,
label
:
'
近30日
'
,
},
{
value
:
'
3
'
,
label
:
'
近3个月
'
,
},
{
value
:
'
4
'
,
label
:
'
本年度
'
,
},
],
radarData
:
{},
useNumber
:
'
0
'
,
formState
:
{
openId
:
'
4568782121245
'
,
name
:
'
张张那个张
'
,
city
:
'
四川省成都市
'
,
phone
:
'
13088088888
'
,
ID
:
'
513822199302034567
'
,
registerTime
:
'
2023-03-01 10:00:00
'
,
source
:
'
排队叫号系统
'
,
address
:
'
四川省宜宾市叙州区林南路23号
'
,
appointment
:
{
name
:
'
机动车违章业务办理
'
,
value
:
'
25
'
},
good
:
{
value
:
'
36
'
,
percent
:
'
20
'
},
bad
:
{
value
:
'
2
'
,
percent
:
'
10
'
}
}
}
},
mounted
(){
this
.
getRadarData
()
},
methods
:
{
handleChange
()
{},
getRadarData
()
{
this
.
radarData
=
{
data
:
[
{
value
:
[
42
,
30
,
20
,
35
,
50
,
18
],
name
:
'
偏好
'
,
areaStyle
:
{
color
:
'
#a6c5fc
'
}
},
]
}
}
},
}
</
script
>
<
style
lang=
"less"
scoped
>
/deep/ .ant-form-item{
margin-bottom: 0
}
.head{
display: flex;
justify-content: flex-start;
align-items: center;
}
.head_title{
font-weight: 700;
font-style: normal;
font-size: 1.125rem;
color: #0595FD;
margin-right: 1.25rem;
}
.head_desc{
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #888888;
}
.inside_card{
background: #f3faff;
margin: .9375rem;
padding: .9375rem;
}
.evaluate_box{
display: flex;
justify-content: space-around;
align-items: center;
margin-top: 1.25rem;
}
.good_box{
width: 10rem;
background: #d0f3ee;
text-align: center;
padding: .9375rem;
.good_title{
font-size: 1.25rem;
font-weight: 400;
font-style: normal;
color: #04CA8F;
margin-bottom: .625rem;
}
.good_desc{
font-size: .875rem;
font-weight: 400;
font-style: normal;
color: #04CA8F;
}
}
.bad_box{
width: 10rem;
background: #f5e3e7;
text-align: center;
padding: .9375rem;
.bad_title{
font-size: 1.25rem;
font-weight: 400;
font-style: normal;
color: #FF5F5F;
margin-bottom: .625rem;
}
.bad_desc{
font-size: .875rem;
font-weight: 400;
font-style: normal;
color: #FF5F5F;
}
}
.information{
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: space-around;
height: 200px;
}
.info_name{
position: relative;
font-size: 2.5rem;
}
.info_tag{
position: absolute;
top: .9375rem;
margin-left: .9375rem;
}
.mb_15{
margin-bottom: .9375rem;
}
.f_40{
font-size: 2.5rem;
}
.f_center{
text-align: center;
}
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/portrayal/portrayalBase/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div>
<a-card
:bordered=
"false"
class=
"mb_15"
>
<template
slot=
"title"
>
<div
class=
"head"
>
<div
class=
"head_title"
>
整体情况
</div>
<div
class=
"head_desc"
>
更新时间:
{{
nowDate
}}
</div>
</div>
</
template
>
<a-row
type=
"flex"
align=
"middle"
>
<a-col
:span=
"4"
>
<div
class=
"f_40 f_center warning"
>
111
</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"
/>
</a-col>
</a-row>
</a-card>
<a-card
:bordered=
"false"
class=
"mb_15"
>
<
template
slot=
"title"
>
<div
class=
"head"
>
<div
class=
"head_title"
>
注册用户理解
</div>
<div
class=
"head_desc"
></div>
</div>
</
template
>
<a-row>
<a-col
:span=
"8"
>
<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>
</a-col>
<a-col
:span=
"8"
>
<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"
/>
</a-col>
<a-col
:span=
"12"
>
<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"
/>
</a-col>
<a-col
:span=
"12"
>
<pieChart
:id=
"`three_pie`"
:height=
"300"
:width=
"800"
:datas=
"threePieData"
/>
</a-col>
<a-col
:span=
"12"
>
</a-col>
<a-col
:span=
"12"
>
</a-col>
</a-row>
</a-card>
<a-card
:bordered=
"false"
class=
"mb_15"
>
<
template
slot=
"title"
>
<div
class=
"head"
>
<div
class=
"head_title"
>
办件用户理解
</div>
<div
class=
"head_desc"
></div>
</div>
</
template
>
<a-row
type=
"flex"
align=
"middle"
>
<a-row>
<a-col
:span=
"8"
>
<map-chart
:id=
"`two_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>
</a-col>
<a-col
:span=
"8"
>
<pieChart
:id=
"`four_pie`"
:height=
"400"
:width=
"550"
:datas=
"onePieData"
/>
</a-col>
<a-col
:span=
"12"
>
<doublePieChart
:id=
"`five_pie`"
:height=
"300"
:width=
"800"
:datas=
"twoPieData"
/>
</a-col>
<a-col
:span=
"12"
>
<barChart
:id=
"`six_bar`"
:height=
"300"
:width=
"800"
:datas=
"oneBarData"
/>
</a-col>
<a-col
:span=
"12"
>
<barChart
:id=
"`three_bar`"
:height=
"300"
:width=
"800"
:datas=
"twoBarData"
/>
</a-col>
<a-col
:span=
"12"
>
<pieChart
:id=
"`six_pie`"
:height=
"300"
:width=
"800"
:datas=
"threePieData"
/>
</a-col>
<a-col
:span=
"12"
>
</a-col>
<a-col
:span=
"12"
>
</a-col>
</a-row>
</a-row>
</a-card>
</div>
</template>
<
script
>
import
barChart
from
'
../../business/Component/bar/index.vue
'
import
doublePieChart
from
"
../../business/Component/doublePie/index.vue
"
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
:{
mapChart
,
pieChart
,
lineChart
,
doublePieChart
,
barChart
},
data
(){
return
{
options
:[
{
value
:
'
0
'
,
label
:
'
今天
'
,
},
{
value
:
'
1
'
,
label
:
'
近7日
'
,
},
{
value
:
'
2
'
,
label
:
'
近30日
'
,
},
{
value
:
'
3
'
,
label
:
'
近3个月
'
,
},
{
value
:
'
4
'
,
label
:
'
本年度
'
,
},
],
oneLineData
:
{},
oneMapData
:
{},
onePieData
:
{},
twoPieData
:
{},
oneBarData
:
{},
twoBarData
:
{},
threePieData
:
{},
provinces
:
[
{
ranking
:
1
,
province
:
'
四川省
'
,
people
:
'
999
'
,
percent
:
'
2
'
},
{
ranking
:
2
,
province
:
'
四川省
'
,
people
:
'
999
'
,
percent
:
'
2
'
},
],
provincesColumns
:
[
{
key
:
'
ranking
'
,
title
:
'
序号
'
,
dataIndex
:
'
ranking
'
,
},
{
key
:
'
province
'
,
title
:
'
省份
'
,
dataIndex
:
'
province
'
,
},
{
key
:
'
people
'
,
title
:
'
注册人数
'
,
dataIndex
:
'
people
'
,
},
{
key
:
'
percent
'
,
title
:
'
注册占比
'
,
dataIndex
:
'
percent
'
,
},
],
takeNumber
:
'
0
'
,
nowDate
:
''
}
},
mounted
(){
this
.
test
()
},
methods
:{
handleChange
(){},
toTable
(){
this
.
$router
.
push
({
path
:
'
register
'
})
},
test
(){
this
.
nowDate
=
moment
(
new
Date
()).
format
(
'
YYYY-MM-DD h:mm:ss
'
)
this
.
oneLineData
=
{
title
:
'
近30日注册情况分析:
'
,
legend
:
[
'
自助服务系统注册人数
'
,
'
微官网注册人数
'
,
'
排队系统注册人数
'
],
xData
:
[
'
3-15
'
,
'
3-16
'
,
'
3-17
'
,
'
3-18
'
,
'
3-19
'
,
'
3-20
'
],
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
]},
]
}
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
},
]
}
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
},
]
}
this
.
twoPieData
=
{
title
:
'
本地人与外地人注册分布
'
,
pieName
:
'
分布详情
'
,
firstName
:
'
宜宾市本地人注册占比
'
,
firstVal
:
'
1
'
,
firstTotal
:
'
10
'
,
secondName
:
'
外地人注册占比
'
,
secondVal
:
'
1
'
,
secondTotal
:
'
10
'
,
}
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
]},
]
}
this
.
twoBarData
=
{
title
:
'
年龄分布
'
,
xData
:
[
'
1-10
'
,
'
10-20
'
,
'
20-30
'
,
'
30-40
'
,
'
40-50
'
],
data
:
[
{
name
:
'
办理次数
'
,
type
:
'
bar
'
,
data
:
[
150
,
232
,
201
,
154
,
190
,
330
,
410
]},
{
name
:
'
占比
'
,
type
:
'
line
'
,
data
:
[
220
,
182
,
191
,
234
,
290
,
330
,
310
]},
]
}
this
.
threePieData
=
{
title
:
'
民族分布
'
,
type
:
''
,
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
},
]
}
}
}
}
</
script
>
<
style
scoped
lang=
"less"
>
.head{
display: flex;
justify-content: flex-start;
align-items: center;
.head_title{
font-weight: 700;
font-style: normal;
font-size: 1.125rem;
color: #0595FD;
margin-right: 1.25rem;
}
.head_desc{
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #888888;
}
}
/deep/ .ant-table{
width: 100% !important;
}
.f_20{
font-size: 1.25rem;
}
.f_40{
font-size: 2.5rem;
}
.f_center{
text-align: center;
}
.warning{
color: #FD6805
}
.primary{
color: #0595FD
}
.success{
color: #04CA8F
}
.h_200{
height: 12.5rem;
}
.mb_15{
margin-bottom: .9375rem;
}
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataActuary/portrayal/register/index.vue
0 → 100644
View file @
8d2afe0a
<
template
>
<div
class=
"Container"
>
<div
class=
"main"
>
<div
class=
"first_card"
>
<div
class=
"breadMenu"
>
<Breadcrumb/>
</div>
</div>
<div
class=
"content_view"
>
<a-card
:bordered=
"false"
class=
"mb_15"
>
<template
slot=
"title"
>
<div
class=
"head"
>
<div
class=
"head_title"
>
注册列表
</div>
<div
class=
"head_desc"
>
更新时间:
</div>
</div>
</
template
>
<
template
#extra
>
<a-button
@
click=
""
>
返回
</a-button>
</
template
>
<div
style=
"display: flex;justify-content: space-between;align-items: center;"
>
<a-button
type=
"primary"
>
导出
</a-button>
<diV>
<a-form
layout=
"inline"
:model=
"seacrhForm"
>
<a-form-item>
<a-select
v-model=
"selectVal"
:options=
"options"
></a-select>
</a-form-item>
<a-form-item>
<a-range-picker
:locale=
"locale"
/>
</a-form-item>
<a-form-item>
<a-input
placeholder=
"请输入昵称关键字查询"
/>
</a-form-item>
<a-form-item>
<a-button
type=
"primary"
>
搜索
</a-button>
</a-form-item>
</a-form>
</diV>
</div>
<a-table
:rowSelection=
"rowSelection"
:dataSource=
"peopleList"
:columns=
"peopleListColumns"
>
</a-table>
</a-card>
</div>
</div>
</div>
</template>
<
script
>
import
locale
from
'
ant-design-vue/es/date-picker/locale/zh_CN
'
;
import
Breadcrumb
from
"
../breadcrumb/index.vue
"
;
export
default
{
components
:{
Breadcrumb
},
data
(){
return
{
locale
,
selectVal
:
'
all
'
,
options
:[
{
value
:
'
all
'
,
label
:
'
全部
'
,
},
{
value
:
'
yes
'
,
label
:
'
实名认证
'
,
},
{
value
:
'
no
'
,
label
:
'
未实名认证
'
,
},
],
seacrhForm
:
{},
rowSelection
:
{},
peopleList
:
[],
peopleListColumns
:
[
{
key
:
''
,
dataIndex
:
''
,
title
:
'
序号
'
,
align
:
'
center
'
,
width
:
100
,
fixed
:
'
left
'
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
真实姓名
'
,
align
:
'
center
'
,
width
:
100
,
fixed
:
'
left
'
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
注册来源
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
身份证号
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
手机号码
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
性别
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
民族
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
户籍地址
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
openID
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
普通用户昵称
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
普通用户城市
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
用户头像
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
授权时间
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
是否实名认证
'
,
align
:
'
center
'
,
},
{
key
:
''
,
dataIndex
:
''
,
title
:
'
操作
'
,
align
:
'
center
'
,
width
:
200
,
fixed
:
'
right
'
},
]
}
},
methods
:{
}
}
</
script
>
<
style
lang=
"less"
scoped
>
@headerH: 4.5rem;
.Container {
height: 100% !important;
// background: #fac;
background: #f5f5f5;
display: flex;
flex-direction: column;
.main {
// background: #afc;
border-radius: 6px;
flex: 1;
overflow-y: auto;
overflow-x: hidden;
}
&::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;
}
}
/deep/.ant-tabs-bar{
margin: 0;
}
}
/deep/ .ant-table{
width: 100% !important;
}
.first_card{
background: #FFF;
margin-bottom: .9375rem;
}
.breadMenu{
height: 2.8125rem;
line-height: 2.8125rem;
padding: 0 5rem;
border-bottom: 1px solid rgba(226, 226, 226, 1);
}
.searchBox{
height: 6.25rem;
display: flex;
justify-content: center;
align-items: center;
}
.content_view{
padding: 0 5rem;
}
.head{
display: flex;
justify-content: flex-start;
align-items: center;
.head_title{
font-weight: 700;
font-style: normal;
font-size: 1.125rem;
color: #0595FD;
margin-right: 1.25rem;
}
.head_desc{
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #888888;
}
}
</
style
>
\ No newline at end of file
portal-manager-ui/admin/src/views/dataAdmin/components/makeRecordReport/makeRecordReport.vue
View file @
8d2afe0a
...
...
@@ -144,6 +144,13 @@ let statusItem = {
2
:
"
超时未取号
"
,
3
:
"
预约取消
"
,
};
const
style
=
{
0
:
"
排队中
"
,
1
:
"
办理中
"
,
2
:
"
办理中
"
,
3
:
"
办理中
"
,
4
:
"
办理完成
"
,
}
export
default
{
name
:
"
PortalAdminVueMakeRecordReport
"
,
data
()
{
...
...
@@ -231,6 +238,7 @@ export default {
filterVal
,
tableHeaders
,
statusItem
,
style
,
btnLoading
:
false
,
searchForm
:
{
status
:
""
,
...
...
@@ -268,10 +276,11 @@ export default {
this
.
getOrderList
();
}
this
.
tableSourceData
=
data
.
map
((
v
)
=>
{
delete
v
.
people
.
id
;
v
.
people
&&
delete
v
.
people
.
id
;
return
{
...
v
,
...
v
.
people
};
});
this
.
total
=
total
;
return
this
.
tableSourceData
;
}
},
...
...
@@ -339,7 +348,7 @@ export default {
for
(
let
item
of
data
)
{
Object
.
keys
(
this
.
statusItem
).
forEach
((
key
)
=>
{
if
(
item
.
status
==
key
)
{
item
.
status
=
this
.
statusItem
[
key
];
item
.
status
=
item
.
status
==
1
?
this
.
style
[
item
.
style
]:
this
.
statusItem
[
key
];
}
});
}
...
...
@@ -351,7 +360,7 @@ export default {
for
(
let
item
of
data
)
{
Object
.
keys
(
this
.
statusItem
).
forEach
((
key
)
=>
{
if
(
item
.
status
==
key
)
{
item
.
status
=
this
.
statusItem
[
key
];
item
.
status
=
item
.
status
==
1
?
this
.
style
[
item
.
style
]:
this
.
statusItem
[
key
];
}
});
}
...
...
portal-manager-ui/admin/src/views/dataAdmin/components/makeRecordReport/recordReportdetails.vue
View file @
8d2afe0a
...
...
@@ -48,8 +48,8 @@
<!--
<p
v-for=
"item of 3"
>
事项1:生育证津贴办理
</p>
-->
</div>
<div
class=
"right_"
>
<span
class=
"status
1"
v-if=
"orderInfo.status != 1"
>
未签到
</span>
<span
class=
"status
2"
v-else
>
排队中
</span>
<span
class=
"status
2"
v-if=
"orderInfo.status == 1"
>
{{
style
[
orderInfo
.
style
]
}}
</span>
<span
class=
"status
1"
v-else
>
{{
statusItem
[
orderInfo
.
status
]
}}
</span>
</div>
</div>
<div
class=
"box2"
>
...
...
@@ -130,12 +130,20 @@ let statusItem = {
2
:
"
超时未取号
"
,
3
:
"
预约取消
"
,
};
const
style
=
{
0
:
"
排队中
"
,
1
:
"
办理中
"
,
2
:
"
办理中
"
,
3
:
"
办理中
"
,
4
:
"
办理完成
"
,
}
export
default
{
name
:
"
PortalAdminVueRecordReportdetails
"
,
data
()
{
return
{
orderStatus
,
statusItem
,
style
,
orderInfo
:
{},
// 预约信息
};
},
...
...
portal-manager-ui/admin/yarn.lock
View file @
8d2afe0a
This diff is collapsed.
Click to expand it.
portal-manager/doc/api.md
View file @
8d2afe0a
...
...
@@ -5465,13 +5465,15 @@ data|object|数据对象
productId|Long|是|产品id
dateTimeStart|String|是|开始时间
dateTimeStart|String|是|结束时间
businessCode|String|否|业务功能code,多个code使用","隔开
**请求样例:**
```
{
"productId":1,
"dateTimeStart":"2023-04-10",
"dateTimeEnd":"2023-05-11"
"dateTimeEnd":"2023-05-11",
"businessCode":"非必填,业务功能code,多个code使用逗号隔开"
}
```
...
...
@@ -5537,6 +5539,8 @@ data|array|数据对象
productId|Long|是|产品id
dateTimeStart|String|是|开始时间
dateTimeStart|String|是|结束时间
particleType|int|是|时间颗粒度 1:10分钟,2:30分钟,3:1小时
isRatio|int|是|是否开启日对比1是0否
**请求样例:**
```
...
...
portal-manager/src/main/java/com/mortals/xhx/module/page/web/BuryPointController.java
View file @
8d2afe0a
package
com.mortals.xhx.module.page.web
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.annotation.RepeatSubmit
;
import
com.mortals.framework.annotation.UnAuth
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.service.IUser
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.framework.web.BaseJsonBodyController
;
import
com.mortals.xhx.module.page.model.PageInfoEntity
;
import
com.mortals.xhx.module.page.model.PageRouteEntity
;
import
com.mortals.xhx.module.page.model.pdu.AccessPdu
;
import
com.mortals.xhx.module.page.model.pdu.BuryPointPdu
;
import
com.mortals.xhx.module.page.service.*
;
import
org.apache.commons.collections4.CollectionUtils
;
...
...
@@ -20,7 +17,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.*
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* 页面埋点
...
...
portal-manager/src/main/java/com/mortals/xhx/module/page/web/PageInfoController.java
View file @
8d2afe0a
package
com.mortals.xhx.module.page.web
;
import
com.mortals.framework.annotation.UnAuth
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.common.pdu.RespData
;
import
com.mortals.xhx.common.pdu.product.ProductPdu
;
import
com.mortals.xhx.feign.product.IProductFeign
;
import
com.mortals.xhx.module.page.model.PageInfoEntity
;
import
com.mortals.xhx.module.page.service.PageInfoService
;
import
com.mortals.xhx.module.param.service.ParamService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
*
...
...
@@ -23,6 +32,8 @@ public class PageInfoController extends BaseCRUDJsonBodyMappingController<PageIn
@Autowired
private
ParamService
paramService
;
@Autowired
private
IProductFeign
productFeign
;
public
PageInfoController
(){
super
.
setModuleDesc
(
"产品页面配置"
);
...
...
@@ -34,5 +45,35 @@ public class PageInfoController extends BaseCRUDJsonBodyMappingController<PageIn
super
.
init
(
model
,
context
);
}
@PostMapping
({
"product/list"
})
@UnAuth
public
Rest
<
Object
>
list
(
@RequestBody
ProductPdu
query
)
{
Rest
<
Object
>
ret
=
new
Rest
();
Map
<
String
,
Object
>
model
=
new
HashMap
();
Context
context
=
this
.
getContext
();
String
busiDesc
=
"查询产品列表"
;
int
code
;
try
{
Rest
<
RespData
<
List
<
ProductPdu
>>>
result
=
productFeign
.
list
(
query
);
code
=
result
.
getCode
();
if
(
code
>
0
)
{
model
.
put
(
"data"
,
result
.
getData
().
getData
());
model
.
put
(
"pageInfo"
,
result
.
getData
().
getPageInfo
());
model
.
put
(
"dict"
,
result
.
getData
().
getDict
());
}
model
.
put
(
"message_info"
,
busiDesc
+
"成功"
);
this
.
recordSysLog
(
this
.
request
,
busiDesc
+
" 【成功】"
);
}
catch
(
Exception
var9
)
{
code
=
-
1
;
this
.
doException
(
this
.
request
,
busiDesc
,
model
,
var9
);
}
ret
.
setCode
(
code
);
ret
.
setData
(
model
);
ret
.
setDict
(
model
.
get
(
"dict"
));
ret
.
setMsg
(
model
.
get
(
"message_info"
)
==
null
?
""
:
model
.
remove
(
"message_info"
).
toString
());
return
ret
;
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment