Commit dd777f3c authored by “yiyousong”'s avatar “yiyousong”
parents 66397328 e09aecae
......@@ -62,48 +62,6 @@
</properties>
</profile>
<profile>
<id>yibin-test</id>
<properties>
<profiles.active>yibin-test</profiles.active>
<profiles.server.path>/base</profiles.server.path>
<profiles.publish.path>/home/publish</profiles.publish.path>
<profiles.rabbitmq.host>127.0.0.1</profiles.rabbitmq.host>
<profiles.rabbitmq.port>5672</profiles.rabbitmq.port>
<profiles.rabbitmq.username>taxi_mq</profiles.rabbitmq.username>
<profiles.rabbitmq.password>admin@2020</profiles.rabbitmq.password>
<profiles.rabbitmq.virtualhost>/</profiles.rabbitmq.virtualhost>
<profiles.nacos.server-addr>127.0.0.1:8848</profiles.nacos.server-addr>
<profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
<profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
<profiles.log.level>INFO</profiles.log.level>
<package.environment>test</package.environment>
<skipUi>false</skipUi>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<profiles.active>product</profiles.active>
<profiles.server.path>/base</profiles.server.path>
<profiles.server.port>17211</profiles.server.port>
<profiles.publish.path>/home/publish</profiles.publish.path>
<profiles.rabbitmq.host>192.168.0.251</profiles.rabbitmq.host>
<profiles.rabbitmq.port>5672</profiles.rabbitmq.port>
<profiles.rabbitmq.username>root_mq</profiles.rabbitmq.username>
<profiles.rabbitmq.password>xhx@2022</profiles.rabbitmq.password>
<profiles.rabbitmq.virtualhost>/</profiles.rabbitmq.virtualhost>
<profiles.nacos.server-addr>127.0.0.1:8848</profiles.nacos.server-addr>
<profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
<profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
<profiles.log.level>INFO</profiles.log.level>
<package.environment>build</package.environment>
<skipUi>true</skipUi>
</properties>
</profile>
<profile>
<id>yibin</id>
<properties>
......
......@@ -496,11 +496,16 @@ public class SiteServiceImpl extends AbstractCRUDCacheServiceImpl<SiteDao, SiteE
*/
@Override
public Rest<List<SiteEntity>> getAreaSitesByAreaLevel(SiteQuery query, Context context) {
if (!ObjectUtils.isEmpty(query.getSiteName())) {
SiteEntity siteEntity = this.selectOne(new SiteQuery().siteName(query.getSiteName()));
if (!ObjectUtils.isEmpty(siteEntity)) {
query.setAreaLevel(siteEntity.getAreaLevel());
}
}
//获取所有层级的区域
List<AreaEntity> areaEntities = areaService.find(new AreaQuery().areaLevel(query.getAreaLevel()));
List<SiteEntity> list = new ArrayList<>();
for (AreaEntity areaEntity : areaEntities) {
List<SiteEntity> siteEntityList = this.find(new SiteQuery().areaCode(areaEntity.getAreaCode()));
......
......@@ -158,14 +158,23 @@ public class SiteController extends BaseCRUDJsonBodyMappingController<SiteServic
JSONObject jsonObject = new JSONObject();
String busiDesc = "根据区域编码查询站点列表" + this.getModuleDesc();
try {
// AreaEntity areaEntity = areaService.selectOne(new AreaQuery().name(site.getAreaName()));
// if(!ObjectUtils.isEmpty(areaEntity)){
// site.setAreaCode(areaEntity.getAreaCode());
// }
if (!ObjectUtils.isEmpty(site.getSiteName())) {
SiteEntity siteEntity = this.service.selectOne(new SiteQuery().siteName(site.getSiteName()));
if (!ObjectUtils.isEmpty(siteEntity)) {
site.setAreaCode(siteEntity.getAreaCode());
}
}
if (!ObjectUtils.isEmpty(site.getAreaName())) {
AreaEntity areaEntity = areaService.selectOne(new AreaQuery().name(site.getAreaName()));
if (!ObjectUtils.isEmpty(areaEntity)) {
site.setAreaCode(areaEntity.getAreaCode());
}
}
List<SiteEntity> siteEntityList = this.service.getFlatSitesByAreaCode(site.getAreaCode(), getContext());
if(!ObjectUtils.isEmpty(site.getSiteName())){
siteEntityList=siteEntityList.stream().filter(item->site.getSiteName().equals(item.getSiteName())).collect(Collectors.toList());
if (!ObjectUtils.isEmpty(site.getSiteName())) {
siteEntityList = siteEntityList.stream().filter(item -> site.getSiteName().equals(item.getSiteName())).collect(Collectors.toList());
}
recordSysLog(request, busiDesc + " 【成功】");
......
package com.mortals.xhx.module.workman.service;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.ICRUDCacheService;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.module.workman.dao.WorkmanDao;
import com.mortals.xhx.module.workman.model.WorkmanEntity;
/**
* WorkmanService
*
* 工作人员 service接口
*
* @author zxfei
* @date 2022-01-12
*/
public interface WorkmanService extends ICRUDCacheService<WorkmanEntity,Long> {
* WorkmanService
* <p>
* 工作人员 service接口
*
* @author zxfei
* @date 2022-01-12
*/
public interface WorkmanService extends ICRUDCacheService<WorkmanEntity, Long> {
WorkmanDao getDao();
/**
* 工作人员登录
*
* @param loginName 登录用户名
* @param password 登录密码
* @param ip ip地址
* @param ip ip地址
* @return
* @throws AppException
*/
WorkmanEntity doLogin(String loginName, String password,String ip) throws AppException;
WorkmanEntity doLogin(String loginName, String password, String ip) throws AppException;
/**
......@@ -43,10 +47,7 @@ public interface WorkmanService extends ICRUDCacheService<WorkmanEntity,Long> {
boolean updateUserPwd(String loginName, String newPwd) throws AppException;
Rest<Void> doImportPic(String filePath) throws AppException;
}
\ No newline at end of file
......@@ -265,7 +265,7 @@ public class WorkmanServiceImpl extends AbstractCRUDCacheServiceImpl<WorkmanDao,
}
public static void main(String[] args) throws Exception {
System.out.println(SecurityUtil.md5DoubleEncoding(""));
System.out.println(SecurityUtil.md5DoubleEncoding("123456"));
}
......
......@@ -97,8 +97,7 @@ public class WorkmanController extends BaseCRUDJsonBodyMappingController<Workman
WorkmanEntity workmanEntity = this.service.doLogin(query.getLoginName(), query.getLoginPwd(), ip);
workmanEntity.setLastLoginAddress(ip);
workmanEntity.setLastLoginTime(new Date());
this.service.update(workmanEntity,getContext());
this.service.getDao().update(workmanEntity);
if (query.getSiteId() != workmanEntity.getSiteId()) {
throw new AppException("当前工作人员不在当前站点下!");
}
......
......@@ -3,7 +3,7 @@ POST {{baseUrl}}/workman/doLogin
Content-Type: application/json
{
"loginName":"gxj" ,
"loginName":"zengxia",
"loginPwd":"123456"
}
......@@ -20,12 +20,11 @@ Content-Type: application/json
###工作人员更新与保存
POST {{baseUrl}}/workman/save
Authorization: {{authToken}}
Content-Type: application/json
{
"loginName":"workman1",
"loginPwd": "123456"
"loginName":"zengxia",
"loginPwd": "123"
}
> {%
......
......@@ -7973,6 +7973,22 @@
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true
},
"v-viewer": {
"version": "1.6.4",
"resolved": "https://registry.npmmirror.com/v-viewer/-/v-viewer-1.6.4.tgz",
"integrity": "sha512-LVkiUHpmsbsZXebeNXnu8krRCi5i2n07FeLFxoIVGhw8lVvTBO0ffpbDC6mLEuacCjrIh09HjIqpciwUtWE8lQ==",
"requires": {
"throttle-debounce": "^2.0.1",
"viewerjs": "^1.5.0"
},
"dependencies": {
"throttle-debounce": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
"integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ=="
}
}
},
"validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
......@@ -7989,6 +8005,11 @@
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"dev": true
},
"viewerjs": {
"version": "1.11.3",
"resolved": "https://registry.npmmirror.com/viewerjs/-/viewerjs-1.11.3.tgz",
"integrity": "sha512-efG3U61Umuj/1x6JAtdvnY9m407C/RkrkFilsMcLEWKDivpjNU3/FeL+feCY1Vkur9aQeBJ+z6K4CCPP7hv6vA=="
},
"vue": {
"version": "2.7.14",
"resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz",
......
......@@ -25,6 +25,7 @@
"lodash": "^4.17.21",
"moment": "^2.29.4",
"qs": "^6.10.3",
"v-viewer": "^1.6.4",
"vue": "^2.6.14",
"vue-highlightjs": "^1.3.3",
"vue-router": "^3.5.1",
......
......@@ -18,4 +18,12 @@ 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
......@@ -41,6 +41,10 @@ Vue.prototype.$codeMap = codeMap;
Vue.prototype.$bus = new Vue();
Vue.config.productionTip = false;
// 图片预约
import Viewer from 'v-viewer'
import 'viewerjs/dist/viewer.css'
Vue.use(Viewer);
new Vue({
router,
store,
......
......@@ -2,5 +2,7 @@ export default{
//排队叫号字典
"queueState":{"0":"排队中","1":"办理中","4":"接待结束"},
"takeNumWay":{"0":"现场取号","1":"在线取号"},
"wy_signin":{"0":"现场取号","1":"在线取号"},
"register_type":{"Applets":"小程序","wechat":"公众号","app":"自助服务终端"},
"politicalStatus":{"0":"中共党员","1":"中共预备党员","2":"共青团员","3":"普通居民","4":"其它"}
}
\ No newline at end of file
......@@ -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-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-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,33 +43,56 @@
<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>
</div>
</template>
<script>
<script>
import {getInformationFlow} 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'),
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: 'address5',
dataIndex: 'accessCount',
align: "center",
scopedSlots: {
customRender: "访问人数",
},
},{
title: '打开次数',
dataIndex: 'address4',
dataIndex: 'accessCount1',
align: "center",
scopedSlots: {
customRender: "打开次数",
},
},{
title: '访问页面数',
dataIndex: 'address8',
dataIndex: 'pageDepth',
align: "center",
scopedSlots: {
customRender: "访问页面数",
},
}
],
data: [],
......@@ -126,8 +160,31 @@
showSizeChanger: true,
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>
......
<template>
<!-- 使用习惯分析 -->
<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>
</a-form-model-item>
<a-form-model-item>
<a-range-picker valueFormat="yyyy-MM-DD" v-model="queryform.value" style="width: 300px" />
</a-form-model-item>
<a-form-model-item>
<a-button type="primary">
开始分析
</a-button>
</a-form-model-item>
<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-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-form-model-item>
<a-form-model-item>
<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 * as echarts from 'echarts'
import moment from 'moment';
import {getUsageCensus} from '@/api/dataActuary.js'
export default {
data() {
return {
queryform: {
value: null
},
queryform: {
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
},
......@@ -42,12 +52,18 @@
},
}
},
mounted() {
this.initCanal()
this.initType()
this.initWay()
mounted() {
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 {
......
......@@ -6,6 +6,7 @@
<script>
import axios from 'axios'
import * as echarts from 'echarts'
import china from "@/assets/json/china.json";
let myChart= null
export default {
props: {
......@@ -26,9 +27,7 @@ export default {
}
},
created(){
axios.get('/static/json/china.json').then((chinaJson)=>{
echarts.registerMap('china', chinaJson.data);
})
echarts.registerMap('china', china);
},
watch:{
datas: function(obj) {
......@@ -53,7 +52,7 @@ export default {
},
series: [
{
name: '中国',
name: 'china',
type: 'map',
map: 'china',
label: {
......@@ -64,7 +63,6 @@ export default {
]
}
// axios.get('https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json').then((chinaJson)=>{
// console.log(chinaJson.data)
// echarts.registerMap('china', chinaJson.data);
// myChart.setOption(option)
// })
......
......@@ -5,8 +5,8 @@
<a-button :loading="btnLoading" type="success" @click="handleExportTable">
<span>{{ tableSelectedRows.length ? "导出" : "导出全部" }}</span>
</a-button>
<div class="ml20">提交次数:{{ numObj ? numObj.count : 0 }}</div>
<div class="ml20">回复次数:{{ numObj ? numObj.reply_count : 0 }}</div>
<div class="ml20">提交总次数:{{ numObj ? numObj.count : 0 }}</div>
<div class="ml20">回复次数:{{ numObj ? numObj.reply_count : 0 }}</div>
</div>
<a-form :model="queryform" layout="inline">
<a-form-item>
......@@ -29,29 +29,29 @@
<a-button type="primary" @click="getlist">搜索</a-button>
</a-form-item>
</a-form>
</div>
<div class="table-box">
<a-table :dataSource="tabledataSource" :columns="tablecolumns" :pagination="pagination" :scroll="{ y: 590 }"
:row-key="(record) => record.id" @change="changeTablePage" :row-selection="{
selectedRowKeys: tableSelectedKeys,
onChange: onSelectChange,
}">
<template slot="type" slot-scope="text, record, index">
<div>{{typeList.find(item=>record.type).label}}</div>
</template>
<template slot="valid" slot-scope="text, record, index">
<div>{{record.valid == 1 ? '' : ''}}</div>
</template>
<template slot="secrecy" slot-scope="text, record, index">
<div>{{record.secrecy == 1 ? '' : ''}}</div>
</template>
<template slot="status" slot-scope="text, record, index">
<div>{{record.status == 1 ? '' : ''}}</div>
</template>
<template slot="操作" slot-scope="text, record, index">
<a-button type="link" @click="detail(record)">详情</a-button>
</template>
</a-table>
</div>
<div class="table-box">
<a-table :dataSource="tabledataSource" :columns="tablecolumns" :pagination="pagination" :scroll="{ y: 590 }"
:row-key="(record) => record.id" @change="changeTablePage" :row-selection="{
selectedRowKeys: tableSelectedKeys,
onChange: onSelectChange,
}">
<template slot="type" slot-scope="text, record, index">
<div>{{typeList.find(item=>record.type).label}}</div>
</template>
<template slot="valid" slot-scope="text, record, index">
<div>{{record.valid == 1 ? '' : ''}}</div>
</template>
<template slot="secrecy" slot-scope="text, record, index">
<div>{{record.secrecy == 1 ? '' : ''}}</div>
</template>
<template slot="status" slot-scope="text, record, index">
<div>{{record.status == 1 ? '' : ''}}</div>
</template>
<template slot="操作" slot-scope="text, record, index">
<a-button type="link" @click="detail(record)">详情</a-button>
</template>
</a-table>
</div>
<a-drawer title="详情" :visible="visible" width="100%" @close="visible = false">
<div class="content-box">
......@@ -134,7 +134,7 @@
import image from '@/components/image/thumbImage'
import {
export2Excel
} from "@/utils/js/exportExcel";
} from "@/utils/js/exportExcel";
import moment from 'moment'
export default {
data() {
......@@ -145,7 +145,7 @@
size: 10,
source: '',
keyword: null,
time: [moment().format('yyyy-MM-DD'),moment().format('yyyy-MM-DD')],
time: [moment().format('yyyy-MM-DD'),moment().format('yyyy-MM-DD')],
reply:''
},
deviceList: [{
......@@ -165,9 +165,9 @@
title: "序号",
width: "70px",
align: 'center',
customRender: (text, record, index) =>
(this.queryform.page - 1) * this.queryform.size +
index +
customRender: (text, record, index) =>
(this.queryform.page - 1) * this.queryform.size +
index +
1,
},
......@@ -227,9 +227,9 @@
},
{
title: "所属部门",
dataIndex: "dept_name",
dataIndex: "reply_dept",
align: 'center',
customRender: (text, record, index) => `${record.dept_name || '--'}`
customRender: (text, record, index) => `${record.reply_dept || '--'}`
},
{
title: "操作",
......@@ -265,14 +265,14 @@
methods: {
getlist() {
getImpossible(this.queryform).then(res => {
this.tabledataSource = res.data.data
this.tabledataSource = res.data.data
this.pagination.total = res.data.total
})
},
changeTablePage(e) {
this.queryform.page = e.current
this.queryform.size = e.pageSize
this.getlist()
},
changeTablePage(e) {
this.queryform.page = e.current
this.queryform.size = e.pageSize
this.getlist()
},
onChange(e) {
this.queryform.reply = e.target.checked ? 0 : ''
......@@ -321,7 +321,7 @@
page: 1,
size: -1
})
);
);
data = datas.data.data
if (!data.length) return;
for (let item of data) {
......@@ -336,7 +336,7 @@
this.tHeader,
this.filterVal,
data,
"填单记录报表" + this.$moment().format("YYYYMMDDHHmmss")
"办不成事报表" + this.$moment().format("YYYYMMDDHHmmss")
);
this.btnLoading = false;
},
......@@ -347,13 +347,13 @@
.form-box {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
.num-dv{
display: flex;
align-items: center;
.ml20{
margin-left: 20px;
}
margin-bottom: 10px;
.num-dv{
display: flex;
align-items: center;
.ml20{
margin-left: 20px;
}
}
}
......@@ -367,25 +367,25 @@
margin-right: 10px;
margin-bottom: 10px;
}
}
/deep/.ant-spin-container{
display: block !important;
}
/deep/.ant-drawer-body {
background: #f7f7f7;
padding: 15px;
box-sizing: border-box;
min-height: calc(100vh - 55px);
}
/deep/td {
text-align: left;
}
/deep/.ant-descriptions-item-label{
color: #1890ff;
}
/deep/.ant-spin-container{
display: block !important;
}
/deep/.ant-drawer-body {
background: #f7f7f7;
padding: 15px;
box-sizing: border-box;
min-height: calc(100vh - 55px);
}
/deep/td {
text-align: left;
}
/deep/.ant-descriptions-item-label{
color: #1890ff;
}
.btn-dv {
......
......@@ -79,28 +79,28 @@
v-if="text.status == 0"
color="#108ee9"
>
未签到
{{statusItem[text.status]}}
</a-tag>
<a-tag
@click="openDetails(text.id)"
v-else-if="text.status == 1"
color="#2db7f5"
>
排队中
{{statusItem[text.status]}}
</a-tag>
<a-tag
@click="openDetails(text.id)"
v-else-if="text.status == 2"
color="#f50"
>
超时未取号
{{statusItem[text.status]}}
</a-tag>
<a-tag
@click="openDetails(text.id)"
v-else-if="text.status == 3"
color="red"
>
已取消
{{statusItem[text.status]}}
</a-tag>
</template>
</a-table>
......@@ -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];
}
});
}
......
......@@ -48,8 +48,8 @@
<!-- <p v-for="item of 3">事项1:生育证津贴办理</p> -->
</div>
<div class="right_">
<span class="status1" v-if="orderInfo.status != 1">未签到</span>
<span class="status2" v-else>排队中</span>
<span class="status2" v-if="orderInfo.status == 1">{{style[orderInfo.style]}}</span>
<span class="status1" 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: {}, // 预约信息
};
},
......
......@@ -45,14 +45,14 @@
<div class="infoBox">
<span class="infoTitle imgBox">身份证人像面:</span>
<span class="infoContent">
<img v-if="userInfo.z_img" :src="userInfo.z_img" />
<thumbImage v-if="userInfo.z_img" :src="imgBase+'/'+userInfo.z_img" fileType="img" />
<span v-else>--</span>
</span>
</div>
<div class="infoBox">
<span class="infoTitle imgBox">身份证国徽面:</span>
<span class="infoContent">
<img v-if="userInfo.b_img" :src="userInfo.z_img" />
<thumbImage v-if="userInfo.b_img" :src="imgBase+'/'+userInfo.b_img" fileType="img" />
<span v-else>--</span>
</span>
</div>
......@@ -92,8 +92,17 @@
</template>
<script>
import thumbImage from "@/components/image/thumbImage.vue"
export default {
name: "FormDetails",
components:{
thumbImage
},
data(){
return{
imgBase:process.env.VUE_APP_API_PHP_URL
}
},
props: {
visible: {
type: Boolean,
......
......@@ -161,7 +161,7 @@ export default {
{
title: "是否实名认证",
align: "center",
customRender: (text) => "--",
customRender: (text) => text.idcard_IDCardNo?"实名认证":"未实名认证",
// customRender: (text) => text.create_time || "--",
},
{
......
......@@ -48,6 +48,7 @@
<img v-for="(item,index) in fromData.url" :key="index"
:src="process.env.VUE_APP_API_BASE_URL+item">
</div>
<div v-else>--</div>
</div>
<div class="infoDetail">
<div class="card">
......@@ -81,7 +82,7 @@
<div class="cardTitle">
回复内容<span>(必填)</span>
</div>
<div class="cardContent"></div>
<div class="cardContent">{{ fromData.recontent }}</div>
</div>
</div>
</div>
......@@ -90,9 +91,9 @@
position: 'absolute', right: 0, bottom: 0, width: '100%', borderTop: '1px solid #e9e9e9',
padding: '10px 16px', background: '#fff', textAlign: 'right', zIndex: 1,
}">
<a-button type="primary" @click="onClose">
<!-- <a-button type="primary" @click="onClose">
确定
</a-button>
</a-button> -->
<a-button :style="{ marginRight: '8px' }" @click="onClose">
取消
</a-button>
......
......@@ -2,7 +2,7 @@
<div class="callRecord-Container">
<div class="header_box">
<div>
<a-button type="success" @click="toexportTable">
<a-button type="success" @click="handleExportTable" :loading="btnLoading">
<span>{{ tableSelectedRows.length ? "导出" : "导出全部" }}</span>
</a-button>
<b>建议次数:<i>{{JYCount}}</i></b>
......@@ -57,8 +57,38 @@
<script>
import table from "@/mixins/table";
import FormDetails from "./components/FormDetails.vue";
import {getWLLZList,getWLLZCount,getWLLZInfo} from "@/api/dataAdmin"
import {export2Excel} from "@/utils/js/exportExcel";
const tHeader = [
// 导出的表头名信息
"建议标题",
"建议类型",
"真实姓名",
"联系电话",
"是否公开",
"是否保密",
"提交日期",
"是否回复",
"回复人",
"回复时间",
"所属部门",
]
const filterVal = [
// 导出的表头字段名,需要导出表格字段名
"title",
"type",
"upname",
"upphone",
"valid",
"secrecy",
"create_time",
"status",
"reply_name",
"update_time",
"deptName",
]
export default {
mixins: [table],
name: "networkForm",
......@@ -139,7 +169,7 @@ export default {
{
title: "所属部门",
align: "center",
dataIndex: "dateName",
dataIndex: "deptName",
},
{
title: "操作",
......@@ -159,6 +189,7 @@ export default {
timeList:[],// 时间
JYCount:0,//建议次数
HFCount:0,//回复次数
btnLoading: false,
};
},
components: {
......@@ -186,66 +217,64 @@ export default {
this.isReply = false
this.togetWLLZCount()
},
// 重写导出
toexportTable() {
let tableData = [];
if (this.tableSelectedRows.length == 0) {
getWLLZList({
page:1,
size:-1,
status:this.isReply?0:"",
type:this.nowType,
device:this.nowDevice,
keyword:this.searchName,
time:this.timeList,
}).then((res)=>{
const {code,data} = res;
if(code==1){
// 改变输出内容
data.data.forEach(item => {
item.type = item.type==1?'部门建议':item.type==2?'办事建议':item.type==3?'网站建议':item.type==4?'我要就错':item.type==5?'我要投诉':'我要咨询';
item.valid = item.valid==1?'':'';
item.secrecy = item.secrecy==1?'':'';
item.status = item.status==1?'':'';
});
tableData = JSON.parse(JSON.stringify(data.data));
let tableColumns = JSON.parse(JSON.stringify(this.tableHeaders));
let newTableData = tableData.map(item => {
let obj = {};
for (let key in item) {
obj[key] = item[key];
}
return obj;
})
let exprotExcelName = `${this.nowDay} / ${this.nowTime} / ${this.$route['meta']['title'] || '报表信息统计'}`;
this.exportExcel(tableColumns, newTableData, exprotExcelName);
}
})
} else {
tableData = JSON.parse(JSON.stringify(this.tableSelectedRows));
tableData.forEach(item => {
item.type = item.type==1?'部门建议':item.type==2?'办事建议':item.type==3?'网站建议':item.type==4?'我要就错':item.type==5?'我要投诉':'我要咨询';
item.valid = item.valid==1?'':'';
item.secrecy = item.secrecy==1?'':'';
item.status = item.status==1?'':'';
});
let tableColumns = JSON.parse(JSON.stringify(this.tableHeaders));
let newTableData = tableData.map(item => {
let obj = {};
for (let key in item) {
obj[key] = item[key];
}
return obj;
})
let exprotExcelName = `${this.nowDay} / ${this.nowTime} / ${this.$route['meta']['title'] || '报表信息统计'}`;
this.exportExcel(tableColumns, newTableData, exprotExcelName);
}
},
// 导出
async handleExportTable() {
this.btnLoading = true;
let obj = {
1: "部门建议",
2: "办事建议",
3: "网站建议",
4: "我要就错",
5: "我要投诉",
6: "我要咨询",
};
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];
}
});
item.valid == 1?item.valid = "":item.valid = ''
item.secrecy == 1?item.secrecy = "":item.secrecy = ''
item.status == 1?item.status = "":item.status = ''
});
} else {
let datas = this.$_.cloneDeep(
await getWLLZList({
page: 1,
size: -1,
status:this.isReply?0:"",
type:this.nowType,
device:this.nowDevice,
keyword:this.searchName,
time:this.timeList,
})
);
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];
}
});
item.valid == 1?item.valid = "":item.valid = ''
item.secrecy == 1?item.secrecy = "":item.secrecy = ''
item.status == 1?item.status = "":item.status = ''
}
}
export2Excel(
tHeader,
filterVal,
data,
"网络理政报表" + this.$moment().format("YYYYMMDDHHmmss")
);
this.btnLoading = false;
},
changeReply(e){
this.isReply = e.target.checked
},
......@@ -294,7 +323,6 @@ export default {
time:this.timeList,
}
getWLLZList(params).then((res)=>{
console.log(res);
const {code,data} = res;
if(code==1){
this.tableSourceData = data.data
......
<template>
<div class="handling" ref="handling">
<a-drawer
:destroyOnClose="true"
:title="modalInfo.title"
:width="modalInfo.width"
:visible="modalInfo.visible"
@close="modalClose"
@getContainer="() => $refs.handling"
>
<a-drawer :destroyOnClose="true" :title="modalInfo.title" :width="modalInfo.width" :visible="modalInfo.visible"
@close="modalClose" @getContainer="() => $refs.handling">
<div class="headerInfo">
<!-- 头部耗时部分 -->
<p>
<span
>总耗时:{{ dataList.alltime || "--" }}
<i
v-show="
dataList.alltime &&
compareTime(dataList.p_alltime, dataList.alltime)
"
class="fa fa-long-arrow-down"
></i>
<span>总耗时:{{ dataList.alltime || "--" }}
<i v-show="dataList.alltime &&
compareTime(dataList.p_alltime, dataList.alltime)
" class="fa fa-long-arrow-down"></i>
</span>
<span
>等待时间:{{ dataList.waittime || "--" }}
<i
v-show="
dataList.waittime &&
compareTime(dataList.p_waittime, dataList.waittime)
"
class="fa fa-long-arrow-down"
></i>
<span>等待时间:{{ dataList.waittime || "--" }}
<i v-show="dataList.waittime &&
compareTime(dataList.p_waittime, dataList.waittime)
" class="fa fa-long-arrow-down"></i>
</span>
<span
>办理时间:{{ dataList.bltime || "--" }}
<i
v-show="
dataList.bltime &&
compareTime(dataList.p_bltime, dataList.bltime)
"
class="fa fa-long-arrow-down"
></i>
<span>办理时间:{{ dataList.bltime || "--" }}
<i v-show="dataList.bltime &&
compareTime(dataList.p_bltime, dataList.bltime)
" class="fa fa-long-arrow-down"></i>
</span>
</p>
<p>
......@@ -49,12 +28,7 @@
</p>
</div>
<div :class="returnScolor">{{ $codeMap.queueState[dataList.style] }}</div>
<a-steps
direction="vertical"
size="small"
:current="approveLs.length"
class="steps_box"
>
<a-steps direction="vertical" size="small" :current="approveLs.length" class="steps_box">
<a-step :disabled="true" class="step_box">
<div class="icon_box" slot="icon"></div>
<div class="title_box" slot="title">
......@@ -62,27 +36,12 @@
</div>
<div class="description_box" slot="description">
<div class="details">
<span
><i class="lable">申报人:</i
>{{ dataList.people_name || "--" }}</span
>
<span
><i class="lable">取号时间:</i
>{{ dataList.taketime || "--" }}</span
>
<span
><i class="lable">排队编码:</i
>{{ dataList.flownum || "--" }}</span
>
<span
><i class="lable">取号方式:</i
>{{ $codeMap.takeNumWay[dataList.wy_signin] || "--" }}</span
>
<span><i class="lable">注册方式:</i>{{ "--" }}</span>
<span
><i class="lable">取号设备:</i
>{{ dataList.take_name || "--" }}</span
>
<span><i class="lable">申报人:</i>{{ dataList.people_name || "--" }}</span>
<span><i class="lable">取号时间:</i>{{ dataList.taketime || "--" }}</span>
<span><i class="lable">排队编码:</i>{{ dataList.flownum || "--" }}</span>
<span><i class="lable">取号方式:</i>{{ dataList.wy_signin === 0 ? '现场取号' : '在线取号' || "--" }}</span>
<span><i class="lable">注册方式:</i>{{ $codeMap.register_type[dataList.register_type] || "--" }}</span>
<span><i class="lable">取号设备:</i>{{ dataList.take_name || "--" }}</span>
</div>
</div>
</a-step>
......@@ -93,22 +52,10 @@
</div>
<div class="description_box" slot="description">
<div class="details">
<span
><i class="lable">办理窗口:</i
>{{ dataList.window_name || "--" }}</span
>
<span
><i class="lable">办理开始时间:</i
>{{ dataList.calltime || "--" }}</span
>
<span
><i class="lable">工作人员:</i
>{{ dataList.workman_name || "--" }}</span
>
<span
><i class="lable">叫号设备:</i
>{{ dataList.call_name || "--" }}</span
>
<span><i class="lable">办理窗口:</i>{{ dataList.window_name || "--" }}</span>
<span><i class="lable">办理开始时间:</i>{{ dataList.calltime || "--" }}</span>
<span><i class="lable">工作人员:</i>{{ dataList.workman_name || "--" }}</span>
<span><i class="lable">叫号设备:</i>{{ dataList.call_name || "--" }}</span>
</div>
</div>
</a-step>
......@@ -119,10 +66,7 @@
</div>
<div class="description_box" slot="description">
<div class="details">
<span
><i class="lable">办理结束时间:</i
>{{ dataList.endtime || "--" }}</span
>
<span><i class="lable">办理结束时间:</i>{{ dataList.endtime || "--" }}</span>
</div>
</div>
</a-step>
......@@ -176,7 +120,7 @@ export default {
}
},
},
mounted() {},
mounted() { },
methods: {
modalClose() {
......@@ -375,7 +319,7 @@ export default {
}
/deep/.ant-steps-item {
& + .ant-steps-item {
&+.ant-steps-item {
margin-top: 25px !important;
}
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -282,7 +282,7 @@
<arguments>
<argument></argument>
</arguments>
<workingDirectory>${project.parent.basedir}/portal-manager-ui/admin</workingDirectory>
<workingDirectory>${project.parent.basedir}/${project.artifactId}-ui/admin</workingDirectory>
</configuration>
</execution>
......@@ -298,7 +298,7 @@
<argument>run</argument>
<arguments>${package.environment}</arguments>
</arguments>
<workingDirectory>${project.parent.basedir}/portal-manager-ui/admin</workingDirectory>
<workingDirectory>${project.parent.basedir}/${project.artifactId}-ui/admin</workingDirectory>
</configuration>
</execution>
</executions>
......
......@@ -159,7 +159,6 @@ public class AccessLogFilter implements GlobalFilter, Ordered {
ServerRequest serverRequest = ServerRequest.create(exchange, messageReaders);
Mono<String> modifiedBody = serverRequest.bodyToMono(String.class)
.flatMap(body -> {
log.info("decoratedRequest 0001111");
accessLogPdu.setRequestData(body);
return Mono.just(body);
});
......@@ -207,12 +206,11 @@ public class AccessLogFilter implements GlobalFilter, Ordered {
*/
private ServerHttpRequestDecorator requestDecorate(ServerWebExchange exchange, HttpHeaders headers,
CachedBodyOutputMessage outputMessage) {
log.info("decoratedRequest 2");
return new ServerHttpRequestDecorator(exchange.getRequest()) {
@Override
public HttpHeaders getHeaders() {
long contentLength = headers.getContentLength();
log.info("decoratedRequest contentLength:" + contentLength);
log.debug("decoratedRequest contentLength:" + contentLength);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.putAll(super.getHeaders());
if (contentLength > 0) {
......
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