This commit is contained in:
parent
8fb83a8b93
commit
be824e7f06
|
|
@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Mvc;
|
|||
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
using SqlSugar;
|
||||
using SqlSugar.IOC;
|
||||
using System.Text.Json;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
|
|
@ -310,7 +311,7 @@ namespace ZR.Admin.WebApi.Filters
|
|||
{
|
||||
try
|
||||
{
|
||||
var db = App.GetService<ISqlSugarClient>();
|
||||
var db = DbScoped.SugarScope;
|
||||
if (db == null) return null;
|
||||
|
||||
var data = await db.Queryable<dynamic>()
|
||||
|
|
|
|||
|
|
@ -80,6 +80,8 @@ namespace ZR.Model.Business.Dto
|
|||
public string? ActualMileage { get; set; }
|
||||
|
||||
public string? DeptName { get; set; }
|
||||
|
||||
public string? CableName { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -107,6 +109,8 @@ namespace ZR.Model.Business.Dto
|
|||
|
||||
public string? DeptName { get; set; }
|
||||
|
||||
public string? CableName { get; set; }
|
||||
|
||||
public long? UserId { get; set; }
|
||||
|
||||
public DateTime? CreatedAt { get; set; }
|
||||
|
|
|
|||
|
|
@ -29,28 +29,32 @@ namespace ZR.Service.Business
|
|||
// 按 CableId 过滤
|
||||
predicate = predicate.AndIF(parm.CableId != null, it => it.CableId == parm.CableId);
|
||||
|
||||
// 按名称关键字过滤
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Keyword), it => it.Name.Contains(parm.Keyword));
|
||||
|
||||
var total = 0;
|
||||
var list = Queryable()
|
||||
.LeftJoin<OdfCables>((mp, c) => mp.CableId == c.Id)
|
||||
.Where(predicate.ToExpression())
|
||||
.OrderByDescending(it => it.RecordTime)
|
||||
.OrderByDescending((mp, c) => mp.RecordTime)
|
||||
.Select((mp, c) => new OdfMarkerPoleListDto
|
||||
{
|
||||
Id = mp.Id,
|
||||
CableId = mp.CableId,
|
||||
Name = mp.Name,
|
||||
RecordTime = mp.RecordTime,
|
||||
Personnel = mp.Personnel,
|
||||
Latitude = mp.Latitude,
|
||||
Longitude = mp.Longitude,
|
||||
ActualMileage = mp.ActualMileage,
|
||||
DeptName = mp.DeptName,
|
||||
CableName = c.CableName
|
||||
})
|
||||
.ToPageList(parm.PageNum, parm.PageSize, ref total);
|
||||
|
||||
var result = list.Select(it => new OdfMarkerPoleListDto
|
||||
{
|
||||
Id = it.Id,
|
||||
CableId = it.CableId,
|
||||
Name = it.Name,
|
||||
RecordTime = it.RecordTime,
|
||||
Personnel = it.Personnel,
|
||||
Latitude = it.Latitude,
|
||||
Longitude = it.Longitude,
|
||||
ActualMileage = it.ActualMileage,
|
||||
DeptName = it.DeptName
|
||||
}).ToList();
|
||||
|
||||
return new PagedInfo<OdfMarkerPoleListDto>
|
||||
{
|
||||
Result = result,
|
||||
Result = list,
|
||||
TotalNum = total,
|
||||
PageIndex = parm.PageNum,
|
||||
PageSize = parm.PageSize
|
||||
|
|
@ -68,6 +72,10 @@ namespace ZR.Service.Business
|
|||
throw new CustomException("标石记录不存在");
|
||||
}
|
||||
|
||||
var cable = Context.Queryable<OdfCables>()
|
||||
.Where(c => c.Id == entity.CableId)
|
||||
.First();
|
||||
|
||||
var images = Context.Queryable<OdfMarkerPoleImages>()
|
||||
.Where(img => img.MarkerPoleId == id)
|
||||
.OrderBy(img => img.Id)
|
||||
|
|
@ -85,7 +93,11 @@ namespace ZR.Service.Business
|
|||
Longitude = entity.Longitude,
|
||||
ActualMileage = entity.ActualMileage,
|
||||
DeptId = entity.DeptId,
|
||||
DeptName = entity.DeptName,
|
||||
DeptName = entity.DeptName ?? Context.Queryable<SysDept>()
|
||||
.Where(d => d.DeptId == entity.DeptId)
|
||||
.Select(d => d.DeptName)
|
||||
.First(),
|
||||
CableName = cable?.CableName,
|
||||
UserId = entity.UserId,
|
||||
CreatedAt = entity.CreatedAt,
|
||||
UpdatedAt = entity.UpdatedAt,
|
||||
|
|
@ -113,10 +125,21 @@ namespace ZR.Service.Business
|
|||
throw new CustomException("请至少上传一张图片");
|
||||
}
|
||||
|
||||
// 查询部门名称
|
||||
var dept = Context.Queryable<SysDept>()
|
||||
.Where(d => d.DeptId == deptId)
|
||||
.First();
|
||||
// 查询部门名称;若当前用户无部门(如超级管理员 DeptId=0),从光缆继承
|
||||
var actualDeptId = deptId;
|
||||
string actualDeptName = null;
|
||||
if (deptId > 0)
|
||||
{
|
||||
var dept = Context.Queryable<SysDept>()
|
||||
.Where(d => d.DeptId == deptId)
|
||||
.First();
|
||||
actualDeptName = dept?.DeptName;
|
||||
}
|
||||
else
|
||||
{
|
||||
actualDeptId = cable.DeptId;
|
||||
actualDeptName = cable.DeptName;
|
||||
}
|
||||
|
||||
var model = new OdfMarkerPoles
|
||||
{
|
||||
|
|
@ -127,8 +150,8 @@ namespace ZR.Service.Business
|
|||
Latitude = dto.Latitude,
|
||||
Longitude = dto.Longitude,
|
||||
ActualMileage = dto.ActualMileage,
|
||||
DeptId = deptId,
|
||||
DeptName = dept?.DeptName,
|
||||
DeptId = actualDeptId,
|
||||
DeptName = actualDeptName,
|
||||
UserId = dto.UserId,
|
||||
CreatedAt = DateTime.Now,
|
||||
UpdatedAt = DateTime.Now
|
||||
|
|
|
|||
|
|
@ -58,7 +58,11 @@
|
|||
<span v-else>{{ scope.row.sourceClient }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="tableName" label="表名" align="center" :show-overflow-tooltip="true" v-if="columns.showColumn('tableName')" />
|
||||
<el-table-column prop="tableName" label="表名" align="center" :show-overflow-tooltip="true" v-if="columns.showColumn('tableName')">
|
||||
<template #default="scope">
|
||||
{{ tableNameMap[scope.row.tableName] || scope.row.tableName }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
|
|
@ -79,7 +83,7 @@
|
|||
<el-descriptions-item label="操作时间">{{ detailRow.operationTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="操作类型">{{ detailRow.operationType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="操作来源">{{ detailRow.sourceClient }}</el-descriptions-item>
|
||||
<el-descriptions-item label="表名">{{ detailRow.tableName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="表名">{{ tableNameMap[detailRow.tableName] || detailRow.tableName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="记录ID">{{ detailRow.recordId }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-row :gutter="20">
|
||||
|
|
@ -88,7 +92,7 @@
|
|||
<el-input
|
||||
type="textarea"
|
||||
:rows="15"
|
||||
:model-value="formatJson(detailRow.oldData)"
|
||||
:model-value="translateJson(detailRow.oldData, detailRow.tableName)"
|
||||
readonly />
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
|
|
@ -96,7 +100,7 @@
|
|||
<el-input
|
||||
type="textarea"
|
||||
:rows="15"
|
||||
:model-value="formatJson(detailRow.newData)"
|
||||
:model-value="translateJson(detailRow.newData, detailRow.tableName)"
|
||||
readonly />
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -193,6 +197,110 @@ function handleViewDetail(row) {
|
|||
detailVisible.value = true
|
||||
}
|
||||
|
||||
// 字段名中文映射(按表名分组,通用字段放 _common)
|
||||
const fieldLabelMap = {
|
||||
_common: {
|
||||
id: 'ID',
|
||||
name: '名称',
|
||||
deptId: '部门ID',
|
||||
deptName: '所属公司',
|
||||
createdAt: '创建时间',
|
||||
updatedAt: '修改时间',
|
||||
remarks: '备注说明',
|
||||
status: '连接状态',
|
||||
latitude: '纬度',
|
||||
longitude: '经度',
|
||||
userId: '用户ID',
|
||||
personnel: '责任人',
|
||||
},
|
||||
odf_ports: {
|
||||
roomId: '机房ID',
|
||||
roomName: '机房名称',
|
||||
rackId: '机架ID',
|
||||
rackName: '机架名称',
|
||||
frameId: '框ID',
|
||||
frameName: '框名称',
|
||||
rowNumber: '行号',
|
||||
portNumber: '端口号',
|
||||
opticalAttenuation: '光衰值(dB)',
|
||||
historyRemarks: '历史故障',
|
||||
opticalCableOffRemarks: '光缆断信息',
|
||||
equipmentModel: '设备型号',
|
||||
businessType: '业务类型',
|
||||
portSide: '端口侧',
|
||||
rackType: '机架类型',
|
||||
},
|
||||
odf_rooms: {
|
||||
roomName: '机房名称',
|
||||
roomAddress: '机房位置',
|
||||
racksCount: '机架数量',
|
||||
orderby: '排序',
|
||||
},
|
||||
odf_racks: {
|
||||
roomId: '机房ID',
|
||||
sequenceNumber: '序号',
|
||||
rackName: '机架名称',
|
||||
frameCount: '框数量',
|
||||
rackType: '机架类型',
|
||||
},
|
||||
odf_frames: {
|
||||
rackId: '机架ID',
|
||||
portsName: '框名称',
|
||||
sequenceNumber: '序号',
|
||||
portsCount: '端口数量',
|
||||
portsCol: '列数量',
|
||||
portsRow: '行数量',
|
||||
updateAt: '修改时间',
|
||||
},
|
||||
odf_cables: {
|
||||
cableName: '光缆名称',
|
||||
},
|
||||
odf_cable_faults: {
|
||||
cableId: '光缆ID',
|
||||
faultTime: '故障时间',
|
||||
faultReason: '故障原因',
|
||||
mileage: '表显故障里程',
|
||||
mileageCorrection: '表显里程矫正',
|
||||
location: '地点描述',
|
||||
remark: '备注',
|
||||
faultCount: '故障频次',
|
||||
},
|
||||
odf_marker_poles: {
|
||||
cableId: '光缆ID',
|
||||
recordTime: '记录时间',
|
||||
actualMileage: '实际里程',
|
||||
},
|
||||
}
|
||||
|
||||
// 表名中文映射
|
||||
const tableNameMap = {
|
||||
odf_ports: '端口',
|
||||
odf_rooms: '机房',
|
||||
odf_racks: '机架',
|
||||
odf_frames: '框',
|
||||
odf_cables: '光缆',
|
||||
odf_cable_faults: '干线故障',
|
||||
odf_marker_poles: '标石/杆号牌',
|
||||
}
|
||||
|
||||
// 将 JSON 中的字段名替换为中文标签
|
||||
function translateJson(jsonStr, tableName) {
|
||||
if (!jsonStr) return '(无数据)'
|
||||
try {
|
||||
const obj = JSON.parse(jsonStr)
|
||||
const tableMap = fieldLabelMap[tableName] || {}
|
||||
const commonMap = fieldLabelMap._common
|
||||
const translated = {}
|
||||
for (const [key, value] of Object.entries(obj)) {
|
||||
const label = tableMap[key] || commonMap[key] || key
|
||||
translated[label] = value
|
||||
}
|
||||
return JSON.stringify(translated, null, 2)
|
||||
} catch {
|
||||
return jsonStr
|
||||
}
|
||||
}
|
||||
|
||||
// 格式化 JSON 字符串
|
||||
function formatJson(jsonStr) {
|
||||
if (!jsonStr) return '(无数据)'
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user