Commit 6294bedf authored by xj's avatar xj

接口对接

parent cf54ed04
...@@ -2,6 +2,32 @@ import http from "../request/http"; ...@@ -2,6 +2,32 @@ import http from "../request/http";
let baseURL = process.env.VUE_APP_API_BASE_URL; let baseURL = process.env.VUE_APP_API_BASE_URL;
let BASEURL = process.env.VUE_APP_API_PHP_URL; let BASEURL = process.env.VUE_APP_API_PHP_URL;
/* 业务数据分析分析 */
//整体情况
export function getAllInfo(params) {
return http.get(`${BASEURL}/inter/statistic/allInfo`, params);
}
//排队取号
export function getBusinessInfo(params) {
return http.get(`${BASEURL}/inter/statistic/businessInfo`, params);
}
//预约情况
export function getWyInfo(params) {
return http.get(`${BASEURL}/inter/statistic/wyInfo`, params);
}
//取号Top
export function getTopBusiness(params) {
return http.get(`${BASEURL}/inter/statistic/topBusiness`, params);
}
//预约Top
export function getTopWy(params) {
return http.get(`${BASEURL}/inter/statistic/topWy`, params);
}
//业务分析
export function getBusInfoById(params) {
return http.get(`${BASEURL}/inter/statistic/busInfoById`, params);
}
/* 使用行为分析 */ /* 使用行为分析 */
//事件分析 //事件分析
export function getEventCensus(params) { export function getEventCensus(params) {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<div class="head_title">分析结果</div> <div class="head_title">分析结果</div>
</div> </div>
</template> </template>
<a-row type="flex" align="middle"> <a-row type="flex" align="middle" v-if="formState">
<a-col :span="4"> <a-col :span="4">
<div class="f_40 f_center">{{ formState.name }}</div> <div class="f_40 f_center">{{ formState.name }}</div>
<div class="f_center">业务名称</div> <div class="f_center">业务名称</div>
...@@ -24,13 +24,13 @@ ...@@ -24,13 +24,13 @@
</a-col> </a-col>
<a-col :span="10"> <a-col :span="10">
<a-form layout="horizontal" :model="formState" :label-col="{span: 4}" :wrapper-col="{span: 20}"> <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.level ? '二级业务' : '一级业务' }}</a-form-item>
<a-form-item label="父级业务:">{{ formState.parent_name }}</a-form-item> <a-form-item label="父级业务:">{{ formState.parent_name }}</a-form-item>
<a-form-item label="关联事项:"> <a-form-item label="关联事项:">
<a-tag v-for="(item, index) in formState.matter" :key="index">{{ item.matterName }}</a-tag> <a-tag v-for="(item, index) in formState.matter" :key="index">{{ item.matterName }}</a-tag>
</a-form-item> </a-form-item>
<a-form-item label="是否预约:">{{ formState.canorder ? '允许' : '不允许'}}</a-form-item> <a-form-item label="是否预约:">{{ formState.canorder ? '允许' : '不允许'}}</a-form-item>
<a-form-item label="验证方式:">{{ }}</a-form-item> <a-form-item label="验证方式:">{{testWay.join(',')}}</a-form-item>
</a-form> </a-form>
</a-col> </a-col>
</a-row> </a-row>
...@@ -64,6 +64,7 @@ ...@@ -64,6 +64,7 @@
<script > <script >
import axios from 'axios' import axios from 'axios'
import LineChart from "../Component/line/index.vue"; import LineChart from "../Component/line/index.vue";
import {getBusInfoById} from '@/api/dataActuary.js'
export default { export default {
components:{ components:{
LineChart LineChart
...@@ -98,7 +99,8 @@ import LineChart from "../Component/line/index.vue"; ...@@ -98,7 +99,8 @@ import LineChart from "../Component/line/index.vue";
lineData: {}, lineData: {},
useNumber: '0', useNumber: '0',
checkName: '', checkName: '',
formState: {} formState: {},
testWay:[]
} }
}, },
mounted(){ mounted(){
...@@ -108,25 +110,32 @@ import LineChart from "../Component/line/index.vue"; ...@@ -108,25 +110,32 @@ import LineChart from "../Component/line/index.vue";
'$route.query': { '$route.query': {
immediate: true, immediate: true,
handler(newVal, oldVal){ handler(newVal, oldVal){
this.checkName= newVal this.checkName= newVal.name
this.getAnalysisData(newVal.name) this.getAnalysisData()
} }
} }
}, },
methods: { methods: {
async getAnalysisData(name, val) { async getAnalysisData() {
if(val == undefined) { const res = await getBusInfoById({bus_name: this.checkName, selected: this.useNumber || 0 })
val= 0 if(res.code == 1){
} if (res.data.phone) this.testWay.push('手机号')
await axios.get('http://192.168.0.98:8090/inter/statistic/busInfoById',{ params: {bus_name: name, selected: val }}).then((res)=>{ if (res.data.idcardtake) this.testWay.push('身份证')
if(res && res.status == 200){ if (res.data.face) this.testWay.push('人脸')
this.formState= res.data.data this.formState= res.data
console.log(this.formState) this.lineData= {
title: '',
legend: ['排队次数','预约次数'],
xData: res.data.qh_list.length > 0 ? res.data.qh_list.map(item=>item.datetime) : res.data.wy_list.map(item=>item.datetime),
dataList: [
{name: '排队次数', data: res.data.qh_list.map(item=>item.nums)},
{name: '预约次数', data: res.data.wy_list.map(item=>item.nums)},
]
} }
}) }
}, },
handleChange(val){ handleChange(){
this.getAnalysisData(this.checkName, val) this.getAnalysisData()
} }
}, },
} }
......
...@@ -236,6 +236,7 @@ ...@@ -236,6 +236,7 @@
<script > <script >
import Pie from "../Component/emptyPie/index.vue" import Pie from "../Component/emptyPie/index.vue"
import axios from 'axios' import axios from 'axios'
import {getAllInfo,getBusinessInfo,getWyInfo,getTopBusiness,getTopWy} from '@/api/dataActuary.js'
import moment from "moment" import moment from "moment"
export default { export default {
components:{ components:{
...@@ -454,127 +455,120 @@ import moment from "moment" ...@@ -454,127 +455,120 @@ import moment from "moment"
//获取全部基本数据 //获取全部基本数据
async getAllData() { async getAllData() {
this.nowDate= moment(new Date()).format('YYYY-MM-DD h:mm:ss') this.nowDate= moment(new Date()).format('YYYY-MM-DD h:mm:ss')
await axios.get('http://192.168.0.98:8090/inter/statistic/allInfo',{ params: { siteid: '1' }}).then((res)=>{ const res = await getAllInfo()
if(res && res.status == 200){ if(res.code == 1){
this.situation= res.data.data this.situation= res.data
this.firstPie= { this.firstPie= {
name: '占比', name: '占比',
val: res.data.data.lev1_nums, val: res.data.lev1_nums,
total: res.data.data.lev1_not_child_nums, total: res.data.lev1_not_child_nums,
color: '#04CA8F' color: '#04CA8F'
}
this.secondPie= {
name: '占比',
val: res.data.data.lev1_has_child_nums,
total: res.data.data.child_nums,
color: '#6394f9'
}
} }
}) this.secondPie= {
name: '占比',
val: res.data.lev1_has_child_nums,
total: res.data.child_nums,
color: '#6394f9'
}
}
}, },
// 排队取号 // 排队取号
async getTakeLineData() { async getTakeLineData() {
await axios.get('http://192.168.0.98:8090/inter/statistic/businessInfo',{ params: { siteid: '1' }}).then((res)=>{ const res = await getBusinessInfo()
if(res && res.status == 200){ if(res.code == 1){
let arr= res.data.data.info let arr= res.data.info
let newArr= [] let newArr= []
arr.forEach((item ,index)=>{ arr.forEach((item ,index)=>{
let obj={ let obj={
id: item.id, id: item.id,
dataIndex: item.id, dataIndex: item.id,
title: item.name, title: item.name,
}
newArr.push(obj)
this.lineUp[0][item.id]= item.lev1_nums
this.lineUp[1][item.id]= (item.lev1_rate * 100).toFixed(2) + '%'
this.lineUp[2][item.id]= item.lev2_nums
this.lineUp[3][item.id]= (item.lev2_rate * 100).toFixed(2) + '%'
})
this.lineUpColumns= [...this.lineUpColumns, ...newArr]
this.takeLineTotal=res.data.data.use_bus_nums
this.noTakeLine=res.data.data.not_use_bus_nums
this.thirdPie= {
name: '占比',
val: res.data.data.not_use_bus_nums,
total: res.data.data.use_bus_nums,
color: '#04CA8F'
} }
newArr.push(obj)
this.lineUp[0][item.id]= item.lev1_nums
this.lineUp[1][item.id]= (item.lev1_rate * 100).toFixed(2) + '%'
this.lineUp[2][item.id]= item.lev2_nums
this.lineUp[3][item.id]= (item.lev2_rate * 100).toFixed(2) + '%'
})
this.lineUpColumns= [...this.lineUpColumns, ...newArr]
this.takeLineTotal=res.data.use_bus_nums
this.noTakeLine=res.data.not_use_bus_nums
this.thirdPie= {
name: '占比',
val: res.data.not_use_bus_nums,
total: res.data.use_bus_nums,
color: '#04CA8F'
} }
}) }
}, },
// 预约情况 // 预约情况
async getAppointmentData() { async getAppointmentData() {
await axios.get('http://192.168.0.98:8090/inter/statistic/wyInfo',{ params: { siteid: '1' }}).then((res)=>{ const res = await getWyInfo()
if(res && res.status == 200){ if(res.code == 1){
let arr= res.data.data.info let arr= res.data.info
let newArr= [] let newArr= []
arr.forEach((item ,index)=>{ arr.forEach((item ,index)=>{
let obj={ let obj={
id: item.id, id: item.id,
dataIndex: item.id, dataIndex: item.id,
title: item.name, title: item.name,
}
newArr.push(obj)
this.appointment[0][item.id]= item.lev1_nums
this.appointment[1][item.id]= (item.lev1_rate * 100).toFixed(2) + '%'
this.appointment[2][item.id]= item.lev2_nums
this.appointment[3][item.id]= (item.lev2_rate * 100).toFixed(2) + '%'
})
this.appointmentColumns= [...this.appointmentColumns, ...newArr]
this.appointmentTotal=res.data.data.use_bus_nums
this.noAppointment=res.data.data.not_use_bus_nums
this.fourthPie= {
name: '占比',
val: res.data.data.not_use_bus_nums,
total: res.data.data.use_bus_nums,
color: '#04CA8F'
} }
newArr.push(obj)
this.appointment[0][item.id]= item.lev1_nums
this.appointment[1][item.id]= (item.lev1_rate * 100).toFixed(2) + '%'
this.appointment[2][item.id]= item.lev2_nums
this.appointment[3][item.id]= (item.lev2_rate * 100).toFixed(2) + '%'
})
this.appointmentColumns= [...this.appointmentColumns, ...newArr]
this.appointmentTotal=res.data.use_bus_nums
this.noAppointment=res.data.not_use_bus_nums
this.fourthPie= {
name: '占比',
val: res.data.not_use_bus_nums,
total: res.data.use_bus_nums,
color: '#04CA8F'
} }
}) }
}, },
// 取号TOP // 取号TOP
async getTakeNumberTop(val){ async getTakeNumberTop(val){
if(val== undefined){ if(val== undefined){
val = 0 val = 0
} }
await axios.get('http://192.168.0.98:8090/inter/statistic/topBusiness',{ params: { siteid: '1', selected: val, sort: 'DESC' }}).then((res)=>{ const res = getTopBusiness({selected: val,sort: 'DESC'})
if(res && res.status == 200) { if(res.code == 1) {
this.takeNumberTop= res.data.data this.takeNumberTop= res.data
} }
})
}, },
// 取号Less // 取号Less
async getTakeNumberLess(val){ async getTakeNumberLess(val){
if(val== undefined){ if(val== undefined){
val = 0 val = 0
} }
await axios.get('http://192.168.0.98:8090/inter/statistic/topBusiness',{ params: { siteid: '1', selected: val, sort: 'ASC' }}).then((res)=>{ const res = getTopBusiness({selected: val,sort: 'ASC'})
if(res && res.status == 200) { if(res.code == 1) {
this.takeNumberLess= res.data.data this.takeNumberLess= res.data
} }
})
}, },
// 预约TOP // 预约TOP
async getAppointmentTop(val){ async getAppointmentTop(val){
if(val== undefined){ if(val== undefined){
val = 0 val = 0
} }
await axios.get('http://192.168.0.98:8090/inter/statistic/topWy',{ params: { siteid: '1', selected: val, sort: 'DESC' }}).then((res)=>{ const res = getTopWy({selected: val,sort: 'DESC'})
if(res && res.status == 200) { if(res.code == 1) {
this.appointmentTop= res.data.data this.appointmentTop= res.data
} }
})
}, },
// 预约LESS // 预约LESS
async getAppointmentLess(val){ async getAppointmentLess(val){
if(val== undefined){ if(val== undefined){
val = 0 val = 0
} }
await axios.get('http://192.168.0.98:8090/inter/statistic/topWy',{ params: { siteid: '1', selected: val, sort: 'ASC' }}).then((res)=>{ const res = getTopWy({selected: val,sort: 'ASC'})
if(res && res.status == 200) { if(res.code == 1) {
this.appointmentLess= res.data.data this.appointmentLess= res.data
} }
})
}, },
changeTakeNumberTopDate(val){ changeTakeNumberTopDate(val){
this.getTakeNumberTop(val) this.getTakeNumberTop(val)
......
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
} }
/deep/.ant-checkbox-group { /deep/.ant-checkbox-group {
width: 220px; width: 250px;
} }
.range_picker_style { .range_picker_style {
......
...@@ -2,15 +2,19 @@ ...@@ -2,15 +2,19 @@
<div class="PoliticsShow-Container"> <div class="PoliticsShow-Container">
<div class="header_box"> <div class="header_box">
<div> <div>
<a-button type="success" @click="exportTable"> <a-button
<span>{{ tableSelectedRows.length ? "导出" : "导出全部" }}</span> :loading="btnLoading"
type="success"
@click="handleExportTable"
>
<span>{{ tableSelectedRows.length ? "导出" : "导出全部" }}</span>
</a-button> </a-button>
<b>用户总数:<i>3</i></b> <b>用户总数:<i>{{tableData.total}}</i></b>
<b>试用客户:<i>2</i></b> <b>试用客户:<i>{{tableData.trial}}</i></b>
<b>VIP:<i>1</i></b> <b>VIP:<i>{{tableData.vip}}</i></b>
<b>设计师:<i>0</i></b> <b>设计师:<i>{{tableData.designer}}</i></b>
<b>图片作品数:<i>36</i></b> <b>图片作品数:<i>{{tableData.picturesCount}}</i></b>
<b>视频作品数:<i>0</i></b> <b>视频作品数:<i>{{tableData.videosCount}}</i></b>
</div> </div>
<span class="topBoxFlex"> <span class="topBoxFlex">
<a-input allowClear v-model="searchForm.query" placeholder="请输入用户姓名/手机号搜索"> <a-input allowClear v-model="searchForm.query" placeholder="请输入用户姓名/手机号搜索">
...@@ -22,7 +26,7 @@ ...@@ -22,7 +26,7 @@
{{ item }} {{ item }}
</a-select-option> </a-select-option>
</a-select> </a-select>
<a-button type="primary">搜索</a-button> <a-button type="primary" @click="getList">搜索</a-button>
</span> </span>
</div> </div>
<div class="main"> <div class="main">
...@@ -48,6 +52,7 @@ ...@@ -48,6 +52,7 @@
import table from "@/mixins/table"; import table from "@/mixins/table";
import UserDetails from "./components/UserDetails.vue"; import UserDetails from "./components/UserDetails.vue";
import PicWorks from "./components/PicWorks.vue"; import PicWorks from "./components/PicWorks.vue";
import { export2Excel } from "@/utils/js/exportExcel";
import { import {
getCustomer getCustomer
} from "@/api/customer"; } from "@/api/customer";
...@@ -62,8 +67,10 @@ export default { ...@@ -62,8 +67,10 @@ export default {
name: "PortalAdminVuePoliticsShow", name: "PortalAdminVuePoliticsShow",
data() { data() {
return { return {
btnLoading: false,
levelList: levelList, levelList: levelList,
tableList: [], tableList: [],
tableData:{},
searchForm: { searchForm: {
query: "",//姓名手机号查询条件 query: "",//姓名手机号查询条件
memberLevel: "",//会员等级查询条件 memberLevel: "",//会员等级查询条件
...@@ -121,6 +128,34 @@ export default { ...@@ -121,6 +128,34 @@ export default {
}, },
], ],
searchName: undefined, searchName: undefined,
tablePagination:{
current:1,
pageSize:10
},
tableSelectedKeys:[],
tableSelectedRows:[],
tHeader: [
// 导出的表头名信息
"真实姓名",
"联系电话",
"单位名称",
"图片作品数量",
"视频作品数量",
"会员等级",
"最近登录时间",
"使用状态",
],
filterVal: [
// 导出的表头字段名,需要导出表格字段名
"custName",
"contactTelphone",
"organization",
"customerDesignPictures",
"customerDesignVideos",
"memberLevel",
"lastLoginTime",
"status"
],
}; };
}, },
components: { components: {
...@@ -145,18 +180,79 @@ export default { ...@@ -145,18 +180,79 @@ export default {
if (res.code == 1) { if (res.code == 1) {
let { let {
data, data,
total total,
pageInfo
} = res.data; } = res.data;
this.tableList = data; this.tableList = data;
this.tableData = res.data
this.tablePagination.total = total; this.tablePagination.total = total;
return data
} }
}, },
//分页 //分页
changeTablePage(page) { pagTableChange(page) {
this.pagTableChange(page); this.tablePagination.current = page.current
this.tablePagination.pageSize = page.pageSize
this.getList(); this.getList();
}, },
// 选中
onSelectChange(keys, rows) {
this.tableSelectedKeys = keys;
const res = new Map();
this.tableSelectedRows = [...this.tableSelectedRows, ...rows]
.filter((v) => {
return !res.has(v.id) && res.set(v.id, 1);
})
.filter((v) => {
return this.tableSelectedKeys.some((val) => v.id == val);
});
},
// 导出
async handleExportTable() {
this.btnLoading = true;
let obj = {
1: "正常",
2: "禁用",
};
let data = []
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
// 深度克隆避免影响页面表格展示
data = this.$_.cloneDeep(this.tableSelectedRows);
data.forEach((item) => {
Object.keys(obj).forEach((keys) => {
if (item.status == keys) {
item.status = obj[keys];
}
});
});
export2Excel(
this.tHeader,
this.filterVal,
data,
"易政秀报表" + this.$moment().format("YYYYMMDDHHmmss")
);
} else {
data = this.$_.cloneDeep(
await this.getList({ page: 1, size: -1 })
);
if (!data.length) return;
for (let item of data) {
Object.keys(obj).forEach((key) => {
if (item.status == key) {
item.status = obj[key];
}
});
}
export2Excel(
this.tHeader,
this.filterVal,
data,
"易政秀报表" + this.$moment().format("YYYYMMDDHHmmss")
);
}
this.btnLoading = false;
},
QueueState(type) { QueueState(type) {
switch (type) { switch (type) {
case 0: case 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