日志更新

This commit is contained in:
磷叶 2025-04-22 16:42:43 +08:00
parent d03ee7792f
commit e219100362
7 changed files with 128 additions and 63 deletions

View File

@ -322,3 +322,36 @@ export const WithdrawServiceType = {
POINT: "1", // 按比例
FIXED: "2", // 固定金额
}
// 日志业务类型
export const LogBizType = {
UNKNOWN: "UNKNOWN", // 未知
SUIT: "SUIT", // 套餐
ORDER: "ORDER", // 订单
COMPLAINT: "COMPLAINT", // 投诉建议
DEVICE: "DEVICE", // 设备
MCH_APPLY: "MCH_APPLY", // 招商加盟
PAY: "PAY", // 支付
REAL_NAME: "REAL_NAME", // 实名认证
AREA: "AREA", // 运营区
ACCOUNT: "ACCOUNT", // 收款账户
AD: "AD", // 广告
AGREEMENT: "AGREEMENT", // 协议
APP: "APP", // APP
AREA_JOIN: "AREA_JOIN", // 运营加盟
AREA_SUB: "AREA_SUB", // 子区域
ARTICLE_CATEGORY: "ARTICLE_CATEGORY", // 文章分类
ARTICLE: "ARTICLE", // 文章
BALANCE_LOG: "BALANCE_LOG", // 帐变记录
BONUS: "BONUS", // 分成
CHANNEL: "CHANNEL", // 支付渠道
CUSTOMER_SERVICE: "CUSTOMER_SERVICE", // 客服
FAULT: "FAULT", // 故障
HARDWARE_VERSION: "HARDWARE_VERSION", // 硬件版本
LOCATION_LOG: "LOCATION_LOG", // 定位日志
MODEL: "MODEL", // 车辆型号
SOFTWARE_VERSION: "SOFTWARE_VERSION", // 软件版本
USER_APP: "USER_APP", // 用户APP关联
WITHDRAW: "WITHDRAW", // 提现
USER: "USER", // 用户
}

View File

@ -67,6 +67,14 @@
<form-col :span="span * 2" label="短信通知" prop="msgSwitch" tip="开启短信通知费用0.1元/条,从运营商余额中扣除(场景:还车审核)">
<el-switch v-model="form.msgSwitch" active-text="开启" inactive-text="关闭"/>
</form-col>
<form-col :span="span * 2" label="寻车范围" prop="requiredRingRadius" tip="开启后,用户只能靠近车辆指定范围才允许响铃寻车(防止恶意响铃)">
<el-switch v-model="form.requiredRingRadius" active-text="开启" inactive-text="关闭"/>
</form-col>
<form-col :span="span * 2" prop="ringRadius" v-if="form.requiredRingRadius" tip="设定一个寻车范围,在开启寻车范围功能后生效">
<el-input v-model="form.ringRadius" placeholder="请输入寻车范围" type="number">
<template #append></template>
</el-input>
</form-col>
</el-row>
</collapse-panel>
<collapse-panel title="还车设置" :value="true">
@ -226,6 +234,8 @@ export default {
createTime: null,
boundaryDistance: 20,
outageDistance: 20,
requiredRingRadius: false,
ringRadius: 500,
// vo
userName: this.nickName,
};

View File

@ -234,7 +234,6 @@ export default {
this.polygonEditor.on('end', this.handlePolygonEnd);
} catch (error) {
console.error('地图初始化失败:', error);
this.$message.error('地图加载失败');
}
},
handlePolygonAdd({target}) {

View File

@ -141,6 +141,7 @@ export default {
{key: 'userName', visible: true, label: '操作人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'operaTime', visible: true, label: '时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'location', visible: true, label: '定位', minWidth: null, sortable: false, overflow: false, align: 'center', width: null},
{key: 'originResponse', visible: true, label: '原始响应', minWidth: null, sortable: false, overflow: true, align: 'center', width: null},
],
//
orderSorts: ['ascending', 'descending', null],

View File

@ -78,14 +78,18 @@
<collapse-panel :value="true" title="运营信息">
<el-descriptions :column="1">
<el-descriptions-item label="运营区">{{ detail.areaName | dv }}</el-descriptions-item>
<el-descriptions-item label="车辆归属">{{ detail.mchName | dv }}</el-descriptions-item>
<el-descriptions-item label="车辆归属">
<user-link :id="detail.mchId" :text="detail.mchName"/>
</el-descriptions-item>
<el-descriptions-item label="车型名称">{{ detail.modelName | dv }}</el-descriptions-item>
</el-descriptions>
</collapse-panel>
<collapse-panel :value="true" title="当前订单" v-if="detail.orderNo">
<el-descriptions :column="1">
<el-descriptions-item label="订单编号">{{ detail.orderNo | dv }}</el-descriptions-item>
<el-descriptions-item label="订单编号">
<order-link :id="detail.orderId" :text="detail.orderNo"/>
</el-descriptions-item>
<el-descriptions-item label="订单状态">
<dict-tag :options="dict.type.order_status" :value="detail.orderStatus" size="small"/>
</el-descriptions-item>
@ -113,6 +117,9 @@
<el-tab-pane label="订单使用记录" lazy v-if="checkPermi(['bst:orderDevice:list'])">
<order-device :query="{ deviceId: id }" />
</el-tab-pane>
<el-tab-pane label="操作日志" lazy v-if="checkPermi(['monitor:operlog:list'])">
<operlog :query="{ bizId: detail.id, bizType: LogBizType.DEVICE }" />
</el-tab-pane>
</el-tabs>
</el-card>
</div>
@ -124,14 +131,16 @@ import { unlockDevice, lockDevice, ringDevice, rebootDevice, unlockSeatDevice, r
import { outDevice, inDevice, disableDevice, enableDevice } from "@/api/bst/device";
import CollapsePanel from '@/components/CollapsePanel/index.vue';
import BooleanTag from '@/components/BooleanTag/index.vue';
import { DeviceStatus } from '@/utils/enums';
import { DeviceStatus, LogBizType } from '@/utils/enums';
import { $device } from '@/views/bst/device/mixins';
import OrderDevice from '@/views/bst/orderDevice/index.vue';
import DeviceLocation from '@/views/bst/device/view/components/DeviceLocation.vue';
import CommandLog from '@/views/bst/commandLog/index.vue';
import DeviceBonusPreview from '@/views/bst/device/view/components/DeviceBonusPreview.vue';
import DeviceSn from '@/views/bst/device/components/DeviceSn.vue';
import Operlog from '@/views/monitor/operlog/index.vue';
import OrderLink from '@/components/Business/Order/OrderLink.vue';
import UserLink from '@/components/Business/User/UserLink.vue';
export default {
name: 'DeviceView',
@ -145,13 +154,17 @@ export default {
CommandLog,
DeviceBonusPreview,
DeviceSn,
Operlog,
OrderLink,
UserLink
},
data() {
return {
id: null,
detail: {},
loading: false,
DeviceStatus
DeviceStatus,
LogBizType
}
},
created() {

View File

@ -76,8 +76,7 @@
<dict-tag :options="dict.type.suit_riding_rule" :value="detail.suitRidingRule" size="mini" style="margin-left: 4px;"/>
</el-descriptions-item>
<el-descriptions-item label="免费骑行时间" :span="3">
{{ detail.suitFreeRideTime | dv }}
<dict-tag :options="dict.type.suit_rental_unit" :value="detail.suitRentalUnit"/>
{{ detail.suitFreeRideTime | dv }} 分钟
</el-descriptions-item>
<el-descriptions-item label="起步规则" :span="3" v-if="SuitRidingRule.START === detail.suitRidingRule">
{{detail.suitStartRule.startingTime}}{{unitLabel(detail.suitRentalUnit)}}以内起步价{{detail.suitStartRule.startingPrice}}
@ -124,16 +123,26 @@
<el-card>
<collapse-panel :value="true" title="设备信息">
<el-descriptions :column="1" >
<el-descriptions-item label="SN">{{ detail.deviceSn }}</el-descriptions-item>
<el-descriptions-item label="MAC">{{ detail.deviceMac }}</el-descriptions-item>
<el-descriptions-item label="车牌号">{{ detail.deviceVehicleNum }}</el-descriptions-item>
<el-descriptions-item label="SN">
<device-link :id="detail.deviceId" :text="detail.deviceSn"/>
</el-descriptions-item>
<el-descriptions-item label="MAC">
<device-link :id="detail.deviceId" :text="detail.deviceMac"/>
</el-descriptions-item>
<el-descriptions-item label="车牌号">
<device-link :id="detail.deviceId" :text="detail.deviceVehicleNum"/>
</el-descriptions-item>
</el-descriptions>
</collapse-panel>
<collapse-panel :value="true" title="用户信息">
<el-descriptions :column="1" >
<el-descriptions-item label="用户">{{ detail.userName }}</el-descriptions-item>
<el-descriptions-item label="手机">{{ detail.userPhone }}</el-descriptions-item>
<el-descriptions-item label="用户">
<user-link :id="detail.userId" :text="detail.userName"/>
</el-descriptions-item>
<el-descriptions-item label="手机">
<user-link :id="detail.userId" :text="detail.userPhone"/>
</el-descriptions-item>
</el-descriptions>
</collapse-panel>
@ -165,6 +174,12 @@
<el-tab-pane label="退款信息" v-if="checkPermi(['bst:refund:list'])">
<refund :query="{payBstId: detail.id, payBstType: PayBstType.ORDER}"/>
</el-tab-pane>
<el-tab-pane label="命令日志" v-if="checkPermi(['bst:commandLog:list'])">
<command-log :query="{orderId: detail.id}"/>
</el-tab-pane>
<el-tab-pane label="操作日志" v-if="checkPermi(['monitor:operlog:list'])">
<operlog :query="{bizId: detail.id, bizType: LogBizType.ORDER}"/>
</el-tab-pane>
</el-tabs>
</el-card>
@ -178,7 +193,7 @@
<script>
import { getOrder, endOrder } from '@/api/bst/order'
import CollapsePanel from '@/components/CollapsePanel/index.vue'
import {SuitRidingRule, PayBstType, BonusBstType, OrderStatus} from '@/utils/enums'
import {SuitRidingRule, PayBstType, BonusBstType, OrderStatus, LogBizType} from '@/utils/enums'
import OrderDevice from '@/views/bst/orderDevice/index.vue'
import Pay from '@/views/bst/pay/index.vue'
import Bonus from '@/views/bst/bonus/index.vue'
@ -187,6 +202,10 @@ import OrderRefundDialog from '@/views/bst/order/components/OrderRefundDialog.vu
import OrderVerifyDialog from '@/views/bst/order/components/OrderVerifyDialog.vue'
import { toDescriptionFromSecond } from '@/utils/date'
import Refund from '@/views/bst/refund/index.vue'
import Operlog from '@/views/monitor/operlog/index.vue'
import CommandLog from '@/views/bst/commandLog/index.vue'
import DeviceLink from '@/components/Business/Device/DeviceLink.vue'
import UserLink from '@/components/Business/User/UserLink.vue'
export default {
name: 'OrderView',
@ -199,7 +218,11 @@ export default {
DeviceLocation,
OrderRefundDialog,
OrderVerifyDialog,
Refund
Refund,
Operlog,
CommandLog,
DeviceLink,
UserLink
},
data() {
return {
@ -210,6 +233,7 @@ export default {
SuitRidingRule,
PayBstType,
BonusBstType,
LogBizType,
showRefundDialog: false,
showVerifyDialog: false,
}

View File

@ -1,40 +1,38 @@
<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="操作地址" prop="operIp">
<el-input
v-model="queryParams.operIp"
placeholder="请输入操作地址"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="系统模块" prop="title">
<el-form-item label="接口名称" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入系统模块"
placeholder="请输入接口名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="操作人员" prop="operName">
<el-form-item label="请求地址" prop="operUrl">
<el-input
v-model="queryParams.operUrl"
placeholder="请输入请求地址"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="请求IP" prop="operIp">
<el-input
v-model="queryParams.operIp"
placeholder="请输入请求IP"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="操作人" prop="operName">
<el-input
v-model="queryParams.operName"
placeholder="请输入操作人员"
placeholder="请输入操作人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="操作类型" prop="businessType" >
<el-select v-model="queryParams.businessType" placeholder="请选择操作类型" clearable @change="handleQuery">
<el-option
v-for="dict in dict.type.sys_oper_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="业务类型" prop="bizType">
<el-select v-model="queryParams.bizType" placeholder="请选择业务类型" clearable @change="handleQuery">
<el-option
@ -57,14 +55,14 @@
</el-form-item>
<el-form-item label="操作时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
v-model="queryParams.operTimeRange"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
type="datetimerange"
range-separator="-"
start-placeholder="开始时间"
end-placeholder="结束时间"
:default-time="['00:00:00', '23:59:59']"
@change="handleQuery"
></el-date-picker>
</el-form-item>
<el-form-item>
@ -110,32 +108,17 @@
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="日志编号" align="center" prop="operId" />
<el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
<el-table-column label="操作类型" align="center" prop="businessType">
<el-table-column label="接口名称" align="left" prop="title" min-width="200">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_oper_type" :value="scope.row.businessType"/>
</template>
</el-table-column>
<el-table-column label="操作人员" align="center" prop="operName" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
<el-table-column label="操作地点" align="center" prop="operLocation" :show-overflow-tooltip="true" />
<el-table-column label="业务类型" align="center" prop="bizType">
<template slot-scope="d">
<dict-tag :options="dict.type.log_biz_type" :value="d.row.bizType"/>
</template>
</el-table-column>
<el-table-column label="业务ID" align="center" prop="bizIds" :show-overflow-tooltip="true" />
<el-table-column label="操作状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="操作日期" align="center" prop="operTime" width="160" sortable="custom" :sort-orders="['descending', 'ascending']">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.operTime) }}</span>
<span>{{ scope.row.title | dv}}</span>
<dict-tag :options="dict.type.log_biz_type" :value="scope.row.bizType" size="mini" style="margin-left: 4px;"/>
<dict-tag :options="dict.type.sys_common_status" :value="scope.row.status" size="mini" style="margin-left: 4px;"/>
</template>
</el-table-column>
<el-table-column label="请求地址" align="center" prop="operUrl" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="操作人" align="center" prop="operName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="请求IP" align="center" prop="operIp" :show-overflow-tooltip="true" />
<el-table-column label="操作时间" align="center" prop="operTime" width="160" sortable="custom" :sort-orders="['descending', 'ascending']"/>
<el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']">
<template slot-scope="scope">
<span>{{ scope.row.costTime }}毫秒</span>
@ -247,6 +230,7 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
operTimeRange: [],
operIp: undefined,
title: undefined,
operName: undefined,
@ -255,6 +239,7 @@ export default {
}
};
},
created() {
this.queryParams = {
...this.queryParams,