This commit is contained in:
墨大叔 2024-09-11 18:02:16 +08:00
parent 32a59b2557
commit 2a91e6ba42
6 changed files with 142 additions and 155 deletions

View File

@ -2,123 +2,87 @@
<el-row :gutter="12" class="panel-group" v-loading="loading">
<el-col :xs="24" :sm="12" :lg="6" class="card-panel-col">
<div class="card-panel panel-device" @click="handleSetLineChartData('newVisitis')">
<div class="card-panel-description">
<div class="card-panel-text">
设备总数
</div>
<count-to :start-val="0" :end-val="briefData.deviceCount" :duration="2600" class="card-panel-num" />
<div class="card-panel-compare">
<div>
在线 <span class="up">{{briefData.onlineCount}} </span>
<div class="chart-box">
<div class="card-panel-description">
<div class="card-panel-text">
设备总数
</div>
<count-to :start-val="0" :end-val="briefData.deviceCount" :duration="2600" class="card-panel-num" />
</div>
<div class="card-panel-icon-wrapper">
<device-line-chart class-name="panel-chart" :data="deviceChartData" width="100%" height="100%"/>
</div>
</div>
<div class="card-panel-icon-wrapper">
<device-line-chart class-name="panel-chart" :data="deviceChartData" width="100%" height="100%"/>
<div class="card-panel-compare">
<div class="compare-item">
在线 <span class="up">{{briefData.onlineCount}}</span>
</div>
</div>
</div>
</el-col>
<el-col :xs="24" :sm="12" :lg="6" class="card-panel-col">
<div class="card-panel panel-yellow" @click="handleSetLineChartData('newVisitis')">
<div class="card-panel-description">
<div class="card-panel-text">
订单总数
<div class="chart-box">
<div class="card-panel-description">
<div class="card-panel-text">
订单总数
</div>
<count-to :start-val="0" :end-val="briefData.rechargeCount" :duration="2600" class="card-panel-num" />
</div>
<count-to :start-val="0" :end-val="briefData.rechargeCount" :duration="2600" class="card-panel-num" />
<div class="card-panel-compare">
<div>
今日<span class="up"> {{briefData.todayRechargeCount}} <svg-icon icon-class="up" /></span>
</div>
<div>
今日<span class="up"> {{briefData.todayRechargeCount}} <svg-icon icon-class="up" /></span>
</div>
<div class="card-panel-icon-wrapper">
<small-line-chart class-name="panel-chart" :data="rechargeCountChartData" name="订单数量" color="#FFA830"/>
</div>
</div>
<div class="card-panel-icon-wrapper">
<small-line-chart class-name="panel-chart" :data="rechargeCountChartData" name="订单数量" color="#FFA830"/>
<div class="card-panel-compare">
<div class="compare-item">
今日<span class="up"> {{briefData.todayRechargeCount}} <svg-icon icon-class="up" /></span>
</div>
<div class="compare-item">
使用中 <span class="up">{{briefData.usingRechargeCount}}</span>
</div>
</div>
</div>
</el-col>
<el-col :xs="24" :sm="12" :lg="6" class="card-panel-col">
<div class="card-panel panel-green" @click="handleSetLineChartData('newVisitis')">
<div class="card-panel-description">
<div class="card-panel-text">
订单金额
<div class="chart-box">
<div class="card-panel-description">
<div class="card-panel-text">
订单金额
</div>
<count-to :start-val="0" :end-val="briefData.rechargeAmount" :duration="2600" class="card-panel-num" :decimals="2"/>
</div>
<count-to :start-val="0" :end-val="briefData.rechargeAmount" :duration="2600" class="card-panel-num" :decimals="2"/>
<div class="card-panel-compare">
今日
<span class="up">
{{briefData.todayRechargeAmount | money}}
<svg-icon icon-class="up" />
</span>
<div class="card-panel-icon-wrapper">
<small-line-chart class-name="panel-chart" :data="rechargeAmountChartData" name="订单金额" color="#2CAB40"/>
</div>
</div>
<div class="card-panel-icon-wrapper">
<small-line-chart class-name="panel-chart" :data="rechargeAmountChartData" name="订单金额" color="#2CAB40"/>
<div class="card-panel-compare">
今日 <span class="up"> {{briefData.todayRechargeAmount | money}} <svg-icon icon-class="up" /></span>
</div>
</div>
</el-col>
<!-- <el-col :xs="24" :sm="12" :lg="8" class="card-panel-col">-->
<!-- <div class="card-panel panel-model" @click="handleSetLineChartData('messages')">-->
<!-- <div class="card-panel-description">-->
<!-- <div class="card-panel-text">-->
<!-- 月费收入-->
<!-- </div>-->
<!-- <count-to :start-val="0" :end-val="briefData.totalMonthAmount" :duration="3000" class="card-panel-num" :decimals="2"/>-->
<!-- <div class="card-panel-compare">-->
<!-- 今日-->
<!-- <span class="up">-->
<!-- {{briefData.todayMonthAmount | money}}-->
<!-- <svg-icon icon-class="up" />-->
<!-- </span>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="card-panel-icon-wrapper">-->
<!-- <small-line-chart class-name="panel-chart" :data="monthAmountChartData" name="月费" color="#2CAB40"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<el-col :xs="24" :sm="12" :lg="6" class="card-panel-col">
<div class="card-panel panel-device" @click="handleSetLineChartData('purchases')">
<div class="card-panel-description">
<div class="card-panel-text">
用户余额
<div class="chart-box">
<div class="card-panel-description">
<div class="card-panel-text">
用户余额
</div>
<count-to :start-val="0" :end-val="briefData.totalUserBalance" :duration="3200" class="card-panel-num" :decimals="2"/>
</div>
<count-to :start-val="0" :end-val="briefData.totalUserBalance" :duration="3200" class="card-panel-num" :decimals="2"/>
<div class="card-panel-compare">
较昨日
<span :class="compareBalance >= 0 ? 'up' : 'down'">
<div class="card-panel-icon-wrapper">
<small-line-chart class-name="panel-chart" :data="userBalanceChartData" name="用户余额"/>
</div>
</div>
<div class="card-panel-compare">
较昨日
<span :class="compareBalance >= 0 ? 'up' : 'down'">
{{compareBalance | money}}
<svg-icon :icon-class="compareBalance >= 0 ? 'up' : 'down'" />
</span>
</div>
</div>
<div class="card-panel-icon-wrapper">
<small-line-chart class-name="panel-chart" :data="userBalanceChartData" name="用户余额"/>
</div>
</div>
</el-col>
<!-- <el-col :xs="24" :sm="12" :lg="8" class="card-panel-col">-->
<!-- <div class="card-panel panel-user" @click="handleSetLineChartData('shoppings')">-->
<!-- <div class="card-panel-description">-->
<!-- <div class="card-panel-text">-->
<!-- 注册用户-->
<!-- </div>-->
<!-- <count-to :start-val="0" :end-val="briefData.userCount + briefData.tenantCount" :duration="3600" class="card-panel-num" />-->
<!-- <div class="card-panel-compare">-->
<!-- 今日-->
<!-- <span :class="compareUser >= 0 ? 'up' : 'down'">-->
<!-- {{compareUser}}-->
<!-- <svg-icon :icon-class="compareUser >= 0 ? 'up' : 'down'" />-->
<!-- </span>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="card-panel-icon-wrapper">-->
<!-- <user-round-pie-chart class-name="panel-chart" :data="peopleChartData" width="100%" height="100%"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
</el-row>
</template>
@ -259,9 +223,6 @@ export default {
margin-top: 18px;
.card-panel {
display: flex;
justify-content: space-between;
height: 134px;
cursor: pointer;
font-size: 12px;
position: relative;
@ -269,12 +230,17 @@ export default {
background: #fff;
box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
border-color: rgba(0, 0, 0, .05);
padding: 16px 16px 8px;
.chart-box {
display: flex;
justify-content: space-between;
}
.card-panel-icon-wrapper {
position: relative;
height: 100%;
height: 88px;
flex: 1;
padding: 44px 16px 20px 10px;
.panel-chart {
float: right;
@ -285,7 +251,7 @@ export default {
font-weight: 700;
width: fit-content;
min-width: 10em;
padding: 20px 0 16px 20px;
height: 88px;
.card-panel-text {
line-height: 24px;
@ -299,23 +265,29 @@ export default {
line-height: 26px;
color: #1D2129;
}
}
.card-panel-compare {
position: absolute;
bottom: 16px;
font-size: 12px;
line-height: 20px;
color: #4E5969;
width: fit-content;
.card-panel-compare {
display: flex;
margin-top: 8px;
font-weight: bold;
position: relative;
font-size: 12px;
line-height: 20px;
color: #4E5969;
width: fit-content;
.up {
color: #F53F3F;
font-size: 14px;
}
.down {
color: #00B42A;
font-size: 14px;
}
.up {
color: #F53F3F;
font-size: 14px;
}
.down {
color: #00B42A;
font-size: 14px;
}
.compare-item {
margin-right: 0.5em;
}
}
}

View File

@ -36,7 +36,7 @@
<!-- :value="dict.value"-->
<!-- />-->
<!-- </el-select>-->
</el-form-item>
<!-- </el-form-item>-->
<el-form-item label="是否启用" prop="enabled">
<el-select v-model="queryParams.enabled" @change="handleQuery" clearable placeholder="请选择是否启用">
<el-option :value="true" label="已启用"/>
@ -109,13 +109,6 @@
<template slot-scope="d">{{d.row.value}} {{suitTimeUnit(d.row.timeUnit)}}</template>
</el-table-column>
<el-table-column label="详细说明" align="center" prop="description" show-overflow-tooltip min-width="200"/>
<el-table-column label="是否启用" align="center" prop="enabled">
<el-switch slot-scope="d" v-model="d.row.enabled" @change="(nv) => {onChangeEnabled(d.row, nv)}"/>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180"/>
<el-table-column label="使用次数" align="center" prop="totalCount">
<template slot-scope="d">{{d.row.totalCount}} </template>
</el-table-column>
<el-table-column :label="`所属${FieldName.AGENT}`" align="center" prop="agentId" width="120">
<user-link slot-scope="d" :id="d.row.agentId" :name="d.row.agentName"/>
</el-table-column>
@ -129,6 +122,14 @@
>{{item.name}}</el-tag>
</template>
</el-table-column>
<el-table-column label="使用次数" align="center" prop="totalCount">
<template slot-scope="d">{{d.row.totalCount}} </template>
</el-table-column>
<el-table-column label="是否启用" align="center" prop="enabled">
<el-switch slot-scope="d" v-model="d.row.enabled" @change="(nv) => {onChangeEnabled(d.row, nv)}"/>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="100"/>
<el-table-column label="排序" align="center" prop="sort" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" fixed="right">
<template slot-scope="scope">
<el-button

View File

@ -62,7 +62,7 @@
</el-descriptions-item>
<!-- <el-descriptions-item label="WIFI">{{deviceData.wifi | defaultValue}}</el-descriptions-item>-->
<el-descriptions-item label="剩余时长">{{surplusTimeDesc(surplusTime).text}}</el-descriptions-item>
<el-descriptions-item label="设备剩余时长" :span="2">
<el-descriptions-item label="设备剩余时长" :span="2" v-if="deptId === ROOT_DEPT">
{{surplusTimeDesc(deviceData.remainTime).text}}
<span class="remark-text">最近更新时间{{deviceData.lastPullTime | defaultValue}}</span>
</el-descriptions-item>
@ -180,9 +180,9 @@ import LineField from '@/components/LineField/index.vue'
import RechargeList from '@/views/ss/store/components/rechargeList.vue'
import Recharge from '@/views/system/recharge/index.vue'
import { isEmpty } from '@/utils'
import hasPermi from '@/directive/permission/hasPermi'
import { checkPermi } from '@/utils/permission'
import { BonusArrivalType, FieldName } from '@/utils/constants'
import { BonusArrivalType, FieldName, ROOT_DEPT } from '@/utils/constants'
import { mapGetters } from 'vuex'
export default {
name: 'Device/:deviceId',
@ -200,6 +200,7 @@ export default {
dicts: ['sm_device_status', 'sm_device_outage_way', 'sm_device_notice_way', 'sm_model_tag', 'sm_device_online_status', 'service_type', 'bonus_arrival_type'],
data() {
return {
ROOT_DEPT,
loading: false,
deviceData: {},
timer: null,
@ -218,6 +219,7 @@ export default {
}
},
computed: {
...mapGetters(['deptId']),
BonusArrivalType() {
return BonusArrivalType
},

View File

@ -1,6 +1,14 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="MAC" prop="mac">
<el-input
v-model="queryParams.mac"
placeholder="请输入设备Mac"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="SN" prop="deviceNo">
<el-input
v-model="queryParams.deviceNo"
@ -9,10 +17,10 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="MAC" prop="mac">
<el-form-item label="设备名称" prop="deviceName">
<el-input
v-model="queryParams.mac"
placeholder="请输入设备Mac"
v-model="queryParams.deviceName"
placeholder="请输入设备名称"
clearable
@keyup.enter.native="handleQuery"
/>
@ -25,13 +33,25 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input
v-model="queryParams.deviceName"
placeholder="请输入设备名称"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item label="在线状态" prop="onlineStatus">
<el-select v-model="queryParams.onlineStatus" placeholder="请选择在线状态" clearable @change="handleQuery">
<el-option
v-for="dict in dict.type.sm_device_online_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable @change="handleQuery">
<el-option
v-for="dict in dict.type.sm_device_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="FieldName.AGENT" prop="agentName">
<el-input
@ -57,7 +77,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="场所名称" prop="storeName" v-if="notHasView(views.store)">
<el-form-item :label="FieldName.STORE" prop="storeName" v-if="notHasView(views.store)">
<el-input
v-model="queryParams.storeName"
placeholder="请输入经营场所名称"
@ -65,26 +85,6 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="在线状态" prop="onlineStatus">
<el-select v-model="queryParams.onlineStatus" placeholder="请选择在线状态" clearable @change="handleQuery">
<el-option
v-for="dict in dict.type.sm_device_online_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable @change="handleQuery">
<el-option
v-for="dict in dict.type.sm_device_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@ -196,7 +196,7 @@
<store-link slot-scope="d" :id="d.row.storeId" :name="d.row.storeName"/>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
<el-table-column label="创建时间" align="center" prop="createTime" width="180"/>
<el-table-column label="创建时间" align="center" prop="createTime" width="100"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200">
<template slot-scope="scope">
<el-button
@ -262,6 +262,9 @@
<form-col :span="span" :label="FieldName.STORE" prop="storeId">
<store-input v-model="form.storeId" :before-open="beforeOpenStore" :query="storeQuery"/>
</form-col>
<form-col :span="span" label="所属房间" prop="room">
<el-input v-model="form.room" placeholder="请输入所属房间" maxlength="200" show-word-limit/>
</form-col>
<form-col :span="span" label="尺寸" prop="size">
<el-input v-model="form.size" placeholder="请输入尺寸" maxlength="200" show-word-limit/>
</form-col>
@ -271,8 +274,8 @@
<form-col :span="span" label="填充物" prop="fill">
<el-input v-model="form.fill" placeholder="请输入填充物" maxlength="200" show-word-limit/>
</form-col>
<form-col :span="span" label="所属房间" prop="room">
<el-input v-model="form.room" placeholder="请输入所属房间" maxlength="200" show-word-limit/>
<form-col :span="span * 2" label="功能介绍" prop="funcInfo">
<el-input v-model="form.funcInfo" type="textarea" placeholder="请输入功能介绍" maxlength="1000" show-word-limit/>
</form-col>
<form-col :span="span * 2" label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" maxlength="200" show-word-limit/>

View File

@ -144,6 +144,13 @@
<dict-tag :value="d.row.status" :options="dict.type.sm_transaction_bill_status"/>
</template>
</el-table-column>
<el-table-column label="使用状态" align="center" width="120">
<template slot-scope="d">
<el-tag type="warning" v-if="d.row.isUsing">使用中</el-tag>
<el-tag type="success" v-else-if="d.row.isFinished">已结束</el-tag>
<el-tag type="info" v-else>未开始</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="100">
<template slot-scope="d">
<el-button

View File

@ -323,13 +323,13 @@ export default {
{key: 'type', visible: true, label: '用户角色', align: 'center', minWidth: null, sortable: true, width: null},
{key: 'point', visible: true, label: '分成比例', align: 'center', minWidth: null, sortable: true, width: null},
{key: 'referenceId', visible: true, label: '推广人', align: 'center', minWidth: null, sortable: true, width: null},
{key: 'remark', visible: true, label: '备注', align: 'center', minWidth: null, sortable: false, overflow: true, width: null},
{key: 'agentId', visible: true, label: `直属${FieldName.AGENT}`, align: 'center', minWidth: null, sortable: false, width: null},
{key: 'status', visible: true, label: '账号状态', align: 'center', minWidth: null, sortable: true, width: null},
{key: 'createTime', visible: true, label: '注册时间', align: 'center', minWidth: null, sortable: true, width: "100"},
{key: 'totalIncome', visible: true, label: '收入金额', align: 'center', minWidth: null, sortable: true, width: null},
{key: 'withDrawlAmount', visible: true, label: '提现金额', align: 'center', minWidth: null, sortable: true, width: null},
{key: 'balance', visible: true, label: '账户余额', align: 'center', minWidth: null, sortable: true, width: null},
{key: 'agentId', visible: true, label: `直属${FieldName.AGENT}`, align: 'center', minWidth: null, sortable: false, width: null},
{key: 'remark', visible: true, label: '备注', align: 'center', minWidth: null, sortable: false, overflow: true, width: null},
{key: 'investorCount', visible: false, label: `${FieldName.INVESTOR}`, align: 'center', minWidth: null, sortable: false, width: null},
{key: 'storeCount', visible: false, label: `${FieldName.STORE}`, align: 'center', minWidth: null, sortable: false, width: null},
{key: 'deviceCount', visible: false, label: '设备数', align: 'center', minWidth: null, sortable: false, width: null},
@ -380,7 +380,9 @@ export default {
}
this.queryParams.type = this.type;
if (this.type === SmUserType.INVESTOR) {
if (this.type === SmUserType.AGENT) {
this.hideColumn(['agentId'])
} else if (this.type === SmUserType.INVESTOR) {
this.hideColumn(['investorCount', 'billAmount']);
} else if (this.type === SmUserType.BUSINESS_PLACE) {
this.hideColumn(['investorCount', 'billAmount', 'point', 'agentId', 'deviceCount', 'billCount', 'billAmount', 'referenceId'])