Merge branch 'master' into dev
# Conflicts: # src/views/repair/screen/repairBigScreen.vue
This commit is contained in:
commit
73c0a25054
@ -46,7 +46,7 @@ export function getServicePackagePage(query) {
|
|||||||
// 获取服务套餐精简信息列表
|
// 获取服务套餐精简信息列表
|
||||||
export function getServicePackageList() {
|
export function getServicePackageList() {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/service-package/get-simple-list',
|
url: '/system/service-package/getPackageListByTenantId',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ export default {
|
|||||||
if (isExternal(real_src)) {
|
if (isExternal(real_src)) {
|
||||||
return real_src;
|
return real_src;
|
||||||
}
|
}
|
||||||
|
console.log(process.env.VUE_APP_IMAGE_URL + real_src,42)
|
||||||
return process.env.VUE_APP_IMAGE_URL + real_src;
|
return process.env.VUE_APP_IMAGE_URL + real_src;
|
||||||
},
|
},
|
||||||
realSrcList() {
|
realSrcList() {
|
||||||
|
@ -106,7 +106,7 @@ export default {
|
|||||||
async logout() {
|
async logout() {
|
||||||
this.$modal.confirm('确定注销并退出系统吗?', '提示').then(() => {
|
this.$modal.confirm('确定注销并退出系统吗?', '提示').then(() => {
|
||||||
this.$store.dispatch('LogOut').then(() => {
|
this.$store.dispatch('LogOut').then(() => {
|
||||||
location.href = getPath('/index');
|
window.location.href = "http://159.75.168.143:82/yudao-admin/login";
|
||||||
})
|
})
|
||||||
}).catch(() => {});
|
}).catch(() => {});
|
||||||
}
|
}
|
||||||
|
@ -228,6 +228,7 @@ export function getBasePath() {
|
|||||||
export function getPath(path) {
|
export function getPath(path) {
|
||||||
// 基础路径,必须以 / 结尾
|
// 基础路径,必须以 / 结尾
|
||||||
let basePath = getBasePath();
|
let basePath = getBasePath();
|
||||||
|
console.log(basePath,"basePath")
|
||||||
if (!basePath.endsWith('/')) {
|
if (!basePath.endsWith('/')) {
|
||||||
return basePath + '/';
|
return basePath + '/';
|
||||||
}
|
}
|
||||||
|
@ -1,30 +1,35 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="dashboard-editor-container">
|
<div >
|
||||||
|
<el-row>
|
||||||
<panel-group @handleSetLineChartData="handleSetLineChartData" />
|
<el-col v-for="item in serviceList" :span="4">
|
||||||
|
<image-preview :width="300" :height="300" :src="item.coverImg"></image-preview>
|
||||||
<el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
|
{{item.name}}
|
||||||
<line-chart :chart-data="lineChartData" />
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row :gutter="32">
|
|
||||||
<el-col :xs="24" :sm="24" :lg="8">
|
|
||||||
<div class="chart-wrapper">
|
|
||||||
<raddar-chart />
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :xs="24" :sm="24" :lg="8">
|
|
||||||
<div class="chart-wrapper">
|
|
||||||
<pie-chart />
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :xs="24" :sm="24" :lg="8">
|
|
||||||
<div class="chart-wrapper">
|
|
||||||
<bar-chart />
|
|
||||||
</div>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<el-table
|
||||||
|
:data="warnList"
|
||||||
|
stripe
|
||||||
|
style="width: 100%">
|
||||||
|
<el-table-column
|
||||||
|
prop="date"
|
||||||
|
label="日期"
|
||||||
|
width="180">
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="name"
|
||||||
|
label="姓名"
|
||||||
|
width="180">
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="address"
|
||||||
|
label="地址">
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -35,6 +40,7 @@ import LineChart from './dashboard/LineChart'
|
|||||||
import RaddarChart from './dashboard/RaddarChart'
|
import RaddarChart from './dashboard/RaddarChart'
|
||||||
import PieChart from './dashboard/PieChart'
|
import PieChart from './dashboard/PieChart'
|
||||||
import BarChart from './dashboard/BarChart'
|
import BarChart from './dashboard/BarChart'
|
||||||
|
import {getServicePackageList} from "@/api/system/servicePackage";
|
||||||
|
|
||||||
const lineChartData = {
|
const lineChartData = {
|
||||||
newVisitis: {
|
newVisitis: {
|
||||||
@ -66,12 +72,29 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
lineChartData: lineChartData.newVisitis
|
lineChartData: lineChartData.newVisitis,
|
||||||
|
serviceList:[],
|
||||||
|
warnList:[],
|
||||||
|
messageList:[],
|
||||||
|
queryParams:{
|
||||||
|
pageNo:1,
|
||||||
|
pageSize:10
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getServiceList()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleSetLineChartData(type) {
|
handleSetLineChartData(type) {
|
||||||
this.lineChartData = lineChartData[type]
|
this.lineChartData = lineChartData[type]
|
||||||
|
},
|
||||||
|
getServiceList(){
|
||||||
|
getServicePackageList(this.queryParams).then(response => {
|
||||||
|
this.serviceList = response.data;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<div class="c_left">
|
<div class="c_left">
|
||||||
<div class="six_box">
|
<div class="six_box">
|
||||||
<div class="s_title">
|
<div class="s_title">
|
||||||
客户来源分析
|
客户来源
|
||||||
</div>
|
</div>
|
||||||
<div class="echaets_box">
|
<div class="echaets_box">
|
||||||
<div id="khly" style="width: 400px; height: 267px;"></div>
|
<div id="khly" style="width: 400px; height: 267px;"></div>
|
||||||
@ -16,71 +16,36 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="six_box">
|
<div class="six_box">
|
||||||
<div class="s_title">
|
<div class="s_title">
|
||||||
月工单数量走势
|
月工单数据来源
|
||||||
</div>
|
|
||||||
<div class="echaets_box">
|
|
||||||
<div id="gdslzs" style="width: 400px; height: 267px;"></div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="echaets_box"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="six_box">
|
<div class="six_box">
|
||||||
<div class="s_title">
|
<div class="s_title">
|
||||||
支付渠道统计
|
支付渠道统计
|
||||||
</div>
|
</div>
|
||||||
<div class="echaets_box">
|
<div class="echaets_box"></div>
|
||||||
<div id="zfqdtj" style="width: 400px; height: 267px;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="c_cont">
|
<div class="c_cont">
|
||||||
<div class="tab_">
|
<div class="tab_">
|
||||||
<div @click="countOrAmount()" class="tab_buttom tab_acvit">数量</div>
|
<div class="tab_buttom tab_acvit" >数量</div>
|
||||||
<div @click="countOrAmount()" class="tab_buttom">金额</div>
|
<div class="tab_buttom">金额</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="isCount" class="tab_bt">
|
<div class="tab_bt">
|
||||||
<div class="yb_">
|
<div class="yb_">
|
||||||
<div class="yb_title">工单总数</div>
|
<div class="yb_title">工单总数</div>
|
||||||
<div class="numlist">
|
<div class="numlist">
|
||||||
<!-- <div class="num_box" v-for="(item,index) in 6" :key="index">-->
|
<div class="num_box" v-for="(item,index) in 6" :key="index">
|
||||||
<!-- {{index}}-->
|
{{index}}
|
||||||
<!-- </div>-->
|
|
||||||
<div class="num_box">
|
|
||||||
{{ statistics.totalCount }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="yb_">
|
<div class="yb_">
|
||||||
<div class="yb_title">今日工单</div>
|
<div class="yb_title">今日工单</div>
|
||||||
<div class="numlist">
|
<div class="numlist">
|
||||||
<!-- <div class="num_box" v-for="(item,index) in 6" :key="index">-->
|
<div class="num_box" v-for="(item,index) in 6" :key="index">
|
||||||
<!-- {{index}}-->
|
{{index}}
|
||||||
<!-- </div>-->
|
|
||||||
<div class="num_box">
|
|
||||||
{{ statistics.todayCount }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-else class="tab_bt">
|
|
||||||
<div class="yb_">
|
|
||||||
<div class="yb_title">工单总金额(元)</div>
|
|
||||||
<div class="numlist">
|
|
||||||
<!-- <div class="num_box" v-for="(item,index) in 6" :key="index">-->
|
|
||||||
<!-- {{index}}-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<div class="num_box">
|
|
||||||
{{ statistics.totalAmount }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="yb_">
|
|
||||||
<div class="yb_title">今日工单金额(元)</div>
|
|
||||||
<div class="numlist">
|
|
||||||
<!-- <div class="num_box" v-for="(item,index) in 6" :key="index">-->
|
|
||||||
<!-- {{index}}-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<div class="num_box">
|
|
||||||
{{ statistics.todayAmount }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -91,8 +56,8 @@
|
|||||||
<img src="./imgs/1.png" style="width: 60px;height: 60px">
|
<img src="./imgs/1.png" style="width: 60px;height: 60px">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="f_size">{{ statusTickets[3].name }}</div>
|
<div class="f_size">未派工</div>
|
||||||
<div class="f_num">{{ statusTickets[3].value }}</div>
|
<div class="f_num">2082</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="f_box">
|
<div class="f_box">
|
||||||
@ -100,8 +65,8 @@
|
|||||||
<img src="./imgs/2.png" style="width: 60px;height: 60px">
|
<img src="./imgs/2.png" style="width: 60px;height: 60px">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="f_size">{{ statusTickets[4].name }}</div>
|
<div class="f_size">施工中</div>
|
||||||
<div class="f_num">{{ statusTickets[4].value }}</div>
|
<div class="f_num">2082</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="f_box">
|
<div class="f_box">
|
||||||
@ -109,8 +74,8 @@
|
|||||||
<img src="./imgs/3.png" style="width: 60px;height: 60px">
|
<img src="./imgs/3.png" style="width: 60px;height: 60px">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="f_size">{{ statusTickets[0].name }}</div>
|
<div class="f_size">未结账</div>
|
||||||
<div class="f_num">{{ statusTickets[0].value }}</div>
|
<div class="f_num">2082</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="f_box">
|
<div class="f_box">
|
||||||
@ -118,8 +83,8 @@
|
|||||||
<img src="./imgs/4.png" style="width: 60px;height: 60px">
|
<img src="./imgs/4.png" style="width: 60px;height: 60px">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="f_size">{{ statusTickets[1].name }}</div>
|
<div class="f_size">已结账</div>
|
||||||
<div class="f_num">{{ statusTickets[1].value }}</div>
|
<div class="f_num">2082</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="f_box">
|
<div class="f_box">
|
||||||
@ -127,13 +92,13 @@
|
|||||||
<img src="./imgs/5.png" style="width: 60px;height: 60px">
|
<img src="./imgs/5.png" style="width: 60px;height: 60px">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="f_size">{{ statusTickets[5].name }}</div>
|
<div class="f_size">挂账</div>
|
||||||
<div class="f_num">{{ statusTickets[5].value }}</div>
|
<div class="f_num">2082</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="co_title">
|
<div class="co_title">
|
||||||
今日工单
|
最新工单
|
||||||
</div>
|
</div>
|
||||||
<div class="list_long">
|
<div class="list_long">
|
||||||
<div class="long_title">
|
<div class="long_title">
|
||||||
@ -143,13 +108,14 @@
|
|||||||
<div class="l_four">创建时间</div>
|
<div class="l_four">创建时间</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ot_vox">
|
<div class="ot_vox">
|
||||||
<div class="long_box" v-for="(item,index) in todayTickets" :key="index">
|
<div class="long_box" v-for="(item,index) in 16" :key="index">
|
||||||
<div class="l_one">{{ item.ticketNo }}</div>
|
<div class="l_one">1209840149750105501</div>
|
||||||
<div class="l_two">{{ item.userName }}</div>
|
<div class="l_two">张三</div>
|
||||||
<div class="l_three">{{ item.adviserName }}</div>
|
<div class="l_three">李向东</div>
|
||||||
<div class="l_four">{{ parseTime(item.createTime) }}</div>
|
<div class="l_four">2024-10-20 12:00</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="c_right">
|
<div class="c_right">
|
||||||
@ -157,36 +123,19 @@
|
|||||||
<div class="s_title">
|
<div class="s_title">
|
||||||
维修类型统计
|
维修类型统计
|
||||||
</div>
|
</div>
|
||||||
<div class="echaets_box">
|
<div class="echaets_box"></div>
|
||||||
<div id="wxlxtj" style="width: 400px; height: 267px;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="six_box">
|
<div class="six_box">
|
||||||
<div class="s_title">
|
<div class="s_title">
|
||||||
月工单金额走势
|
月工单金额走势
|
||||||
</div>
|
</div>
|
||||||
<div class="echaets_box">
|
<div class="echaets_box"></div>
|
||||||
<div id="gdjezs" style="width: 400px; height: 267px;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="six_box">
|
<div class="six_box">
|
||||||
<div class="s_title">
|
<div class="s_title">
|
||||||
维修工人排行
|
维修工人排行
|
||||||
</div>
|
</div>
|
||||||
<div class="echaets_box">
|
<div class="echaets_box"></div>
|
||||||
<div class="list_long">
|
|
||||||
<div class="long_title">
|
|
||||||
<div class="l_one">姓名</div>
|
|
||||||
<div class="l_two">服务工单数</div>
|
|
||||||
</div>
|
|
||||||
<div class="ot_vox">
|
|
||||||
<div class="long_box" v-for="(item,index) in workers" :key="index">
|
|
||||||
<div class="l_one">{{ item.name }}</div>
|
|
||||||
<div class="l_two">{{ item.value }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -196,71 +145,38 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import * as echarts from 'echarts';
|
import * as echarts from 'echarts';
|
||||||
import * as RepairBigScreenApi from '@/views/repair/screen/api/repairBigScreen';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Index',
|
name: 'Index',
|
||||||
components: {},
|
components: {
|
||||||
|
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
//金额数量统计
|
|
||||||
statistics: {},
|
|
||||||
//工单各状态数量
|
|
||||||
statusTickets: [],
|
|
||||||
//金额数量切换
|
|
||||||
isCount: true,
|
|
||||||
//今日工单
|
|
||||||
todayTickets: [],
|
|
||||||
//维修工人排行
|
|
||||||
workers: []
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
//工单总数、今日工单、工单总金额、今日工单金额
|
|
||||||
this.ticketStatistics()
|
|
||||||
//工单状态数量统计
|
|
||||||
this.ticketStatusCount()
|
|
||||||
//今日工单
|
|
||||||
this.listTicketToday()
|
|
||||||
//维修工人排行
|
|
||||||
this.listWorks()
|
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
//客户来源分析饼图
|
this.echaerCar();
|
||||||
this.customerSource();
|
|
||||||
//月工单数量走势
|
|
||||||
this.ticketMainCount()
|
|
||||||
//月工单金额走势
|
|
||||||
this.ticketMainAmount()
|
|
||||||
//支付渠道统计
|
|
||||||
this.ticketMainPayWay()
|
|
||||||
//维修类型相关统计分析饼图
|
|
||||||
this.repairTypeStatistics()
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
countOrAmount() {
|
echaerCar(){
|
||||||
this.isCount = !this.isCount
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 客户来源分析饼图
|
|
||||||
*/
|
|
||||||
async customerSource() {
|
|
||||||
const res = await RepairBigScreenApi.customerSource();
|
|
||||||
var chartDom = document.getElementById('khly');
|
var chartDom = document.getElementById('khly');
|
||||||
var myChart = echarts.init(chartDom);
|
var myChart = echarts.init(chartDom);
|
||||||
var option;
|
var option;
|
||||||
option = {
|
option = {
|
||||||
|
// legend: {
|
||||||
|
// top: 'bottom'
|
||||||
|
// },
|
||||||
toolbox: {
|
toolbox: {
|
||||||
show: true,
|
show: true,
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'item',
|
|
||||||
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: '客户来源分析',
|
name: 'Nightingale Chart',
|
||||||
type: 'pie',
|
type: 'pie',
|
||||||
radius: [20, 100],
|
radius: [20, 100],
|
||||||
center: ['50%', '50%'],
|
center: ['50%', '50%'],
|
||||||
@ -268,181 +184,18 @@ export default {
|
|||||||
itemStyle: {
|
itemStyle: {
|
||||||
borderRadius: 2
|
borderRadius: 2
|
||||||
},
|
},
|
||||||
data: res.data,
|
data: [
|
||||||
|
{ value: 40, name: '救援' },
|
||||||
|
{ value: 38, name: '线下' },
|
||||||
|
{ value: 32, name: '小程序预约' },
|
||||||
|
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
option && myChart.setOption(option);
|
option && myChart.setOption(option);
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 月工单数量走势
|
|
||||||
*/
|
|
||||||
async ticketMainCount() {
|
|
||||||
const res = await RepairBigScreenApi.ticketMainCount();
|
|
||||||
var chartDom = document.getElementById('gdslzs');
|
|
||||||
var myChart = echarts.init(chartDom, 'dark');
|
|
||||||
var option;
|
|
||||||
option = {
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'axis'
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'category',
|
|
||||||
data: res.data.xData
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
type: 'value'
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
data: res.data.data,
|
|
||||||
type: 'line',
|
|
||||||
smooth: true
|
|
||||||
}
|
}
|
||||||
]
|
|
||||||
};
|
|
||||||
option && myChart.setOption(option);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 月工单金额走势
|
|
||||||
*/
|
|
||||||
async ticketMainAmount() {
|
|
||||||
const res = await RepairBigScreenApi.ticketMainAmount();
|
|
||||||
var chartDom = document.getElementById('gdjezs');
|
|
||||||
var myChart = echarts.init(chartDom, 'dark');
|
|
||||||
var option;
|
|
||||||
option = {
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'axis'
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'category',
|
|
||||||
data: res.data.xData
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
type: 'value'
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
data: res.data.data,
|
|
||||||
type: 'line',
|
|
||||||
smooth: true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
option && myChart.setOption(option);
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 支付渠道统计
|
|
||||||
*/
|
|
||||||
async ticketMainPayWay() {
|
|
||||||
const res = await RepairBigScreenApi.ticketMainPayWay();
|
|
||||||
var chartDom = document.getElementById('zfqdtj');
|
|
||||||
var myChart = echarts.init(chartDom, 'dark');
|
|
||||||
var option;
|
|
||||||
option = {
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'axis',
|
|
||||||
axisPointer: {
|
|
||||||
type: 'shadow'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'category',
|
|
||||||
data: res.data.xData
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
type: 'value'
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
data: res.data.data,
|
|
||||||
type: 'bar'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
option && myChart.setOption(option);
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 维修类型相关统计分析饼图
|
|
||||||
*/
|
|
||||||
async repairTypeStatistics() {
|
|
||||||
const res = await RepairBigScreenApi.repairTypeStatistics();
|
|
||||||
var chartDom = document.getElementById('wxlxtj');
|
|
||||||
var myChart = echarts.init(chartDom, 'dark');
|
|
||||||
var option;
|
|
||||||
option = {
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'item'
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
top: '5%',
|
|
||||||
left: 'center'
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name: '维修类型统计',
|
|
||||||
type: 'pie',
|
|
||||||
radius: ['40%', '70%'],
|
|
||||||
avoidLabelOverlap: false,
|
|
||||||
padAngle: 5,
|
|
||||||
itemStyle: {
|
|
||||||
borderRadius: 10
|
|
||||||
},
|
|
||||||
label: {
|
|
||||||
show: false,
|
|
||||||
position: 'center'
|
|
||||||
},
|
|
||||||
emphasis: {
|
|
||||||
label: {
|
|
||||||
show: true,
|
|
||||||
fontSize: 40,
|
|
||||||
fontWeight: 'bold'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
labelLine: {
|
|
||||||
show: false
|
|
||||||
},
|
|
||||||
data: res.data
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
option && myChart.setOption(option);
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 单总数、今日工单、工单总金额、今日工单金额
|
|
||||||
*/
|
|
||||||
async ticketStatistics() {
|
|
||||||
const res = await RepairBigScreenApi.ticketStatistics();
|
|
||||||
this.statistics = res.data
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 工单状态数量统计
|
|
||||||
*/
|
|
||||||
async ticketStatusCount() {
|
|
||||||
const res = await RepairBigScreenApi.ticketStatusCount();
|
|
||||||
this.statusTickets = res.data
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 今日工单
|
|
||||||
*/
|
|
||||||
async listTicketToday() {
|
|
||||||
const res = await RepairBigScreenApi.listTicketToday();
|
|
||||||
this.todayTickets = res.data
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 维修工人排行
|
|
||||||
*/
|
|
||||||
async listWorks() {
|
|
||||||
const res = await RepairBigScreenApi.listWorks();
|
|
||||||
this.workers = res.data
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -455,7 +208,6 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.top_{
|
.top_{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 86px;
|
height: 86px;
|
||||||
@ -469,22 +221,18 @@ export default {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content_{
|
.content_{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
//align-items: center;
|
//align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c_left{
|
.c_left{
|
||||||
width: 25%;
|
width: 25%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c_cont{
|
.c_cont{
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab_{
|
.tab_{
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -494,14 +242,12 @@ export default {
|
|||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
margin: 15px auto;
|
margin: 15px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.yb_title{
|
.yb_title{
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
margin: 15px auto;
|
margin: 15px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab_bt{
|
.tab_bt{
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -511,7 +257,6 @@ export default {
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab_buttom{
|
.tab_buttom{
|
||||||
width: 120px;
|
width: 120px;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
@ -521,20 +266,17 @@ export default {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
yb_title{
|
yb_title{
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.numlist{
|
.numlist{
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.num_box{
|
.num_box{
|
||||||
width: 38px;
|
width: 38px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
@ -549,44 +291,36 @@ yb_title {
|
|||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
margin: 0px 10px;
|
margin: 0px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.yb_{
|
.yb_{
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab_acvit{
|
.tab_acvit{
|
||||||
background: #0174F6 !important;
|
background: #0174F6 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.five_box{
|
.five_box{
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
margin: 30px auto;
|
margin: 30px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.f_size{
|
.f_size{
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
.f_num{
|
.f_num{
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
.img_left{
|
.img_left{
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.f_box{
|
.f_box{
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.co_title{
|
.co_title{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
@ -598,7 +332,6 @@ yb_title {
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding-left: 40px;
|
padding-left: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.s_title{
|
.s_title{
|
||||||
width: 90%;
|
width: 90%;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
@ -611,20 +344,17 @@ yb_title {
|
|||||||
padding-left: 40px;
|
padding-left: 40px;
|
||||||
margin: 0px auto;
|
margin: 0px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.echaets_box{
|
.echaets_box{
|
||||||
width: 90%;
|
width: 90%;
|
||||||
height: 267px;
|
height: 267px;
|
||||||
margin: 0px auto;
|
margin: 0px auto;
|
||||||
border-bottom: 1px solid #0174F6;
|
border-bottom: 1px solid #0174F6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.list_long{
|
.list_long{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 563px;
|
height: 563px;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.l_one{
|
.l_one{
|
||||||
width: 30%;
|
width: 30%;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
@ -634,7 +364,6 @@ yb_title {
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding-left: 35px;
|
padding-left: 35px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.l_two{
|
.l_two{
|
||||||
width: 20%;
|
width: 20%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@ -642,7 +371,6 @@ yb_title {
|
|||||||
color: rgba(255,255,255,0.7);
|
color: rgba(255,255,255,0.7);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.l_three{
|
.l_three{
|
||||||
width: 20%;
|
width: 20%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@ -650,7 +378,6 @@ yb_title {
|
|||||||
color: rgba(255,255,255,0.7);
|
color: rgba(255,255,255,0.7);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.l_four{
|
.l_four{
|
||||||
width: 30%;
|
width: 30%;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
@ -660,7 +387,6 @@ yb_title {
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding-right: 35px;
|
padding-right: 35px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.long_title{
|
.long_title{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 58px;
|
height: 58px;
|
||||||
@ -672,14 +398,12 @@ yb_title {
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
margin: 10px auto;
|
margin: 10px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ot_vox{
|
.ot_vox{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 500px;
|
height: 500px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
scrollbar-width: none;
|
scrollbar-width: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.long_box{
|
.long_box{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 58px;
|
height: 58px;
|
||||||
@ -689,11 +413,9 @@ yb_title {
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
margin: 10px auto;
|
margin: 10px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.six_box{
|
.six_box{
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c_right{
|
.c_right{
|
||||||
width: 25%;
|
width: 25%;
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,11 @@
|
|||||||
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
|
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="icon" align="center" prop="coverImg" width="100">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<image-preview :src="scope.row.coverImg"></image-preview>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
<template v-slot="scope">
|
<template v-slot="scope">
|
||||||
@ -67,6 +72,10 @@
|
|||||||
<el-form-item label="服务套餐名" prop="name">
|
<el-form-item label="服务套餐名" prop="name">
|
||||||
<el-input v-model="form.name" placeholder="请输入服务套餐名" />
|
<el-input v-model="form.name" placeholder="请输入服务套餐名" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="icon" prop="coverImg">
|
||||||
|
<image-upload :limit="1" v-model="form.coverImg" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="菜单权限">
|
<el-form-item label="菜单权限">
|
||||||
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event)">展开/折叠</el-checkbox>
|
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event)">展开/折叠</el-checkbox>
|
||||||
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event)">全选/全不选</el-checkbox>
|
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event)">全选/全不选</el-checkbox>
|
||||||
|
Loading…
Reference in New Issue
Block a user