修复1.2.0的问题
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
zpc 2026-04-20 16:25:36 +08:00
parent 8fb83a8b93
commit be824e7f06
4 changed files with 163 additions and 27 deletions

View File

@ -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>()

View File

@ -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; }

View File

@ -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

View File

@ -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 '(无数据)'