From bda10f0ff1f5b28fe857aa1a71a4db8fed87f421 Mon Sep 17 00:00:00 2001 From: 18650502300 <18650502300@163.com> Date: Mon, 15 Jul 2024 10:16:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/system/onlineLog.js | 44 ++++++ src/router/index.js | 28 ++++ src/views/monitor/operlog/index.vue | 7 +- src/views/system/commandLog/index.vue | 163 +++++++++---------- src/views/system/device/index.vue | 10 ++ src/views/system/onlineLog/index.vue | 218 ++++++++++++++++++++++++++ src/views/system/order/index.vue | 15 +- 7 files changed, 396 insertions(+), 89 deletions(-) create mode 100644 src/api/system/onlineLog.js create mode 100644 src/views/system/onlineLog/index.vue diff --git a/src/api/system/onlineLog.js b/src/api/system/onlineLog.js new file mode 100644 index 0000000..ebe2c8e --- /dev/null +++ b/src/api/system/onlineLog.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询在线/离线日志列表 +export function listOnlineLog(query) { + return request({ + url: '/system/onlineLog/list', + method: 'get', + params: query + }) +} + +// 查询在线/离线日志详细 +export function getOnlineLog(id) { + return request({ + url: '/system/onlineLog/' + id, + method: 'get' + }) +} + +// 新增在线/离线日志 +export function addOnlineLog(data) { + return request({ + url: '/system/onlineLog', + method: 'post', + data: data + }) +} + +// 修改在线/离线日志 +export function updateOnlineLog(data) { + return request({ + url: '/system/onlineLog', + method: 'put', + data: data + }) +} + +// 删除在线/离线日志 +export function delOnlineLog(id) { + return request({ + url: '/system/onlineLog/' + id, + method: 'delete' + }) +} diff --git a/src/router/index.js b/src/router/index.js index a932aae..5ad28de 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -232,6 +232,34 @@ export const dynamicRoutes = [ } ] }, + { + path: '/system/commandLog', + component: Layout, + hidden: true, + permissions: ['system:commandLog:query'], + children: [ + { + path: 'index/:sn', + component: () => import('@/views/system/commandLog'), + name: 'Data', + meta: { title: '命令日志', activeMenu: '/system/commandLog' } + } + ] + }, + { + path: '/system/commandLog/orderNo', + component: Layout, + hidden: true, + permissions: ['system:commandLog:query'], + children: [ + { + path: 'index/:orderNo', + component: () => import('@/views/system/commandLog'), + name: 'Data', + meta: { title: '命令日志', activeMenu: '/system/commandLog' } + } + ] + }, { path: '/tool/gen-edit', component: Layout, diff --git a/src/views/monitor/operlog/index.vue b/src/views/monitor/operlog/index.vue index 4a1828f..7deb4ed 100644 --- a/src/views/monitor/operlog/index.vue +++ b/src/views/monitor/operlog/index.vue @@ -1,10 +1,10 @@ <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-form-item label="请求参数" prop="operParam"> <el-input - v-model="queryParams.operIp" - placeholder="请输入操作地址" + v-model="queryParams.operParam" + placeholder="请输入请求参数" clearable style="width: 240px;" @keyup.enter.native="handleQuery" @@ -115,6 +115,7 @@ <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="operParam" :show-overflow-tooltip="true" /> <el-table-column label="操作类型" align="center" prop="businessType"> <template slot-scope="scope"> <dict-tag :options="dict.type.sys_oper_type" :value="scope.row.businessType"/> diff --git a/src/views/system/commandLog/index.vue b/src/views/system/commandLog/index.vue index 22026f6..b21b7e1 100644 --- a/src/views/system/commandLog/index.vue +++ b/src/views/system/commandLog/index.vue @@ -33,90 +33,62 @@ @keyup.enter.native="handleQuery" /> </el-form-item> + <el-form-item label="回调状态" prop="callStatus"> + <el-select v-model="queryParams.callStatus" placeholder="请选择回调状态" clearable> + <el-option + v-for="dict in dict.type.onenet_call_status" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + <el-form-item label="订单号" prop="orderNo"> + <el-input + v-model="queryParams.orderNo" + placeholder="请输入订单号" + clearable + @keyup.enter.native="handleQuery" + /> + </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> </el-form-item> </el-form> - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:commandLog:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleUpdate" - v-hasPermi="['system:commandLog:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['system:commandLog:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['system:commandLog:export']" - >导出</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> <el-table v-loading="loading" :data="commandLogList" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" align="center" /> <el-table-column label="主键" align="center" prop="id" /> - <el-table-column label="请求url" align="center" prop="url" /> + <el-table-column label="请求url" align="center" prop="url" :show-overflow-tooltip="true"/> <el-table-column label="命令" align="center" prop="command" /> <el-table-column label="类型" align="center" prop="type" /> <el-table-column label="mac" align="center" prop="mac" /> <el-table-column label="sn" align="center" prop="sn" /> - <el-table-column label="响应" align="center" prop="result" /> + <el-table-column label="订单号" align="center" prop="orderNo" :show-overflow-tooltip="true"/> + <el-table-column label="响应" align="center" prop="result" :show-overflow-tooltip="true"/> + <el-table-column label="回调状态" align="center" prop="callStatus" > + <template slot-scope="scope"> + <dict-tag :options="dict.type.onenet_call_status" :value="scope.row.callStatus"/> + </template> + </el-table-column> <el-table-column label="创建时间" align="center" prop="createTime"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> </template> </el-table-column> -<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">--> -<!-- <template slot-scope="scope">--> -<!-- <el-button--> -<!-- size="mini"--> -<!-- type="text"--> -<!-- icon="el-icon-edit"--> -<!-- @click="handleUpdate(scope.row)"--> -<!-- v-hasPermi="['system:commandLog:edit']"--> -<!-- >修改</el-button>--> -<!-- <el-button--> -<!-- size="mini"--> -<!-- type="text"--> -<!-- icon="el-icon-delete"--> -<!-- @click="handleDelete(scope.row)"--> -<!-- v-hasPermi="['system:commandLog:remove']"--> -<!-- >删除</el-button>--> -<!-- </template>--> -<!-- </el-table-column>--> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button + size="mini" + type="text" + icon="el-icon-view" + @click="handleView(scope.row,scope.index)" + v-hasPermi="['system:commandLog:query']" + >详细</el-button> + </template> + </el-table-column> </el-table> <pagination @@ -128,24 +100,37 @@ /> <!-- 添加或修改命令日志对话框 --> - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> - <el-form-item label="请求url" prop="url"> - <el-input v-model="form.url" type="textarea" placeholder="请输入内容" /> - </el-form-item> - <el-form-item label="命令" prop="command"> - <el-input v-model="form.command" placeholder="请输入命令" /> - </el-form-item> - <el-form-item label="mac" prop="mac"> - <el-input v-model="form.mac" placeholder="请输入mac" /> - </el-form-item> - <el-form-item label="响应" prop="result"> - <el-input v-model="form.result" type="textarea" placeholder="请输入内容" /> - </el-form-item> + <el-dialog title="命令日志详细" :visible.sync="open" width="800px" append-to-body> + <el-form ref="form" :model="form" label-width="100px"> + <el-col :span="24"> + <el-form-item label="请求url">{{ form.url }}</el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="命令">{{ form.command }}</el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item style="color: #12d2ac;font-weight: 700" label="类型">{{ form.type }}</el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="MAC">{{ form.mac }}</el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="SN">{{ form.sn }}</el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="响应">{{ form.result }}</el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="回调状态"> + <dict-tag :options="dict.type.onenet_call_status" :value="form.callStatus"/> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="创建时间">{{ parseTime(form.createTime) }}</el-form-item> + </el-col> </el-form> <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> + <el-button @click="open = false">关 闭</el-button> </div> </el-dialog> </div> @@ -156,6 +141,7 @@ import { listCommandLog, getCommandLog, delCommandLog, addCommandLog, updateComm export default { name: "CommandLog", + dicts: ['onenet_call_status'], data() { return { // 遮罩层 @@ -183,6 +169,8 @@ export default { url: null, command: null, mac: null, + sn: null, + orderNo: null, result: null }, // 表单参数 @@ -193,6 +181,14 @@ export default { }; }, created() { + const sn = this.$route.params && this.$route.params.sn; + if (sn != null) { + this.queryParams.sn = sn; + } + const orderNo = this.$route.params && this.$route.params.orderNo; + if (orderNo != null) { + this.queryParams.orderNo = orderNo; + } this.getList(); }, methods: { @@ -221,6 +217,11 @@ export default { }; this.resetForm("form"); }, + /** 详细按钮操作 */ + handleView(row) { + this.open = true; + this.form = row; + }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNum = 1; diff --git a/src/views/system/device/index.vue b/src/views/system/device/index.vue index 58d543e..3a965fd 100644 --- a/src/views/system/device/index.vue +++ b/src/views/system/device/index.vue @@ -238,6 +238,13 @@ @click="ring(scope.row)" v-hasPermi="['system:device:ring']" >响铃</el-button> + <el-button + size="mini" + type="text" + icon="el-icon-document" + @click="toLog(scope.row)" + v-hasPermi="['system:device:log']" + >日志</el-button> <el-button size="mini" type="text" @@ -794,6 +801,9 @@ export default { }); }); }, + toLog(row){ + this.$router.push(`/system/commandLog/index/${row.sn}`); + }, ring(row) { this.reset(); const deviceId = row.deviceId || this.ids diff --git a/src/views/system/onlineLog/index.vue b/src/views/system/onlineLog/index.vue new file mode 100644 index 0000000..fa42caa --- /dev/null +++ b/src/views/system/onlineLog/index.vue @@ -0,0 +1,218 @@ +<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="sn"> + <el-input + v-model="queryParams.sn" + placeholder="请输入SN" + clearable + @keyup.enter.native="handleQuery" + /> + </el-form-item> + <el-form-item label="在线状态" prop="onlineStatus"> + <el-select v-model="queryParams.onlineStatus" placeholder="请选择在线状态" clearable> + <el-option + v-for="dict in dict.type.as_online_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> + </el-form-item> + </el-form> + + + <el-table v-loading="loading" :data="onlineLogList" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" align="center" /> + <el-table-column label="主键" align="center" prop="id" /> + <el-table-column label="MAC" align="center" prop="mac" /> + <el-table-column label="SN" align="center" prop="sn" /> + <el-table-column label="在线状态" align="center" prop="onlineStatus"> + <template slot-scope="scope"> + <dict-tag :options="dict.type.as_online_status" :value="scope.row.onlineStatus"/> + </template> + </el-table-column> + <el-table-column label="经度" align="center" prop="longitude" /> + <el-table-column label="纬度" align="center" prop="latitude" /> + <el-table-column label="记录时间" align="center" prop="createTime" width="180"> + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total>0" + :total="total" + :page.sync="queryParams.pageNum" + :limit.sync="queryParams.pageSize" + @pagination="getList" + /> + + <!-- 添加或修改在线/离线日志对话框 --> + <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> + <el-form ref="form" :model="form" :rules="rules" label-width="80px"> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submitForm">确 定</el-button> + <el-button @click="cancel">取 消</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import { listOnlineLog, getOnlineLog, delOnlineLog, addOnlineLog, updateOnlineLog } from "@/api/system/onlineLog"; + +export default { + name: "OnlineLog", + dicts: ['as_online_status'], + data() { + return { + // 遮罩层 + loading: true, + // 选中数组 + ids: [], + // 非单个禁用 + single: true, + // 非多个禁用 + multiple: true, + // 显示搜索条件 + showSearch: true, + // 总条数 + total: 0, + // 在线/离线日志表格数据 + onlineLogList: [], + // 弹出层标题 + title: "", + // 是否显示弹出层 + open: false, + // 查询参数 + queryParams: { + pageNum: 1, + pageSize: 10, + mac: null, + sn: null, + onlineStatus: null, + }, + // 表单参数 + form: {}, + // 表单校验 + rules: { + } + }; + }, + created() { + this.getList(); + }, + methods: { + /** 查询在线/离线日志列表 */ + getList() { + this.loading = true; + listOnlineLog(this.queryParams).then(response => { + this.onlineLogList = response.rows; + this.total = response.total; + this.loading = false; + }); + }, + // 取消按钮 + cancel() { + this.open = false; + this.reset(); + }, + // 表单重置 + reset() { + this.form = { + id: null, + mac: null, + sn: null, + onlineStatus: null, + longitude: null, + latitude: null, + createTime: null + }; + this.resetForm("form"); + }, + /** 搜索按钮操作 */ + handleQuery() { + this.queryParams.pageNum = 1; + this.getList(); + }, + /** 重置按钮操作 */ + resetQuery() { + this.resetForm("queryForm"); + this.handleQuery(); + }, + // 多选框选中数据 + handleSelectionChange(selection) { + this.ids = selection.map(item => item.id) + this.single = selection.length!==1 + this.multiple = !selection.length + }, + /** 新增按钮操作 */ + handleAdd() { + this.reset(); + this.open = true; + this.title = "添加在线/离线日志"; + }, + /** 修改按钮操作 */ + handleUpdate(row) { + this.reset(); + const id = row.id || this.ids + getOnlineLog(id).then(response => { + this.form = response.data; + this.open = true; + this.title = "修改在线/离线日志"; + }); + }, + /** 提交按钮 */ + submitForm() { + this.$refs["form"].validate(valid => { + if (valid) { + if (this.form.id != null) { + updateOnlineLog(this.form).then(response => { + this.$modal.msgSuccess("修改成功"); + this.open = false; + this.getList(); + }); + } else { + addOnlineLog(this.form).then(response => { + this.$modal.msgSuccess("新增成功"); + this.open = false; + this.getList(); + }); + } + } + }); + }, + /** 删除按钮操作 */ + handleDelete(row) { + const ids = row.id || this.ids; + this.$modal.confirm('是否确认删除在线/离线日志编号为"' + ids + '"的数据项?').then(function() { + return delOnlineLog(ids); + }).then(() => { + this.getList(); + this.$modal.msgSuccess("删除成功"); + }).catch(() => {}); + }, + /** 导出按钮操作 */ + handleExport() { + this.download('system/onlineLog/export', { + ...this.queryParams + }, `onlineLog_${new Date().getTime()}.xlsx`) + } + } +}; +</script> diff --git a/src/views/system/order/index.vue b/src/views/system/order/index.vue index f4c16e6..28a3140 100644 --- a/src/views/system/order/index.vue +++ b/src/views/system/order/index.vue @@ -123,11 +123,6 @@ <dict-tag :options="dict.type.et_pay_type" :value="scope.row.payType"/> </template> </el-table-column> -<!-- <el-table-column label="类型" align="center" prop="type">--> -<!-- <template slot-scope="scope">--> -<!-- <dict-tag :options="dict.type.et_order_type" :value="scope.row.type"/>--> -<!-- </template>--> -<!-- </el-table-column>--> <el-table-column label="金额(元)" align="center" prop="totalFee" width="70"/> <el-table-column label="备注" align="center" prop="mark" /> <el-table-column label="订单时长" align="center" prop="duration" :formatter="formatDuration"/> @@ -174,6 +169,13 @@ @click="returnVehicle(scope.row)" v-hasPermi="['system:order:edit']" >辅助还车</el-button> + <el-button + size="mini" + type="text" + icon="el-icon-document" + @click="toLog(scope.row)" + v-hasPermi="['system:order:log']" + >日志</el-button> </template> </el-table-column> </el-table> @@ -456,6 +458,9 @@ export default { this.getAreaList(); }, methods: { + toLog(row){ + this.$router.push(`/system/commandLog/orderNo/index/${row.orderNo}`); + }, getTypeText(type) { switch (type) { case '1':