@@ -16,4 +16,20 @@ public class ApplicationConst | |||||
public const string BIZ_POS = "岗位"; | public const string BIZ_POS = "岗位"; | ||||
#endregion 别称 | #endregion 别称 | ||||
#region 学校基础摄像头分组配置 | |||||
/// <summary> | |||||
/// 图书馆分组id | |||||
/// </summary> | |||||
public const long TSG = 583660006621253; | |||||
/// <summary> | |||||
/// 食堂分组id | |||||
/// </summary> | |||||
public const long ST = 583659984986181; | |||||
/// <summary> | |||||
/// 学校大门分组id | |||||
/// </summary> | |||||
public const long XXDM = 583659952070725; | |||||
#endregion | |||||
} | } |
@@ -14,6 +14,21 @@ | |||||
岗位 | 岗位 | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="F:SafeCampus.Application.ApplicationConst.TSG"> | |||||
<summary> | |||||
图书馆分组id | |||||
</summary> | |||||
</member> | |||||
<member name="F:SafeCampus.Application.ApplicationConst.ST"> | |||||
<summary> | |||||
食堂分组id | |||||
</summary> | |||||
</member> | |||||
<member name="F:SafeCampus.Application.ApplicationConst.XXDM"> | |||||
<summary> | |||||
学校大门分组id | |||||
</summary> | |||||
</member> | |||||
<member name="T:SafeCampus.Application.Manager.DeepelephManager.DeepelephManager"> | <member name="T:SafeCampus.Application.Manager.DeepelephManager.DeepelephManager"> | ||||
<summary> | <summary> | ||||
深象智能对接实现 | 深象智能对接实现 | ||||
@@ -807,6 +822,21 @@ | |||||
人员id | 人员id | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:SafeCampus.Application.Services.Business.ClassRoomCallService.ClassRoomCallInsert.PersonSetId"> | |||||
<summary> | |||||
关联底库id 如果为空,表示该人员未匹配到底库 | |||||
</summary> | |||||
</member> | |||||
<member name="P:SafeCampus.Application.Services.Business.ClassRoomCallService.ClassRoomCallInsert.PersonId"> | |||||
<summary> | |||||
人员id | |||||
</summary> | |||||
</member> | |||||
<member name="P:SafeCampus.Application.Services.Business.ClassRoomCallService.ClassRoomCallInsert.TaskId"> | |||||
<summary> | |||||
所属点名任务 | |||||
</summary> | |||||
</member> | |||||
<member name="M:SafeCampus.Application.Services.Business.ClassRoomCallService.IClassRoomCallService.Add(SafeCampus.Application.Services.Business.ClassRoomCallService.ClassRoomCallDto)"> | <member name="M:SafeCampus.Application.Services.Business.ClassRoomCallService.IClassRoomCallService.Add(SafeCampus.Application.Services.Business.ClassRoomCallService.ClassRoomCallDto)"> | ||||
<summary> | <summary> | ||||
添加点名记录 | 添加点名记录 | ||||
@@ -1259,6 +1289,11 @@ | |||||
院系id | 院系id | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:SafeCampus.Application.Services.Business.MajorService.MajorDto.Sort"> | |||||
<summary> | |||||
排序 | |||||
</summary> | |||||
</member> | |||||
<member name="P:SafeCampus.Application.Services.Business.MajorService.MajorSearch.Name"> | <member name="P:SafeCampus.Application.Services.Business.MajorService.MajorSearch.Name"> | ||||
<summary> | <summary> | ||||
专业名称 | 专业名称 | ||||
@@ -1622,7 +1657,7 @@ | |||||
<param name="input"></param> | <param name="input"></param> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:SafeCampus.Application.Services.Business.PersonSetInfoService.IPersonSetInfoService.GetPageList(System.Nullable{System.Int64})"> | |||||
<member name="M:SafeCampus.Application.Services.Business.PersonSetInfoService.IPersonSetInfoService.GetPageList(System.Nullable{System.Int64},System.String)"> | |||||
<summary> | <summary> | ||||
获取底库列表 | 获取底库列表 | ||||
</summary> | </summary> | ||||
@@ -1888,6 +1923,11 @@ | |||||
班级id(不是必填) | 班级id(不是必填) | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:SafeCampus.Application.Services.Business.Warn.Dto.WarnInfoSearch.PersonId"> | |||||
<summary> | |||||
人员id | |||||
</summary> | |||||
</member> | |||||
<member name="P:SafeCampus.Application.Services.Business.Warn.Dto.WarnInfoSearch.StartTick"> | <member name="P:SafeCampus.Application.Services.Business.Warn.Dto.WarnInfoSearch.StartTick"> | ||||
<summary> | <summary> | ||||
事件发生时间开始 | 事件发生时间开始 | ||||
@@ -1903,6 +1943,11 @@ | |||||
摄像头id | 摄像头id | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:SafeCampus.Application.Services.Business.Warn.Dto.WarnInfoSearch.CameraIds"> | |||||
<summary> | |||||
摄像头ids(不是必填) | |||||
</summary> | |||||
</member> | |||||
<member name="P:SafeCampus.Application.Services.Business.Warn.Dto.WarnInfoSearch.WarnHand"> | <member name="P:SafeCampus.Application.Services.Business.Warn.Dto.WarnInfoSearch.WarnHand"> | ||||
<summary> | <summary> | ||||
预警处理状态 | 预警处理状态 | ||||
@@ -1,4 +1,6 @@ | |||||
namespace SafeCampus.Application.Services.Business.ClassRoomCallService; | |||||
using Dm; | |||||
namespace SafeCampus.Application.Services.Business.ClassRoomCallService; | |||||
public class ClassRoomCallService : DbRepository<ClassRoomCall>, IClassRoomCallService | public class ClassRoomCallService : DbRepository<ClassRoomCall>, IClassRoomCallService | ||||
{ | { | ||||
@@ -14,4 +14,20 @@ public class ClassRoomCallUpdate | |||||
/// 人员id | /// 人员id | ||||
/// </summary> | /// </summary> | ||||
public string PersonId { get; set; } | public string PersonId { get; set; } | ||||
} | |||||
public class ClassRoomCallInsert | |||||
{ | |||||
/// <summary> | |||||
/// 关联底库id 如果为空,表示该人员未匹配到底库 | |||||
/// </summary> | |||||
public string PersonSetId { get; set; } | |||||
/// <summary> | |||||
/// 人员id | |||||
/// </summary> | |||||
public string PersonId { get; set; } | |||||
/// <summary> | |||||
///所属点名任务 | |||||
/// </summary> | |||||
public string TaskId { get; set; } | |||||
} | } |
@@ -1,6 +1,4 @@ | |||||
using SafeCampus.Application.Services.Business.DepartmentService; | |||||
namespace SafeCampus.Application.Services.Business.MajorService; | |||||
namespace SafeCampus.Application.Services.Business.MajorService; | |||||
public class MajorDto | public class MajorDto | ||||
{ | { | ||||
@@ -21,6 +19,10 @@ public class MajorDto | |||||
/// 院系id | /// 院系id | ||||
/// </summary> | /// </summary> | ||||
public long DepId { get; set; } | public long DepId { get; set; } | ||||
/// <summary> | |||||
/// 排序 | |||||
/// </summary> | |||||
public int Sort { get; set; } | |||||
public string DepartmentName { get; set; } | public string DepartmentName { get; set; } | ||||
} | } | ||||
@@ -66,6 +66,9 @@ public class PersonInfoDto | |||||
/// 进班时间 | /// 进班时间 | ||||
/// </summary> | /// </summary> | ||||
public DateTime? InsTime { get; set; } | public DateTime? InsTime { get; set; } | ||||
public string DepName { get; set; } | |||||
public string MajorName { get; set; } | |||||
} | } | ||||
public class PersonInfoDtoMapper : IRegister | public class PersonInfoDtoMapper : IRegister | ||||
{ | { | ||||
@@ -76,6 +79,8 @@ public class PersonInfoDtoMapper : IRegister | |||||
.Map(dest => dest.PersonSetId, src => src.PersonSetId) | .Map(dest => dest.PersonSetId, src => src.PersonSetId) | ||||
.Map(dest => dest.PersonSetName, src => src.PersonSetInfoItem.PersonSetName) | .Map(dest => dest.PersonSetName, src => src.PersonSetInfoItem.PersonSetName) | ||||
.Map(dest => dest.Faces, src => src.PersonFacesList) | .Map(dest => dest.Faces, src => src.PersonFacesList) | ||||
.Map(dest => dest.DormitoryName, src => src.DormitoryInfoItem.Name); | |||||
.Map(dest => dest.DormitoryName, src => src.DormitoryInfoItem.Name) | |||||
.Map(dest => dest.DepName, src => src.PersonSetInfoItem.MajorInfoItem.DepartmentInfoItem.Name) | |||||
.Map(dest => dest.MajorName, src => src.PersonSetInfoItem.MajorInfoItem.Name); | |||||
} | } | ||||
} | } |
@@ -29,7 +29,7 @@ public class PersonInfoService:DbRepository<PersonInfo>, IPersonInfoService | |||||
{ | { | ||||
var model = await Context.Queryable<PersonInfo>() | var model = await Context.Queryable<PersonInfo>() | ||||
.Includes(x => x.DormitoryInfoItem) | .Includes(x => x.DormitoryInfoItem) | ||||
.Includes(x => x.PersonSetInfoItem) | |||||
.Includes(x => x.PersonSetInfoItem,x=>x.MajorInfoItem,x=>x.DepartmentInfoItem) | |||||
.Includes(x => x.PersonFacesList) | .Includes(x => x.PersonFacesList) | ||||
.FirstAsync(x => x.PersonId == id); | .FirstAsync(x => x.PersonId == id); | ||||
if (model == null) | if (model == null) | ||||
@@ -64,7 +64,7 @@ public class PersonInfoService:DbRepository<PersonInfo>, IPersonInfoService | |||||
public async Task<SqlSugarPagedList<PersonInfoDto>> GetPageList(PersonInfoSearch search) | public async Task<SqlSugarPagedList<PersonInfoDto>> GetPageList(PersonInfoSearch search) | ||||
{ | { | ||||
var query = Context.Queryable<PersonInfo>() | var query = Context.Queryable<PersonInfo>() | ||||
.Includes(x => x.PersonSetInfoItem) | |||||
.Includes(x => x.PersonSetInfoItem, x => x.MajorInfoItem, x => x.DepartmentInfoItem) | |||||
.Includes(x=>x.PersonFacesList) | .Includes(x=>x.PersonFacesList) | ||||
.Includes(x=>x.DormitoryInfoItem) | .Includes(x=>x.DormitoryInfoItem) | ||||
.WhereIF(!string.IsNullOrEmpty(search.PersonSetId), x => x.PersonSetId == search.PersonSetId) | .WhereIF(!string.IsNullOrEmpty(search.PersonSetId), x => x.PersonSetId == search.PersonSetId) | ||||
@@ -23,5 +23,5 @@ public interface IPersonSetInfoService:ITransient | |||||
/// 获取底库列表 | /// 获取底库列表 | ||||
/// </summary> | /// </summary> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
Task<List<PersonSetInfoDto>> GetPageList(long? majorId); | |||||
Task<List<PersonSetInfoDto>> GetPageList(long? majorId,string setName); | |||||
} | } |
@@ -38,12 +38,13 @@ public class PersonSetInfoService:DbRepository<PersonSetInfo>, IPersonSetInfoSer | |||||
return true; | return true; | ||||
} | } | ||||
public async Task<List<PersonSetInfoDto>> GetPageList(long? majorId) | |||||
public async Task<List<PersonSetInfoDto>> GetPageList(long? majorId, string setName) | |||||
{ | { | ||||
var list =await Context.Queryable<PersonSetInfo>() | var list =await Context.Queryable<PersonSetInfo>() | ||||
.Includes(x=>x.MajorInfoItem,x=>x.DepartmentInfoItem) | .Includes(x=>x.MajorInfoItem,x=>x.DepartmentInfoItem) | ||||
.Where(x=>x.PersonSetId!=SafeCampusConst.ZDRY) | .Where(x=>x.PersonSetId!=SafeCampusConst.ZDRY) | ||||
.WhereIF(majorId.HasValue,x=>x.MajorId==majorId) | .WhereIF(majorId.HasValue,x=>x.MajorId==majorId) | ||||
.WhereIF(!string.IsNullOrEmpty(setName),x=>x.PersonSetName.Contains(setName)) | |||||
.Includes(x => x.ClassTeacherItem, st => st.SysUserItem) | .Includes(x => x.ClassTeacherItem, st => st.SysUserItem) | ||||
.ToListAsync(); | .ToListAsync(); | ||||
return list.Adapt<List<PersonSetInfoDto>>(); | return list.Adapt<List<PersonSetInfoDto>>(); | ||||
@@ -15,6 +15,10 @@ public class WarnInfoSearch:BasePageInput | |||||
/// </summary> | /// </summary> | ||||
public List<string> PersonSetIds { get; set; } | public List<string> PersonSetIds { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 人员id | |||||
/// </summary> | |||||
public string PersonId { get; set; } | |||||
/// <summary> | |||||
/// 事件发生时间开始 | /// 事件发生时间开始 | ||||
/// </summary> | /// </summary> | ||||
public DateTime? StartTick { get; set; } | public DateTime? StartTick { get; set; } | ||||
@@ -27,6 +31,10 @@ public class WarnInfoSearch:BasePageInput | |||||
/// </summary> | /// </summary> | ||||
public string CameraId { get; set; } | public string CameraId { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 摄像头ids(不是必填) | |||||
/// </summary> | |||||
public List<string> CameraIds { get; set; } | |||||
/// <summary> | |||||
/// 预警处理状态 | /// 预警处理状态 | ||||
/// </summary> | /// </summary> | ||||
public int? WarnHand { get; set; } | public int? WarnHand { get; set; } |
@@ -137,7 +137,9 @@ public class WarnInfoService:DbRepository<WarnInfo>, IWarnInfoService,ITransient | |||||
.WhereIF(!string.IsNullOrEmpty(search.AlarmType), x => x.AlarmType == search.AlarmType) | .WhereIF(!string.IsNullOrEmpty(search.AlarmType), x => x.AlarmType == search.AlarmType) | ||||
.WhereIF(search.AlarmTypes!=null&&search.AlarmTypes.Any(),x=>search.AlarmTypes.Contains(x.AlarmType)) | .WhereIF(search.AlarmTypes!=null&&search.AlarmTypes.Any(),x=>search.AlarmTypes.Contains(x.AlarmType)) | ||||
.WhereIF(search.PersonSetIds != null&&search.PersonSetIds.Any(),x=>search.PersonSetIds.Contains(x.PersonSetId)) | .WhereIF(search.PersonSetIds != null&&search.PersonSetIds.Any(),x=>search.PersonSetIds.Contains(x.PersonSetId)) | ||||
.WhereIF(search.CameraIds != null&&search.CameraIds.Any(),x=>search.CameraIds.Contains(x.CameraId)) | |||||
.WhereIF(!string.IsNullOrEmpty(search.CameraId), x => x.CameraId == search.CameraId) | .WhereIF(!string.IsNullOrEmpty(search.CameraId), x => x.CameraId == search.CameraId) | ||||
.WhereIF(!string.IsNullOrEmpty(search.PersonId), x => x.PersonId == search.PersonId) | |||||
.WhereIF(search.StartTick.HasValue, x => x.Tick >= search.StartTick) | .WhereIF(search.StartTick.HasValue, x => x.Tick >= search.StartTick) | ||||
.WhereIF(search.EndTick.HasValue, x => x.Tick <= search.EndTick); | .WhereIF(search.EndTick.HasValue, x => x.Tick <= search.EndTick); | ||||
@@ -6,136 +6,163 @@ public enum AlarmType | |||||
/// 周界入侵 | /// 周界入侵 | ||||
/// </summary> | /// </summary> | ||||
[Description("周界入侵")] | [Description("周界入侵")] | ||||
[Display(Name = "visual_fence")] | |||||
visual_fence, | visual_fence, | ||||
/// <summary> | /// <summary> | ||||
/// 翻越 | /// 翻越 | ||||
/// </summary> | /// </summary> | ||||
[Description("翻越")] | [Description("翻越")] | ||||
[Display(Name = "climb_over")] | |||||
climb_over, | climb_over, | ||||
/// <summary> | /// <summary> | ||||
/// 人群聚集 | /// 人群聚集 | ||||
/// </summary> | /// </summary> | ||||
[Description("人群聚集")] | [Description("人群聚集")] | ||||
[Display(Name = "crowd")] | |||||
crowd, | crowd, | ||||
/// <summary> | /// <summary> | ||||
/// 烟火告警 | /// 烟火告警 | ||||
/// </summary> | /// </summary> | ||||
[Description("烟火告警")] | [Description("烟火告警")] | ||||
[Display(Name = "fire_smoke")] | |||||
fire_smoke, | fire_smoke, | ||||
/// <summary> | /// <summary> | ||||
/// 可疑徘徊 | /// 可疑徘徊 | ||||
/// </summary> | /// </summary> | ||||
[Description("可疑徘徊")] | [Description("可疑徘徊")] | ||||
[Display(Name = "wander")] | |||||
wander, | wander, | ||||
/// <summary> | /// <summary> | ||||
/// 重点人员布控 | /// 重点人员布控 | ||||
/// </summary> | /// </summary> | ||||
[Description("重点人员布控")] | [Description("重点人员布控")] | ||||
[Display(Name = "blacklist")] | |||||
blacklist, | blacklist, | ||||
/// <summary> | /// <summary> | ||||
/// 奔跑 | /// 奔跑 | ||||
/// </summary> | /// </summary> | ||||
[Description("奔跑")] | [Description("奔跑")] | ||||
[Display(Name = "run")] | |||||
run, | run, | ||||
/// <summary> | /// <summary> | ||||
/// 追逐 | /// 追逐 | ||||
/// </summary> | /// </summary> | ||||
[Description("追逐")] | [Description("追逐")] | ||||
[Display(Name = "chase")] | |||||
chase, | chase, | ||||
/// <summary> | /// <summary> | ||||
/// 摔倒 | /// 摔倒 | ||||
/// </summary> | /// </summary> | ||||
[Description("摔倒")] | [Description("摔倒")] | ||||
[Display(Name = "fall_down")] | |||||
fall_down, | fall_down, | ||||
/// <summary> | /// <summary> | ||||
/// 跨线 | /// 跨线 | ||||
/// </summary> | /// </summary> | ||||
[Description("跨线")] | [Description("跨线")] | ||||
[Display(Name = "cross_line")] | |||||
cross_line, | cross_line, | ||||
/// <summary> | /// <summary> | ||||
/// 教室点名 | /// 教室点名 | ||||
/// </summary> | /// </summary> | ||||
[Description("教室点名")] | [Description("教室点名")] | ||||
[Display(Name = "class_room_call")] | |||||
class_room_call, | class_room_call, | ||||
/// <summary> | /// <summary> | ||||
/// 趴桌子 | /// 趴桌子 | ||||
/// </summary> | /// </summary> | ||||
[Description("趴桌子")] | [Description("趴桌子")] | ||||
[Display(Name = "lie_on_table")] | |||||
lie_on_table, | lie_on_table, | ||||
/// <summary> | /// <summary> | ||||
/// 抽烟检测 | /// 抽烟检测 | ||||
/// </summary> | /// </summary> | ||||
[Description("抽烟检测")] | [Description("抽烟检测")] | ||||
[Display(Name = "person_smoke")] | |||||
person_smoke, | person_smoke, | ||||
/// <summary> | /// <summary> | ||||
/// 猫鼠检测 | /// 猫鼠检测 | ||||
/// </summary> | /// </summary> | ||||
[Description("猫鼠检测")] | [Description("猫鼠检测")] | ||||
[Display(Name = "animal_break_in")] | |||||
animal_break_in, | animal_break_in, | ||||
/// <summary> | /// <summary> | ||||
/// 巡更检测 | /// 巡更检测 | ||||
/// </summary> | /// </summary> | ||||
[Description("巡更检测")] | [Description("巡更检测")] | ||||
[Display(Name = "patrol")] | |||||
patrol, | patrol, | ||||
/// <summary> | /// <summary> | ||||
/// 离岗检测 | /// 离岗检测 | ||||
/// </summary> | /// </summary> | ||||
[Description("离岗检测")] | [Description("离岗检测")] | ||||
[Display(Name = "off_duty")] | |||||
off_duty, | off_duty, | ||||
/// <summary> | /// <summary> | ||||
/// 打闹检测 | /// 打闹检测 | ||||
/// </summary> | /// </summary> | ||||
[Description("打闹检测")] | [Description("打闹检测")] | ||||
[Display(Name = "fight")] | |||||
fight, | fight, | ||||
/// <summary> | /// <summary> | ||||
/// 未戴帽子检测 | /// 未戴帽子检测 | ||||
/// </summary> | /// </summary> | ||||
[Description("未戴帽子检测")] | [Description("未戴帽子检测")] | ||||
[Display(Name = "hat_detect")] | |||||
hat_detect, | hat_detect, | ||||
/// <summary> | /// <summary> | ||||
/// 未戴口罩检测 | /// 未戴口罩检测 | ||||
/// </summary> | /// </summary> | ||||
[Description("未戴口罩检测")] | [Description("未戴口罩检测")] | ||||
[Display(Name = "mask_detect")] | |||||
mask_detect, | mask_detect, | ||||
/// <summary> | /// <summary> | ||||
/// 未穿工作服检测 | /// 未穿工作服检测 | ||||
/// </summary> | /// </summary> | ||||
[Description("未穿工作服检测")] | [Description("未穿工作服检测")] | ||||
[Display(Name = "cloth_detect")] | |||||
cloth_detect, | cloth_detect, | ||||
/// <summary> | /// <summary> | ||||
/// 洗手行为采集 | /// 洗手行为采集 | ||||
/// </summary> | /// </summary> | ||||
[Description("洗手行为采集")] | [Description("洗手行为采集")] | ||||
[Display(Name = "wash_hand")] | |||||
wash_hand, | wash_hand, | ||||
/// <summary> | /// <summary> | ||||
/// 车辆违停 | /// 车辆违停 | ||||
/// </summary> | /// </summary> | ||||
[Description("车辆违停")] | [Description("车辆违停")] | ||||
[Display(Name = "vehicle_parking")] | |||||
vehicle_parking, | vehicle_parking, | ||||
/// <summary> | /// <summary> | ||||
/// 车辆超速 | /// 车辆超速 | ||||
/// </summary> | /// </summary> | ||||
[Description("车辆超速")] | [Description("车辆超速")] | ||||
[Display(Name = "vehicle_speeding")] | |||||
vehicle_speeding, | vehicle_speeding, | ||||
/// <summary> | /// <summary> | ||||
/// 违规占道 | /// 违规占道 | ||||
/// </summary> | /// </summary> | ||||
[Description("违规占道")] | [Description("违规占道")] | ||||
[Display(Name = "violation_occupy")] | |||||
violation_occupy, | violation_occupy, | ||||
/// <summary> | /// <summary> | ||||
/// 玩手机 | /// 玩手机 | ||||
/// </summary> | /// </summary> | ||||
[Description("玩手机")] | [Description("玩手机")] | ||||
[Display(Name = "play_phone")] | |||||
play_phone, | play_phone, | ||||
/// <summary> | /// <summary> | ||||
/// 骑车未戴头盔 | /// 骑车未戴头盔 | ||||
/// </summary> | /// </summary> | ||||
[Description("骑车未戴头盔")] | [Description("骑车未戴头盔")] | ||||
[Display(Name = "bike_without_helmet")] | |||||
bike_without_helmet, | bike_without_helmet, | ||||
/// <summary> | /// <summary> | ||||
/// 儿童骑平衡车 | /// 儿童骑平衡车 | ||||
/// </summary> | /// </summary> | ||||
[Description("儿童骑平衡车/滑板车")] | [Description("儿童骑平衡车/滑板车")] | ||||
[Display(Name = "segway_with_child")] | |||||
segway_with_child | segway_with_child | ||||
@@ -1,14 +1,4 @@ | |||||
| |||||
// | |||||
namespace SafeCampus.SqlSugar; | |||||
namespace SafeCampus.SqlSugar; | |||||
/// <summary> | /// <summary> | ||||
/// AppStartup启动类 | /// AppStartup启动类 | ||||
@@ -34,6 +34,6 @@ public class MajorInfo : PrimaryKeyEntity | |||||
/// <summary> | /// <summary> | ||||
/// 院系信息 | /// 院系信息 | ||||
/// </summary> | /// </summary> | ||||
[Navigate(NavigateType.OneToOne, nameof(DepartmentInfo.Id), nameof(DepId))] | |||||
[Navigate(NavigateType.OneToOne, nameof(DepId))] | |||||
public DepartmentInfo DepartmentInfoItem { get; set; } | public DepartmentInfo DepartmentInfoItem { get; set; } | ||||
} | } |
@@ -24,7 +24,7 @@ public class PersonSetInfo | |||||
/// <summary> | /// <summary> | ||||
/// 专业信息 | /// 专业信息 | ||||
/// </summary> | /// </summary> | ||||
[Navigate(NavigateType.OneToOne, nameof(MajorInfo.Id), nameof(MajorId))] | |||||
[Navigate(NavigateType.OneToOne, nameof(MajorId))] | |||||
public MajorInfo MajorInfoItem { get; set; } | public MajorInfo MajorInfoItem { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 班主任信息 | /// 班主任信息 | ||||
@@ -0,0 +1,9 @@ | |||||
namespace SafeCampus.System; | |||||
public class CameraGroupSeedData : ISqlSugarEntitySeedData<CameraGroup> | |||||
{ | |||||
public IEnumerable<CameraGroup> SeedData() | |||||
{ | |||||
return SeedDataUtil.GetSeedData<CameraGroup>("seed_sys_user.json"); | |||||
} | |||||
} |
@@ -0,0 +1,23 @@ | |||||
{ | |||||
"RECORDS": [ | |||||
{ | |||||
"Id": "583659544297541", | |||||
"Name": "学校点位配置" | |||||
}, | |||||
{ | |||||
"Id": "583659952070725", | |||||
"Name": "学校大门", | |||||
"ParentId": "583659544297541" | |||||
}, | |||||
{ | |||||
"Id": "583659984986181", | |||||
"Name": "食堂", | |||||
"ParentId": "583659544297541" | |||||
}, | |||||
{ | |||||
"Id": "583660006621253", | |||||
"Name": "图书馆", | |||||
"ParentId": "583659544297541" | |||||
} | |||||
] | |||||
} |
@@ -1,14 +1,4 @@ | |||||
| |||||
// | |||||
namespace SafeCampus.System; | |||||
namespace SafeCampus.System; | |||||
/// <summary> | /// <summary> | ||||
/// 用户表种子数据 | /// 用户表种子数据 | ||||
@@ -1,9 +1,11 @@ | |||||
using MoYu.FriendlyException; | |||||
using Dm; | |||||
using MoYu.FriendlyException; | |||||
using MoYu.RemoteRequest.Extensions; | using MoYu.RemoteRequest.Extensions; | ||||
using Newtonsoft.Json.Linq; | using Newtonsoft.Json.Linq; | ||||
using SafeCampus.Application.Manager.DeepelephManager; | using SafeCampus.Application.Manager.DeepelephManager; | ||||
using SafeCampus.Application.Services.Business.ClassRoomCallService; | using SafeCampus.Application.Services.Business.ClassRoomCallService; | ||||
using SafeCampus.Application.Services.Business.ClassRoomCallTaskService; | using SafeCampus.Application.Services.Business.ClassRoomCallTaskService; | ||||
using SafeCampus.Core.Extension; | |||||
namespace SafeCampus.Web.Core.Controllers.Application.Business; | namespace SafeCampus.Web.Core.Controllers.Application.Business; | ||||
/// <summary> | /// <summary> | ||||
@@ -141,10 +143,46 @@ public class ClassRoomCallApi : IDynamicApiController | |||||
/// </summary> | /// </summary> | ||||
/// <param name="input"></param> | /// <param name="input"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
[Obsolete] | |||||
public async Task<bool> Update(ClassRoomCallUpdate input) | public async Task<bool> Update(ClassRoomCallUpdate input) | ||||
{ | { | ||||
return await _classRoomCallService.Update(input); | return await _classRoomCallService.Update(input); | ||||
} | } | ||||
/// <summary> | |||||
/// 手动点名 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public async Task<bool> ManualRoll(List<ClassRoomCallInsert> input) | |||||
{ | |||||
var appSettings = App.GetOptionsMonitor<AppInfoOptions>(); | |||||
foreach (var item in input) | |||||
{ | |||||
var model = new ClassRoomCallDto | |||||
{ | |||||
TenantCode = appSettings.TenantCode, | |||||
PoiId = appSettings.PoiId, | |||||
TaskId = item.TaskId, | |||||
AlarmType = "class_room_call", | |||||
AlarmTypeDesc = AlarmType.class_room_call.GetDescription(), | |||||
EventId ="", | |||||
CameraId = "", | |||||
Tick = DateTime.Now, | |||||
PersonSetId = item.PersonSetId, | |||||
PersonId = item.PersonId, | |||||
Similarity = 1, | |||||
FaceScore = 100, | |||||
SnapshotUrl = "", | |||||
SnapshotData = "", | |||||
Rects = "", | |||||
Extend = "", | |||||
CreateTime = DateTime.Now, | |||||
TrackId = "" | |||||
}; | |||||
await _classRoomCallService.Add(model); | |||||
} | |||||
return true; | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// 删除点名记录(只可删除待处理的记录) | /// 删除点名记录(只可删除待处理的记录) | ||||
@@ -52,9 +52,10 @@ public class DepartmentController | |||||
/// </summary> | /// </summary> | ||||
/// <param name="id">id</param> | /// <param name="id">id</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public async Task<bool> Delete(List<long> id) | |||||
[HttpPost] | |||||
public async Task<bool> Delete(BaseIdListInput id) | |||||
{ | { | ||||
return await _departmentService.Delete(id); | |||||
return await _departmentService.Delete(id.Ids); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -45,7 +45,7 @@ public class DfieldApi : IDynamicApiController | |||||
var model = JsonConvert.DeserializeObject<JObject>(str); | var model = JsonConvert.DeserializeObject<JObject>(str); | ||||
if ((bool)model["success"]) | if ((bool)model["success"]) | ||||
{ | { | ||||
await _personSetInfoService.Add(new PersonSetInfoDto{PersonSetId = personSetId ,PersonSetName = input.Name,MajorId = input.MagjorId}); | |||||
await _personSetInfoService.Add(new PersonSetInfoDto{PersonSetId = personSetId ,PersonSetName = input.Name,MajorId = input.MajorId}); | |||||
return model["data"]; | return model["data"]; | ||||
} | } | ||||
@@ -55,9 +55,9 @@ public class DfieldApi : IDynamicApiController | |||||
/// 查询底库列表 | /// 查询底库列表 | ||||
/// </summary> | /// </summary> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public async Task<dynamic> QueryAll(long? majorId) | |||||
public async Task<dynamic> QueryAll(long? majorId,string setName) | |||||
{ | { | ||||
return await _personSetInfoService.GetPageList(majorId); | |||||
return await _personSetInfoService.GetPageList(majorId, setName); | |||||
var appSettings = App.GetOptionsMonitor<AppInfoOptions>(); | var appSettings = App.GetOptionsMonitor<AppInfoOptions>(); | ||||
var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/set/queryAll" | var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/set/queryAll" | ||||
.SetBody(new | .SetBody(new | ||||
@@ -152,7 +152,7 @@ public class DfieldApi : IDynamicApiController | |||||
{ | { | ||||
PersonSetId = input.Id, | PersonSetId = input.Id, | ||||
PersonSetName = input.Name, | PersonSetName = input.Name, | ||||
MajorId = input.MagjorId | |||||
MajorId = input.MajorId | |||||
}); | }); | ||||
} | } | ||||
return isOk; | return isOk; | ||||
@@ -145,7 +145,7 @@ public class DormitoryController | |||||
configId = queryList["data"][0]["configId"].ParseToInt(); | configId = queryList["data"][0]["configId"].ParseToInt(); | ||||
} | } | ||||
var time = new { timeBegin = input.TimeBegin, timeEnd = input.TimeEnd }; | var time = new { timeBegin = input.TimeBegin, timeEnd = input.TimeEnd }; | ||||
var personSetIds = await _personSetInfoService.GetPageList(null); | |||||
var personSetIds = await _personSetInfoService.GetPageList(null,null); | |||||
var cameras = await _cameraInfoService.GetPageList(new CameraSearch{PageSize = 1000,PageNum = 1}); | var cameras = await _cameraInfoService.GetPageList(new CameraSearch{PageSize = 1000,PageNum = 1}); | ||||
var body = new | var body = new | ||||
{ | { | ||||
@@ -13,7 +13,7 @@ public class ControllersNameInput | |||||
/// <summary> | /// <summary> | ||||
/// 专业id | /// 专业id | ||||
/// </summary> | /// </summary> | ||||
public long MagjorId { get; set; } | |||||
public long MajorId { get; set; } | |||||
} | } | ||||
public class ControllersIdInput | public class ControllersIdInput | ||||
{ | { | ||||
@@ -0,0 +1,8 @@ | |||||
namespace SafeCampus.Web.Core.Controllers.Application.Business.Dto; | |||||
public class MajorDepPersonSetModel | |||||
{ | |||||
public string Label { get; set; } | |||||
public object Value { get; set; } | |||||
public List<MajorDepPersonSetModel> Children { get; set; } | |||||
} |
@@ -51,9 +51,10 @@ public class MajorController | |||||
/// </summary> | /// </summary> | ||||
/// <param name="id">id</param> | /// <param name="id">id</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public async Task<bool> Delete(List<long> id) | |||||
[HttpPost] | |||||
public async Task<bool> Delete(BaseIdListInput id) | |||||
{ | { | ||||
return await _majorService.Delete(id); | |||||
return await _majorService.Delete(id.Ids); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -0,0 +1,53 @@ | |||||
using SafeCampus.Application.Services.Business.DepartmentService; | |||||
using SafeCampus.Application.Services.Business.MajorService; | |||||
using SafeCampus.Application.Services.Business.PersonSetInfoService; | |||||
using SafeCampus.Web.Core.Controllers.Application.Business.Dto; | |||||
namespace SafeCampus.Web.Core.Controllers.Application.Business; | |||||
/// <summary> | |||||
/// 移动端接口 | |||||
/// </summary> | |||||
[ApiDescriptionSettings(ApiGroupConsts.SYSTEM_Business, Order = 81, Tag = "移动端接口")] | |||||
[Route("/business/mobile")] | |||||
[RolePermission] | |||||
public class MobileController | |||||
{ | |||||
private readonly IDepartmentService _departmentService; | |||||
private readonly IMajorService _majorService; | |||||
private readonly IPersonSetInfoService _personSetInfoService; | |||||
public MobileController(IDepartmentService departmentService, IMajorService majorService, IPersonSetInfoService personSetInfoService) | |||||
{ | |||||
_departmentService = departmentService; | |||||
_majorService = majorService; | |||||
_personSetInfoService = personSetInfoService; | |||||
} | |||||
/// <summary> | |||||
/// 移动端获取专业系部班级列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public async Task<List<MajorDepPersonSetModel>> GetMajorDep() | |||||
{ | |||||
var dep = await _departmentService.GetNoPageList(new DepartmentSearch()); | |||||
var major = await _majorService.GetNoPageList(new MajorSearch()); | |||||
var set = await _personSetInfoService.GetPageList(null, null); | |||||
var list = dep.Select(item => new MajorDepPersonSetModel | |||||
{ | |||||
Label = item.Name, | |||||
Value = item.Id, | |||||
Children = major.Where(x => x.DepId == item.Id) | |||||
.Select(x => new MajorDepPersonSetModel | |||||
{ | |||||
Label = x.Name, | |||||
Value = x.Id, | |||||
Children = set.Where(xx => xx.MajorId == x.Id) | |||||
.Select(xxx => new MajorDepPersonSetModel { Label = xxx.PersonSetName, Value = xxx.PersonSetId }) | |||||
.ToList() | |||||
}) | |||||
.ToList(), | |||||
}) | |||||
.ToList(); | |||||
return await Task.FromResult(list); | |||||
} | |||||
} |
@@ -308,9 +308,9 @@ public class LargeScreenController | |||||
/// 获取班级列表 | /// 获取班级列表 | ||||
/// </summary> | /// </summary> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public async Task<dynamic> GetPersonSetNoPageList(long? majorId) | |||||
public async Task<dynamic> GetPersonSetNoPageList(long? majorId,string setName) | |||||
{ | { | ||||
return await _personSetInfoService.GetPageList(majorId); | |||||
return await _personSetInfoService.GetPageList(majorId, setName); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 获取专业 | /// 获取专业 | ||||
@@ -0,0 +1,20 @@ | |||||
namespace SafeCampus.Web.Core.Controllers.Application.Violation; | |||||
public enum SearchType | |||||
{ | |||||
/// <summary> | |||||
/// 本周 | |||||
/// </summary> | |||||
[Description("本周")] | |||||
ThisWeek=1, | |||||
/// <summary> | |||||
/// 上周 | |||||
/// </summary> | |||||
[Description("上周")] | |||||
LastWeek, | |||||
/// <summary> | |||||
/// 本月 | |||||
/// </summary> | |||||
[Description("本月")] | |||||
ThisMonth, | |||||
} |
@@ -0,0 +1,13 @@ | |||||
namespace SafeCampus.Web.Core.Controllers.Application.Violation; | |||||
public class SummarySeach | |||||
{ | |||||
/// <summary> | |||||
/// 搜索条件 | |||||
/// </summary> | |||||
public SearchType SearchType { get; set; } | |||||
/// <summary> | |||||
/// 人员id | |||||
/// </summary> | |||||
public string PersonId { get; set; } | |||||
} |
@@ -1,4 +1,10 @@ | |||||
using SafeCampus.Application.Services.Business.PersonInfoService; | |||||
using Masuit.Tools.Systems; | |||||
using SafeCampus.Application.Services.Business.CameraInfoService; | |||||
using SafeCampus.Application.Services.Business.PersonInfoService; | |||||
using SafeCampus.Application.Services.Business.Warn.Dto; | |||||
using SafeCampus.Application.Services.Business.Warn.Service; | |||||
using System; | |||||
namespace SafeCampus.Web.Core.Controllers.Application.Violation; | namespace SafeCampus.Web.Core.Controllers.Application.Violation; | ||||
/// <summary> | /// <summary> | ||||
@@ -10,10 +16,14 @@ namespace SafeCampus.Web.Core.Controllers.Application.Violation; | |||||
public class VioPortraitSummary | public class VioPortraitSummary | ||||
{ | { | ||||
private readonly IPersonInfoService _personInfoService; | private readonly IPersonInfoService _personInfoService; | ||||
private readonly ICameraInfoService _cameraInfoService; | |||||
private readonly IWarnInfoService _warnInfoService; | |||||
public VioPortraitSummary(IPersonInfoService personInfoService) | |||||
public VioPortraitSummary(IPersonInfoService personInfoService, ICameraInfoService cameraInfoService, IWarnInfoService warnInfoService) | |||||
{ | { | ||||
_personInfoService = personInfoService; | _personInfoService = personInfoService; | ||||
_cameraInfoService = cameraInfoService; | |||||
_warnInfoService = warnInfoService; | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -64,16 +74,131 @@ public class VioPortraitSummary | |||||
return new { label, value }; | return new { label, value }; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 获取学生属性标签 | |||||
/// 学生--告警分类统计 | |||||
/// </summary> | /// </summary> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public async Task<dynamic> GetStudentDetail() | |||||
public async Task<dynamic> GetStudentDetail(SummarySeach seach) | |||||
{ | { | ||||
var random = new Random(); | var random = new Random(); | ||||
var label = new List<string> { "打闹", "趴桌子", "爱运动", "喜欢读书", "性格孤僻" }; | var label = new List<string> { "打闹", "趴桌子", "爱运动", "喜欢读书", "性格孤僻" }; | ||||
var value = label.Select(item => random.Next(2, 20)).ToList(); | var value = label.Select(item => random.Next(2, 20)).ToList(); | ||||
//var value = new List<int>() { 10, 5, 8, 5, 1 }; | |||||
return new { label, value }; | |||||
return await Task.FromResult(new { label, value ,PF="93",XF="90"}); | |||||
} | |||||
/// <summary> | |||||
/// 学生--出勤情况 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public async Task<dynamic> Attendance(SummarySeach seach) | |||||
{ | |||||
switch (seach.SearchType) | |||||
{ | |||||
case SearchType.ThisWeek: | |||||
case SearchType.LastWeek: | |||||
case SearchType.ThisMonth: | |||||
default: | |||||
var random = new Random(); | |||||
var label = new List<string> { "正常出勤", "缺勤", "迟到" }; | |||||
var value = label.Select(item => random.Next(2, 20)).ToList(); | |||||
return await Task.FromResult(new { label, value }); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 学生--出校 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public async Task<dynamic> OutsideSchool(SummarySeach seach) | |||||
{ | |||||
return await StudentSummary(seach, ApplicationConst.XXDM); | |||||
} | |||||
/// <summary> | |||||
/// 学生--图书馆 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public async Task<dynamic> Library(SummarySeach seach) | |||||
{ | |||||
return await StudentSummary(seach, ApplicationConst.TSG); | |||||
} | |||||
/// <summary> | |||||
/// 学生--食堂 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public async Task<dynamic> Canteen(SummarySeach seach) | |||||
{ | |||||
return await StudentSummary(seach, ApplicationConst.ST); | |||||
} | } | ||||
/// <summary> | |||||
/// 学生画像统计 | |||||
/// </summary> | |||||
/// <param name="seach"></param> | |||||
/// <param name="groupId"></param> | |||||
/// <returns></returns> | |||||
private async Task<dynamic> StudentSummary(SummarySeach seach,long groupId) | |||||
{ | |||||
var camera = await _cameraInfoService.GetPageList(new CameraSearch { GroupId = groupId, PageSize = 1000, PageNum = 1 }); | |||||
var cameraIds = camera.List.Select(x => x.SensorId).ToList(); | |||||
DateTime endWeek = DateTime.Now; | |||||
// 获取本周的第一天(假设一周从周一开始) | |||||
DateTime startOfWeek = endWeek.AddDays(-(int)endWeek.DayOfWeek + (int)DayOfWeek.Monday); | |||||
var label = new List<string>(); | |||||
var value = new List<int>(); | |||||
switch (seach.SearchType) | |||||
{ | |||||
case SearchType.ThisWeek: | |||||
var list = await _warnInfoService.GetListNoPage(new WarnInfoSearch | |||||
{ | |||||
AlarmType = AlarmType.visual_fence.GetDisplay(), | |||||
CameraIds = cameraIds, | |||||
PersonId = seach.PersonId, | |||||
StartTick = startOfWeek, | |||||
EndTick = endWeek | |||||
}); | |||||
for (var i = startOfWeek; i < endWeek;) | |||||
{ | |||||
label.Add(i.ToString("yyyy-MM-dd")); | |||||
value.Add(list.Count(x => x.Tick.Year == i.Year && x.Tick.Month == i.Month && x.Tick.Day == i.Day)); | |||||
i = i.AddDays(1); | |||||
} | |||||
return new { label, value }; | |||||
case SearchType.LastWeek: | |||||
DateTime startOfLastWeek = startOfWeek.AddDays(-7); | |||||
DateTime endOfLastWeek = startOfLastWeek.AddDays(6).Date.AddDays(1).AddTicks(-1); // 上周的最后一刻 | |||||
var list1 = await _warnInfoService.GetListNoPage(new WarnInfoSearch | |||||
{ | |||||
AlarmType = AlarmType.visual_fence.GetDisplay(), | |||||
CameraIds = cameraIds, | |||||
PersonId = seach.PersonId, | |||||
StartTick = startOfLastWeek, | |||||
EndTick = endOfLastWeek | |||||
}); | |||||
for (var i = startOfWeek; i < endWeek;) | |||||
{ | |||||
label.Add(i.ToString("yyyy-MM-dd")); | |||||
value.Add(list1.Count(x => x.Tick.Year == i.Year && x.Tick.Month == i.Month && x.Tick.Day == i.Day)); | |||||
i = i.AddDays(1); | |||||
} | |||||
return new { label, value }; | |||||
case SearchType.ThisMonth: | |||||
DateTime startOfMonth = new DateTime(endWeek.Year, endWeek.Month, 1); | |||||
var list2 = await _warnInfoService.GetListNoPage(new WarnInfoSearch | |||||
{ | |||||
AlarmType = AlarmType.visual_fence.GetDisplay(), | |||||
CameraIds = cameraIds, | |||||
PersonId = seach.PersonId, | |||||
StartTick = startOfMonth, | |||||
EndTick = endWeek | |||||
}); | |||||
for (var i = startOfWeek; i < endWeek;) | |||||
{ | |||||
label.Add(i.ToString("yyyy-MM-dd")); | |||||
value.Add(list2.Count(x => x.Tick.Year == i.Year && x.Tick.Month == i.Month && x.Tick.Day == i.Day)); | |||||
i = i.AddDays(1); | |||||
} | |||||
return new { label, value }; | |||||
default: | |||||
return null; | |||||
} | |||||
} | |||||
} | } |
@@ -269,6 +269,12 @@ | |||||
<param name="input"></param> | <param name="input"></param> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Business.ClassRoomCallApi.ManualRoll(System.Collections.Generic.List{SafeCampus.Application.Services.Business.ClassRoomCallService.ClassRoomCallInsert})"> | |||||
<summary> | |||||
手动点名 | |||||
</summary> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Business.ClassRoomCallApi.Remove(System.Int64)"> | <member name="M:SafeCampus.Web.Core.Controllers.Application.Business.ClassRoomCallApi.Remove(System.Int64)"> | ||||
<summary> | <summary> | ||||
删除点名记录(只可删除待处理的记录) | 删除点名记录(只可删除待处理的记录) | ||||
@@ -411,7 +417,7 @@ | |||||
<param name="id"></param> | <param name="id"></param> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Business.DepartmentController.Delete(System.Collections.Generic.List{System.Int64})"> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Business.DepartmentController.Delete(SafeCampus.Core.BaseIdListInput)"> | |||||
<summary> | <summary> | ||||
删除 | 删除 | ||||
</summary> | </summary> | ||||
@@ -516,7 +522,7 @@ | |||||
</summary> | </summary> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Business.DfieldApi.QueryAll(System.Nullable{System.Int64})"> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Business.DfieldApi.QueryAll(System.Nullable{System.Int64},System.String)"> | |||||
<summary> | <summary> | ||||
查询底库列表 | 查询底库列表 | ||||
</summary> | </summary> | ||||
@@ -837,7 +843,7 @@ | |||||
结束时间 | 结束时间 | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:SafeCampus.Web.Core.Controllers.Application.Business.ControllersNameInput.MagjorId"> | |||||
<member name="P:SafeCampus.Web.Core.Controllers.Application.Business.ControllersNameInput.MajorId"> | |||||
<summary> | <summary> | ||||
专业id | 专业id | ||||
</summary> | </summary> | ||||
@@ -959,7 +965,7 @@ | |||||
<param name="id"></param> | <param name="id"></param> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Business.MajorController.Delete(System.Collections.Generic.List{System.Int64})"> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Business.MajorController.Delete(SafeCampus.Core.BaseIdListInput)"> | |||||
<summary> | <summary> | ||||
删除 | 删除 | ||||
</summary> | </summary> | ||||
@@ -979,6 +985,17 @@ | |||||
<param name="search"></param> | <param name="search"></param> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="T:SafeCampus.Web.Core.Controllers.Application.Business.MobileController"> | |||||
<summary> | |||||
移动端接口 | |||||
</summary> | |||||
</member> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Business.MobileController.GetMajorDep"> | |||||
<summary> | |||||
移动端获取专业系部班级列表 | |||||
</summary> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="T:SafeCampus.Web.Core.Controllers.Application.Business.PassengerFlowApi"> | <member name="T:SafeCampus.Web.Core.Controllers.Application.Business.PassengerFlowApi"> | ||||
<summary> | <summary> | ||||
客流查询接口 | 客流查询接口 | ||||
@@ -1225,7 +1242,7 @@ | |||||
</summary> | </summary> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.LargeScreen.LargeScreenController.GetPersonSetNoPageList(System.Nullable{System.Int64})"> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.LargeScreen.LargeScreenController.GetPersonSetNoPageList(System.Nullable{System.Int64},System.String)"> | |||||
<summary> | <summary> | ||||
获取班级列表 | 获取班级列表 | ||||
</summary> | </summary> | ||||
@@ -1264,6 +1281,31 @@ | |||||
包含的班级id | 包含的班级id | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="F:SafeCampus.Web.Core.Controllers.Application.Violation.SearchType.ThisWeek"> | |||||
<summary> | |||||
本周 | |||||
</summary> | |||||
</member> | |||||
<member name="F:SafeCampus.Web.Core.Controllers.Application.Violation.SearchType.LastWeek"> | |||||
<summary> | |||||
上周 | |||||
</summary> | |||||
</member> | |||||
<member name="F:SafeCampus.Web.Core.Controllers.Application.Violation.SearchType.ThisMonth"> | |||||
<summary> | |||||
本月 | |||||
</summary> | |||||
</member> | |||||
<member name="P:SafeCampus.Web.Core.Controllers.Application.Violation.SummarySeach.SearchType"> | |||||
<summary> | |||||
搜索条件 | |||||
</summary> | |||||
</member> | |||||
<member name="P:SafeCampus.Web.Core.Controllers.Application.Violation.SummarySeach.PersonId"> | |||||
<summary> | |||||
人员id | |||||
</summary> | |||||
</member> | |||||
<member name="T:SafeCampus.Web.Core.Controllers.Application.Violation.VioAnalysisController"> | <member name="T:SafeCampus.Web.Core.Controllers.Application.Violation.VioAnalysisController"> | ||||
<summary> | <summary> | ||||
预警分析控制器 | 预警分析控制器 | ||||
@@ -1358,10 +1400,42 @@ | |||||
</summary> | </summary> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Violation.VioPortraitSummary.GetStudentDetail"> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Violation.VioPortraitSummary.GetStudentDetail(SafeCampus.Web.Core.Controllers.Application.Violation.SummarySeach)"> | |||||
<summary> | |||||
学生--告警分类统计 | |||||
</summary> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Violation.VioPortraitSummary.Attendance(SafeCampus.Web.Core.Controllers.Application.Violation.SummarySeach)"> | |||||
<summary> | |||||
学生--出勤情况 | |||||
</summary> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Violation.VioPortraitSummary.OutsideSchool(SafeCampus.Web.Core.Controllers.Application.Violation.SummarySeach)"> | |||||
<summary> | |||||
学生--出校 | |||||
</summary> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Violation.VioPortraitSummary.Library(SafeCampus.Web.Core.Controllers.Application.Violation.SummarySeach)"> | |||||
<summary> | |||||
学生--图书馆 | |||||
</summary> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Violation.VioPortraitSummary.Canteen(SafeCampus.Web.Core.Controllers.Application.Violation.SummarySeach)"> | |||||
<summary> | |||||
学生--食堂 | |||||
</summary> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:SafeCampus.Web.Core.Controllers.Application.Violation.VioPortraitSummary.StudentSummary(SafeCampus.Web.Core.Controllers.Application.Violation.SummarySeach,System.Int64)"> | |||||
<summary> | <summary> | ||||
获取学生属性标签 | |||||
学生画像统计 | |||||
</summary> | </summary> | ||||
<param name="seach"></param> | |||||
<param name="groupId"></param> | |||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="T:SafeCampus.Web.Core.BizOrgController"> | <member name="T:SafeCampus.Web.Core.BizOrgController"> | ||||
@@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121. | |||||
<Project> | <Project> | ||||
<PropertyGroup> | <PropertyGroup> | ||||
<_PublishTargetUrl>F:\Project\QJKJ\SafeCampus\SafeCampus.API\SafeCampus.Web.Entry\bin\Release\net6.0\publish\</_PublishTargetUrl> | <_PublishTargetUrl>F:\Project\QJKJ\SafeCampus\SafeCampus.API\SafeCampus.Web.Entry\bin\Release\net6.0\publish\</_PublishTargetUrl> | ||||
<History>True|2024-08-19T05:38:29.9236695Z;False|2024-08-19T13:29:18.8873264+08:00;True|2024-08-19T12:31:57.9280692+08:00;True|2024-08-19T11:50:36.7241244+08:00;True|2024-08-19T10:24:05.0018377+08:00;True|2024-08-19T10:23:30.0445364+08:00;True|2024-08-19T10:12:33.8316906+08:00;True|2024-08-19T10:10:48.0967630+08:00;True|2024-08-16T12:17:51.5743944+08:00;True|2024-08-16T11:36:15.1880346+08:00;True|2024-08-12T11:27:42.2864171+08:00;True|2024-08-09T14:54:42.9062124+08:00;True|2024-08-09T11:49:01.0339449+08:00;True|2024-08-09T11:43:21.9947939+08:00;True|2024-08-09T10:43:25.7641675+08:00;True|2024-08-08T15:23:17.0510180+08:00;True|2024-08-08T15:20:50.3450876+08:00;True|2024-08-08T11:06:43.0783261+08:00;True|2024-08-07T17:24:03.0780935+08:00;True|2024-08-07T17:20:50.6266614+08:00;True|2024-08-07T17:18:15.6367265+08:00;True|2024-08-06T17:31:40.3452266+08:00;True|2024-07-31T16:54:03.1890463+08:00;True|2024-07-30T17:11:33.2514194+08:00;True|2024-07-30T17:08:14.5888060+08:00;True|2024-07-30T09:56:08.6349163+08:00;True|2024-07-30T09:50:02.2368269+08:00;True|2024-07-29T16:20:12.3202393+08:00;True|2024-07-29T16:16:29.9634841+08:00;True|2024-07-29T16:09:51.7696392+08:00;True|2024-07-29T16:06:49.4145658+08:00;True|2024-07-29T15:58:50.6654249+08:00;True|2024-07-29T11:32:11.6206514+08:00;True|2024-07-29T11:26:26.1574563+08:00;True|2024-07-29T11:04:41.1896705+08:00;True|2024-07-29T10:38:38.4560275+08:00;True|2024-07-29T10:33:38.5288332+08:00;False|2024-07-29T10:33:21.0642261+08:00;False|2024-07-29T10:33:00.1005216+08:00;True|2024-07-29T09:54:59.2794860+08:00;True|2024-07-29T09:08:54.4899269+08:00;True|2024-07-26T18:02:13.5407348+08:00;True|2024-07-26T17:46:06.7922851+08:00;True|2024-07-26T15:50:48.6986834+08:00;True|2024-07-26T15:11:17.1696147+08:00;True|2024-07-26T13:58:49.6884964+08:00;True|2024-07-25T17:31:33.0050952+08:00;True|2024-07-25T17:09:12.7084910+08:00;True|2024-07-25T17:02:01.2617736+08:00;True|2024-07-25T16:59:51.6271873+08:00;True|2024-07-25T16:58:05.5249148+08:00;True|2024-07-25T14:14:10.2008367+08:00;False|2024-07-25T14:13:54.0300465+08:00;True|2024-07-25T14:08:57.0244482+08:00;True|2024-07-25T13:41:48.8201522+08:00;True|2024-07-25T10:41:30.7277553+08:00;True|2024-07-25T10:16:05.9105335+08:00;True|2024-07-24T15:31:54.7914854+08:00;True|2024-07-24T09:54:17.6182454+08:00;True|2024-07-23T17:01:18.1510211+08:00;True|2024-07-23T16:41:53.3366577+08:00;True|2024-07-23T16:07:25.4129335+08:00;True|2024-07-23T15:50:42.2437488+08:00;True|2024-07-23T15:19:00.1900116+08:00;True|2024-07-23T14:59:22.8551233+08:00;True|2024-07-23T14:19:55.1193373+08:00;True|2024-07-19T18:04:32.2703039+08:00;True|2024-07-19T15:56:25.4103701+08:00;True|2024-07-19T15:09:00.9662436+08:00;True|2024-07-19T15:05:35.7255851+08:00;True|2024-07-19T13:14:42.9559521+08:00;False|2024-07-19T11:37:52.4020673+08:00;True|2024-07-19T11:10:22.8661346+08:00;True|2024-07-19T11:00:00.8819251+08:00;True|2024-07-19T10:45:46.8271770+08:00;True|2024-07-19T10:45:03.8183458+08:00;True|2024-07-18T18:04:42.1000382+08:00;True|2024-07-18T18:01:51.3964409+08:00;True|2024-07-18T17:57:50.3509206+08:00;True|2024-07-18T16:32:46.2184830+08:00;True|2024-07-18T16:00:11.1381449+08:00;True|2024-07-18T15:11:52.6472758+08:00;True|2024-07-18T11:54:49.4848006+08:00;True|2024-07-18T09:25:58.7204846+08:00;True|2024-07-17T17:29:28.6175272+08:00;True|2024-07-17T17:10:54.5184246+08:00;True|2024-07-17T16:57:59.8174060+08:00;True|2024-07-17T16:18:13.8137834+08:00;True|2024-07-17T15:59:16.2360757+08:00;True|2024-07-17T15:31:41.9159909+08:00;True|2024-07-17T14:41:14.6127340+08:00;True|2024-07-17T14:28:53.4455461+08:00;True|2024-07-17T14:09:44.1826222+08:00;True|2024-07-17T13:57:12.3372528+08:00;True|2024-07-17T11:39:19.5754602+08:00;True|2024-07-16T17:44:10.6162562+08:00;True|2024-07-16T17:13:48.3928403+08:00;True|2024-07-16T17:00:47.7458109+08:00;True|2024-07-16T14:07:19.3463408+08:00;True|2024-07-15T16:05:13.3561511+08:00;</History> | |||||
<History>True|2024-08-27T07:31:21.7026102Z;True|2024-08-20T11:12:26.7141701+08:00;True|2024-08-19T17:23:34.5703879+08:00;True|2024-08-19T15:55:28.3484786+08:00;True|2024-08-19T15:45:49.5623372+08:00;True|2024-08-19T14:56:17.7733738+08:00;True|2024-08-19T14:52:03.2782392+08:00;True|2024-08-19T14:10:57.7043528+08:00;True|2024-08-19T13:38:29.9236695+08:00;False|2024-08-19T13:29:18.8873264+08:00;True|2024-08-19T12:31:57.9280692+08:00;True|2024-08-19T11:50:36.7241244+08:00;True|2024-08-19T10:24:05.0018377+08:00;True|2024-08-19T10:23:30.0445364+08:00;True|2024-08-19T10:12:33.8316906+08:00;True|2024-08-19T10:10:48.0967630+08:00;True|2024-08-16T12:17:51.5743944+08:00;True|2024-08-16T11:36:15.1880346+08:00;True|2024-08-12T11:27:42.2864171+08:00;True|2024-08-09T14:54:42.9062124+08:00;True|2024-08-09T11:49:01.0339449+08:00;True|2024-08-09T11:43:21.9947939+08:00;True|2024-08-09T10:43:25.7641675+08:00;True|2024-08-08T15:23:17.0510180+08:00;True|2024-08-08T15:20:50.3450876+08:00;True|2024-08-08T11:06:43.0783261+08:00;True|2024-08-07T17:24:03.0780935+08:00;True|2024-08-07T17:20:50.6266614+08:00;True|2024-08-07T17:18:15.6367265+08:00;True|2024-08-06T17:31:40.3452266+08:00;True|2024-07-31T16:54:03.1890463+08:00;True|2024-07-30T17:11:33.2514194+08:00;True|2024-07-30T17:08:14.5888060+08:00;True|2024-07-30T09:56:08.6349163+08:00;True|2024-07-30T09:50:02.2368269+08:00;True|2024-07-29T16:20:12.3202393+08:00;True|2024-07-29T16:16:29.9634841+08:00;True|2024-07-29T16:09:51.7696392+08:00;True|2024-07-29T16:06:49.4145658+08:00;True|2024-07-29T15:58:50.6654249+08:00;True|2024-07-29T11:32:11.6206514+08:00;True|2024-07-29T11:26:26.1574563+08:00;True|2024-07-29T11:04:41.1896705+08:00;True|2024-07-29T10:38:38.4560275+08:00;True|2024-07-29T10:33:38.5288332+08:00;False|2024-07-29T10:33:21.0642261+08:00;False|2024-07-29T10:33:00.1005216+08:00;True|2024-07-29T09:54:59.2794860+08:00;True|2024-07-29T09:08:54.4899269+08:00;True|2024-07-26T18:02:13.5407348+08:00;True|2024-07-26T17:46:06.7922851+08:00;True|2024-07-26T15:50:48.6986834+08:00;True|2024-07-26T15:11:17.1696147+08:00;True|2024-07-26T13:58:49.6884964+08:00;True|2024-07-25T17:31:33.0050952+08:00;True|2024-07-25T17:09:12.7084910+08:00;True|2024-07-25T17:02:01.2617736+08:00;True|2024-07-25T16:59:51.6271873+08:00;True|2024-07-25T16:58:05.5249148+08:00;True|2024-07-25T14:14:10.2008367+08:00;False|2024-07-25T14:13:54.0300465+08:00;True|2024-07-25T14:08:57.0244482+08:00;True|2024-07-25T13:41:48.8201522+08:00;True|2024-07-25T10:41:30.7277553+08:00;True|2024-07-25T10:16:05.9105335+08:00;True|2024-07-24T15:31:54.7914854+08:00;True|2024-07-24T09:54:17.6182454+08:00;True|2024-07-23T17:01:18.1510211+08:00;True|2024-07-23T16:41:53.3366577+08:00;True|2024-07-23T16:07:25.4129335+08:00;True|2024-07-23T15:50:42.2437488+08:00;True|2024-07-23T15:19:00.1900116+08:00;True|2024-07-23T14:59:22.8551233+08:00;True|2024-07-23T14:19:55.1193373+08:00;True|2024-07-19T18:04:32.2703039+08:00;True|2024-07-19T15:56:25.4103701+08:00;True|2024-07-19T15:09:00.9662436+08:00;True|2024-07-19T15:05:35.7255851+08:00;True|2024-07-19T13:14:42.9559521+08:00;False|2024-07-19T11:37:52.4020673+08:00;True|2024-07-19T11:10:22.8661346+08:00;True|2024-07-19T11:00:00.8819251+08:00;True|2024-07-19T10:45:46.8271770+08:00;True|2024-07-19T10:45:03.8183458+08:00;True|2024-07-18T18:04:42.1000382+08:00;True|2024-07-18T18:01:51.3964409+08:00;True|2024-07-18T17:57:50.3509206+08:00;True|2024-07-18T16:32:46.2184830+08:00;True|2024-07-18T16:00:11.1381449+08:00;True|2024-07-18T15:11:52.6472758+08:00;True|2024-07-18T11:54:49.4848006+08:00;True|2024-07-18T09:25:58.7204846+08:00;True|2024-07-17T17:29:28.6175272+08:00;True|2024-07-17T17:10:54.5184246+08:00;True|2024-07-17T16:57:59.8174060+08:00;True|2024-07-17T16:18:13.8137834+08:00;True|2024-07-17T15:59:16.2360757+08:00;True|2024-07-17T15:31:41.9159909+08:00;True|2024-07-17T14:41:14.6127340+08:00;True|2024-07-17T14:28:53.4455461+08:00;</History> | |||||
<LastFailureDetails /> | <LastFailureDetails /> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
</Project> | </Project> |
@@ -0,0 +1,533 @@ | |||||
<!-- eslint-disable --> | |||||
<template> | |||||
<view | |||||
class="player-wrapper" | |||||
:id="videoWrapperId" | |||||
:parentId="id" | |||||
:randomNum="randomNum" | |||||
:change:randomNum="domVideoPlayer.randomNumChange" | |||||
:viewportProps="viewportProps" | |||||
:change:viewportProps="domVideoPlayer.viewportChange" | |||||
:videoSrc="videoSrc" | |||||
:change:videoSrc="domVideoPlayer.initVideoPlayer" | |||||
:command="eventCommand" | |||||
:change:command="domVideoPlayer.triggerCommand" | |||||
:func="renderFunc" | |||||
:change:func="domVideoPlayer.triggerFunc" | |||||
/> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
props: { | |||||
src: { | |||||
type: String, | |||||
default: '' | |||||
}, | |||||
autoplay: { | |||||
type: Boolean, | |||||
default: false | |||||
}, | |||||
loop: { | |||||
type: Boolean, | |||||
default: false | |||||
}, | |||||
controls: { | |||||
type: Boolean, | |||||
default: false | |||||
}, | |||||
objectFit: { | |||||
type: String, | |||||
default: 'contain' | |||||
}, | |||||
muted: { | |||||
type: Boolean, | |||||
default: false | |||||
}, | |||||
playbackRate: { | |||||
type: Number, | |||||
default: 1 | |||||
}, | |||||
isLoading: { | |||||
type: Boolean, | |||||
default: false | |||||
}, | |||||
poster: { | |||||
type: String, | |||||
default: '' | |||||
}, | |||||
id: { | |||||
type: String, | |||||
default: '' | |||||
} | |||||
}, | |||||
data() { | |||||
return { | |||||
randomNum: Math.floor(Math.random() * 100000000), | |||||
videoSrc: '', | |||||
// 父组件向子组件传递的事件指令(video的原生事件) | |||||
eventCommand: null, | |||||
// 父组件传递过来的,对 renderjs 层的函数执行(对视频控制的自定义事件) | |||||
renderFunc: { | |||||
name: null, | |||||
params: null | |||||
}, | |||||
// 提供给父组件进行获取的视频属性 | |||||
currentTime: 0, | |||||
duration: 0, | |||||
playing: false | |||||
} | |||||
}, | |||||
watch: { | |||||
// 监听视频资源地址更新 | |||||
src: { | |||||
handler(val) { | |||||
if (!val) return | |||||
setTimeout(() => { | |||||
this.videoSrc = val | |||||
}, 0) | |||||
}, | |||||
immediate: true | |||||
} | |||||
}, | |||||
computed: { | |||||
videoWrapperId() { | |||||
return `video-wrapper-${this.randomNum}` | |||||
}, | |||||
// 聚合视图层的所有数据变化,传给renderjs的渲染层 | |||||
viewportProps() { | |||||
return { | |||||
autoplay: this.autoplay, | |||||
muted: this.muted, | |||||
controls: this.controls, | |||||
loop: this.loop, | |||||
objectFit: this.objectFit, | |||||
poster: this.poster, | |||||
isLoading: this.isLoading, | |||||
playbackRate: this.playbackRate | |||||
} | |||||
} | |||||
}, | |||||
// 方法 | |||||
methods: { | |||||
// 传递事件指令给父组件 | |||||
eventEmit({ event, data }) { | |||||
this.$emit(event, data) | |||||
}, | |||||
// 修改view视图层的data数据 | |||||
setViewData({ key, value }) { | |||||
key && this.$set(this, key, value) | |||||
}, | |||||
// 重置事件指令 | |||||
resetEventCommand() { | |||||
this.eventCommand = null | |||||
}, | |||||
// 播放指令 | |||||
play() { | |||||
this.eventCommand = 'play' | |||||
}, | |||||
// 暂停指令 | |||||
pause() { | |||||
this.eventCommand = 'pause' | |||||
}, | |||||
// 重置自定义函数指令 | |||||
resetFunc() { | |||||
this.renderFunc = { | |||||
name: null, | |||||
params: null | |||||
} | |||||
}, | |||||
// 自定义函数 - 移除视频 | |||||
remove(params) { | |||||
this.renderFunc = { | |||||
name: 'removeHandler', | |||||
params | |||||
} | |||||
}, | |||||
// 自定义函数 - 全屏播放 | |||||
fullScreen(params) { | |||||
this.renderFunc = { | |||||
name: 'fullScreenHandler', | |||||
params | |||||
} | |||||
}, | |||||
// 自定义函数 - 跳转到指定时间点 | |||||
toSeek(sec, isDelay = false) { | |||||
this.renderFunc = { | |||||
name: 'toSeekHandler', | |||||
params: { sec, isDelay } | |||||
} | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<script module="domVideoPlayer" lang="renderjs"> | |||||
const PLAYER_ID = 'DOM_VIDEO_PLAYER' | |||||
export default { | |||||
data() { | |||||
return { | |||||
num: '', | |||||
videoEl: null, | |||||
loadingEl: null, | |||||
// 延迟生效的函数 | |||||
delayFunc: null, | |||||
renderProps: {} | |||||
} | |||||
}, | |||||
computed: { | |||||
playerId() { | |||||
return `${PLAYER_ID}_${this.num}` | |||||
}, | |||||
wrapperId() { | |||||
return `video-wrapper-${this.num}` | |||||
} | |||||
}, | |||||
methods: { | |||||
isApple() { | |||||
const ua = navigator.userAgent.toLowerCase() | |||||
return ua.indexOf('iphone') !== -1 || ua.indexOf('ipad') !== -1 | |||||
}, | |||||
async initVideoPlayer(src) { | |||||
this.delayFunc = null | |||||
await this.$nextTick() | |||||
if (!src) return | |||||
if (this.videoEl) { | |||||
// 切换视频源 | |||||
if (!this.isApple() && this.loadingEl) { | |||||
this.loadingEl.style.display = 'block' | |||||
} | |||||
this.videoEl.src = src | |||||
return | |||||
} | |||||
const videoEl = document.createElement('video') | |||||
this.videoEl = videoEl | |||||
// 开始监听视频相关事件 | |||||
this.listenVideoEvent() | |||||
const { autoplay, muted, controls, loop, playbackRate, objectFit, poster } = this.renderProps | |||||
videoEl.src = src | |||||
videoEl.autoplay = autoplay | |||||
videoEl.controls = controls | |||||
videoEl.loop = loop | |||||
videoEl.muted = muted | |||||
videoEl.playbackRate = playbackRate | |||||
videoEl.id = this.playerId | |||||
// videoEl.setAttribute('x5-video-player-type', 'h5') | |||||
videoEl.setAttribute('preload', 'auto') | |||||
videoEl.setAttribute('playsinline', true) | |||||
videoEl.setAttribute('webkit-playsinline', true) | |||||
videoEl.setAttribute('crossorigin', 'anonymous') | |||||
videoEl.setAttribute('controlslist', 'nodownload') | |||||
videoEl.setAttribute('disablePictureInPicture', true) | |||||
videoEl.style.objectFit = objectFit | |||||
poster && (videoEl.poster = poster) | |||||
videoEl.style.width = '100%' | |||||
videoEl.style.height = '100%' | |||||
// 插入视频元素 | |||||
// document.getElementById(this.wrapperId).appendChild(videoEl) | |||||
const playerWrapper = document.getElementById(this.wrapperId) | |||||
playerWrapper.insertBefore(videoEl, playerWrapper.firstChild) | |||||
// 插入loading 元素(遮挡安卓的默认加载过程中的黑色播放按钮) | |||||
this.createLoading() | |||||
}, | |||||
// 创建 loading | |||||
createLoading() { | |||||
const { isLoading } = this.renderProps | |||||
if (!this.isApple() && isLoading) { | |||||
const loadingEl = document.createElement('div') | |||||
this.loadingEl = loadingEl | |||||
loadingEl.className = 'loading-wrapper' | |||||
loadingEl.style.position = 'absolute' | |||||
loadingEl.style.top = '0' | |||||
loadingEl.style.left = '0' | |||||
loadingEl.style.zIndex = '1' | |||||
loadingEl.style.width = '100%' | |||||
loadingEl.style.height = '100%' | |||||
loadingEl.style.backgroundColor = 'black' | |||||
document.getElementById(this.wrapperId).appendChild(loadingEl) | |||||
// 创建 loading 动画 | |||||
const animationEl = document.createElement('div') | |||||
animationEl.className = 'loading' | |||||
animationEl.style.zIndex = '2' | |||||
animationEl.style.position = 'absolute' | |||||
animationEl.style.top = '50%' | |||||
animationEl.style.left = '50%' | |||||
animationEl.style.marginTop = '-15px' | |||||
animationEl.style.marginLeft = '-15px' | |||||
animationEl.style.width = '30px' | |||||
animationEl.style.height = '30px' | |||||
animationEl.style.border = '2px solid #FFF' | |||||
animationEl.style.borderTopColor = 'rgba(255, 255, 255, 0.2)' | |||||
animationEl.style.borderRightColor = 'rgba(255, 255, 255, 0.2)' | |||||
animationEl.style.borderBottomColor = 'rgba(255, 255, 255, 0.2)' | |||||
animationEl.style.borderRadius = '100%' | |||||
animationEl.style.animation = 'circle infinite 0.75s linear' | |||||
loadingEl.appendChild(animationEl) | |||||
// 创建 loading 动画所需的 keyframes | |||||
const style = document.createElement('style') | |||||
const keyframes = ` | |||||
@keyframes circle { | |||||
0% { | |||||
transform: rotate(0); | |||||
} | |||||
100% { | |||||
transform: rotate(360deg); | |||||
} | |||||
} | |||||
` | |||||
style.type = 'text/css' | |||||
if (style.styleSheet) { | |||||
style.styleSheet.cssText = keyframes | |||||
} else { | |||||
style.appendChild(document.createTextNode(keyframes)) | |||||
} | |||||
document.head.appendChild(style) | |||||
} | |||||
}, | |||||
// 监听视频相关事件 | |||||
listenVideoEvent() { | |||||
// 播放事件监听 | |||||
const playHandler = () => { | |||||
this.$ownerInstance.callMethod('eventEmit', { event: 'play' }) | |||||
this.$ownerInstance.callMethod('setViewData', { | |||||
key: 'playing', | |||||
value: true | |||||
}) | |||||
if (this.loadingEl) { | |||||
this.loadingEl.style.display = 'none' | |||||
} | |||||
} | |||||
this.videoEl.removeEventListener('play', playHandler) | |||||
this.videoEl.addEventListener('play', playHandler) | |||||
// 暂停事件监听 | |||||
const pauseHandler = () => { | |||||
this.$ownerInstance.callMethod('eventEmit', { event: 'pause' }) | |||||
this.$ownerInstance.callMethod('setViewData', { | |||||
key: 'playing', | |||||
value: false | |||||
}) | |||||
} | |||||
this.videoEl.removeEventListener('pause', pauseHandler) | |||||
this.videoEl.addEventListener('pause', pauseHandler) | |||||
// 结束事件监听 | |||||
const endedHandler = () => { | |||||
this.$ownerInstance.callMethod('eventEmit', { event: 'ended' }) | |||||
this.$ownerInstance.callMethod('resetEventCommand') | |||||
} | |||||
this.videoEl.removeEventListener('ended', endedHandler) | |||||
this.videoEl.addEventListener('ended', endedHandler) | |||||
// 加载完成事件监听 | |||||
const canPlayHandler = () => { | |||||
this.$ownerInstance.callMethod('eventEmit', { event: 'canplay' }) | |||||
this.execDelayFunc() | |||||
} | |||||
this.videoEl.removeEventListener('canplay', canPlayHandler) | |||||
this.videoEl.addEventListener('canplay', canPlayHandler) | |||||
// 加载失败事件监听 | |||||
const errorHandler = (e) => { | |||||
if (this.loadingEl) { | |||||
this.loadingEl.style.display = 'block' | |||||
} | |||||
this.$ownerInstance.callMethod('eventEmit', { event: 'error' }) | |||||
} | |||||
this.videoEl.removeEventListener('error', errorHandler) | |||||
this.videoEl.addEventListener('error', errorHandler) | |||||
// loadedmetadata 事件监听 | |||||
const loadedMetadataHandler = () => { | |||||
this.$ownerInstance.callMethod('eventEmit', { event: 'loadedmetadata' }) | |||||
// 获取视频的长度 | |||||
const duration = this.videoEl.duration | |||||
this.$ownerInstance.callMethod('eventEmit', { | |||||
event: 'durationchange', | |||||
data: duration | |||||
}) | |||||
this.$ownerInstance.callMethod('setViewData', { | |||||
key: 'duration', | |||||
value: duration | |||||
}) | |||||
// 加载首帧视频 模拟出封面图 | |||||
this.loadFirstFrame() | |||||
} | |||||
this.videoEl.removeEventListener('loadedmetadata', loadedMetadataHandler) | |||||
this.videoEl.addEventListener('loadedmetadata', loadedMetadataHandler) | |||||
// 播放进度监听 | |||||
const timeupdateHandler = (e) => { | |||||
const currentTime = e.target.currentTime | |||||
this.$ownerInstance.callMethod('eventEmit', { | |||||
event: 'timeupdate', | |||||
data: currentTime | |||||
}) | |||||
this.$ownerInstance.callMethod('setViewData', { | |||||
key: 'currentTime', | |||||
value: currentTime | |||||
}) | |||||
} | |||||
this.videoEl.removeEventListener('timeupdate', timeupdateHandler) | |||||
this.videoEl.addEventListener('timeupdate', timeupdateHandler) | |||||
// 倍速播放监听 | |||||
const ratechangeHandler = (e) => { | |||||
const playbackRate = e.target.playbackRate | |||||
this.$ownerInstance.callMethod('eventEmit', { | |||||
event: 'ratechange', | |||||
data: playbackRate | |||||
}) | |||||
} | |||||
this.videoEl.removeEventListener('ratechange', ratechangeHandler) | |||||
this.videoEl.addEventListener('ratechange', ratechangeHandler) | |||||
// 全屏事件监听 | |||||
if (this.isApple()) { | |||||
const webkitbeginfullscreenHandler = () => { | |||||
const presentationMode = this.videoEl.webkitPresentationMode | |||||
let isFullScreen = null | |||||
if (presentationMode === 'fullscreen') { | |||||
isFullScreen = true | |||||
} else { | |||||
isFullScreen = false | |||||
} | |||||
this.$ownerInstance.callMethod('eventEmit', { | |||||
event: 'fullscreenchange', | |||||
data: isFullScreen | |||||
}) | |||||
} | |||||
this.videoEl.removeEventListener('webkitpresentationmodechanged', webkitbeginfullscreenHandler) | |||||
this.videoEl.addEventListener('webkitpresentationmodechanged', webkitbeginfullscreenHandler) | |||||
} else { | |||||
const fullscreenchangeHandler = () => { | |||||
let isFullScreen = null | |||||
if (document.fullscreenElement) { | |||||
isFullScreen = true | |||||
} else { | |||||
isFullScreen = false | |||||
} | |||||
this.$ownerInstance.callMethod('eventEmit', { | |||||
event: 'fullscreenchange', | |||||
data: isFullScreen | |||||
}) | |||||
} | |||||
document.removeEventListener('fullscreenchange', fullscreenchangeHandler) | |||||
document.addEventListener('fullscreenchange', fullscreenchangeHandler) | |||||
} | |||||
}, | |||||
// 加载首帧视频,模拟出封面图 | |||||
loadFirstFrame() { | |||||
let { autoplay, muted } = this.renderProps | |||||
if (this.isApple()) { | |||||
this.videoEl.play() | |||||
if (!autoplay) { | |||||
this.videoEl.pause() | |||||
} | |||||
} else { | |||||
// optimize: timeout 延迟调用是为了规避控制台的`https://goo.gl/LdLk22`这个报错 | |||||
/** | |||||
* 原因:chromium 内核中,谷歌协议规定,视频不允许在非静音状态下进行自动播放 | |||||
* 解决:在自动播放时,先将视频静音,然后延迟调用 play 方法,播放视频 | |||||
* 说明:iOS 的 Safari 内核不会有这个,仅在 Android 设备出现,即使有这个报错也不影响的,所以不介意控制台报错的话是可以删掉这个 timeout 的 | |||||
*/ | |||||
this.videoEl.muted = true | |||||
setTimeout(() => { | |||||
this.videoEl.play() | |||||
this.videoEl.muted = muted | |||||
if (!autoplay) { | |||||
setTimeout(() => { | |||||
this.videoEl.pause() | |||||
}, 100) | |||||
} | |||||
}, 10) | |||||
} | |||||
}, | |||||
triggerCommand(eventType) { | |||||
if (eventType) { | |||||
this.$ownerInstance.callMethod('resetEventCommand') | |||||
this.videoEl && this.videoEl[eventType]() | |||||
} | |||||
}, | |||||
triggerFunc(func) { | |||||
const { name, params } = func || {} | |||||
if (name) { | |||||
this[name](params) | |||||
this.$ownerInstance.callMethod('resetFunc') | |||||
} | |||||
}, | |||||
removeHandler() { | |||||
if (this.videoEl) { | |||||
this.videoEl.pause() | |||||
this.videoEl.src = '' | |||||
this.$ownerInstance.callMethod('setViewData', { | |||||
key: 'videoSrc', | |||||
value: '' | |||||
}) | |||||
this.videoEl.load() | |||||
} | |||||
}, | |||||
fullScreenHandler() { | |||||
if (this.isApple()) { | |||||
this.videoEl.webkitEnterFullscreen() | |||||
} else { | |||||
this.videoEl.requestFullscreen() | |||||
} | |||||
}, | |||||
toSeekHandler({ sec, isDelay }) { | |||||
const func = () => { | |||||
if (this.videoEl) { | |||||
this.videoEl.currentTime = sec | |||||
} | |||||
} | |||||
// 延迟执行 | |||||
if (isDelay) { | |||||
this.delayFunc = func | |||||
} else { | |||||
func() | |||||
} | |||||
}, | |||||
// 执行延迟函数 | |||||
execDelayFunc() { | |||||
this.delayFunc && this.delayFunc() | |||||
this.delayFunc = null | |||||
}, | |||||
viewportChange(props) { | |||||
this.renderProps = props | |||||
const { autoplay, muted, controls, loop, playbackRate } = props | |||||
if (this.videoEl) { | |||||
this.videoEl.autoplay = autoplay | |||||
this.videoEl.controls = controls | |||||
this.videoEl.loop = loop | |||||
this.videoEl.muted = muted | |||||
this.videoEl.playbackRate = playbackRate | |||||
} | |||||
}, | |||||
randomNumChange(val) { | |||||
this.num = val | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style scoped> | |||||
.player-wrapper { | |||||
overflow: hidden; | |||||
height: 100%; | |||||
padding: 0; | |||||
position: relative; | |||||
} | |||||
</style> |
@@ -110,6 +110,24 @@ | |||||
"navigationStyle": "custom" | "navigationStyle": "custom" | ||||
} | } | ||||
}, | }, | ||||
{ | |||||
"path": "pages/earlyWarning/detail", | |||||
"style": { | |||||
"navigationBarTitleText": "查看详情" | |||||
} | |||||
}, | |||||
{ | |||||
"path": "pages/earlyWarning/handlingSuggestions", | |||||
"style": { | |||||
"navigationBarTitleText": "处理意见" | |||||
} | |||||
}, | |||||
{ | |||||
"path": "pages/earlyWarning/processingResults", | |||||
"style": { | |||||
"navigationBarTitleText": "处理结果" | |||||
} | |||||
}, | |||||
// 我的 | // 我的 | ||||
{ | { | ||||
"path": "pages/my/index", | "path": "pages/my/index", | ||||
@@ -0,0 +1,600 @@ | |||||
<template> | |||||
<view class="inspectionCenter"> | |||||
<view class="searchBox"> | |||||
<view class="searchLine"> | |||||
<view class="leftSearchBox"> | |||||
<view class="searchLabel"> | |||||
筛选条件: | |||||
</view> | |||||
<view class="searchValue"> | |||||
</view> | |||||
</view> | |||||
<view class="searchShow" @click="openSearch"> | |||||
<image v-show="isShowSearch==false" style="width:20px;height:20px;" | |||||
src="@/static/image/earlyWarning/screen.png" mode=""> | |||||
</image> | |||||
<image v-show="isShowSearch" style="width:20px;height:20px;" | |||||
src="@/static/image/earlyWarning/screenActive.png" mode=""> | |||||
</image> | |||||
</view> | |||||
</view> | |||||
<view @click="isShowSearch=false" class="searchDialog" v-if="isShowSearch"> | |||||
<view class="content" @click.stop="isSelect"> | |||||
<u-row justify="space-between" gutter="10"> | |||||
<u-col span="7"> | |||||
<view class="demo-layout" @click="toOpen"> | |||||
<view class="left-layout"> | |||||
<text>{{searchForm.alarmType}}</text> | |||||
</view> | |||||
<view class="right-layout"> | |||||
<image style="width: 30rpx;height:30rpx;" | |||||
src="@/static/image/earlyWarning/arrowRight.png" mode=""></image> | |||||
</view> | |||||
</view> | |||||
<!-- <jp-select-plus ref="selectPlus" :isShow="false" color="#2388FF" placeholder="请选择" | |||||
isSearch v-model="va3" :list="listc"></jp-select-plus> --> | |||||
</u-col> | |||||
<u-col span="5"> | |||||
<view class="demo-layout" @click="toOpenSelect"> | |||||
<view class="left-layout"> | |||||
<text>{{searchForm.warnHand}}</text> | |||||
</view> | |||||
<view class="right-layout"> | |||||
<image style="width: 30rpx;height:30rpx;" | |||||
src="@/static/image/earlyWarning/arrowRight.png" mode=""></image> | |||||
</view> | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
<u-row style="margin-top:10px;" justify="space-between" gutter="10"> | |||||
<u-col span="12"> | |||||
<uni-datetime-picker v-model="searchForm.tick" type="datetimerange"> | |||||
<view class="demo-layout"> | |||||
<view class="startBox"> | |||||
{{searchForm.StartTick}} | |||||
</view> | |||||
<text>至</text> | |||||
<view class="endBox"> | |||||
{{searchForm.EndTick}} | |||||
</view> | |||||
<view class="timeIcon"> | |||||
<image style="width: 30rpx;height:30rpx;" | |||||
src="@/static/image/earlyWarning/calendar.png" mode=""></image> | |||||
</view> | |||||
</view> | |||||
</uni-datetime-picker> | |||||
</u-col> | |||||
</u-row> | |||||
<view class="btnBox"> | |||||
<view class="leftBtn"> | |||||
重置 | |||||
</view> | |||||
<view class="rightBtn"> | |||||
确认 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="tableBox"> | |||||
<u-empty marginTop="100rpx" :show="false" mode="warnList" text="暂无数据"></u-empty> | |||||
<u-list @scrolltolower="scrolltolower" style="height: calc(100% - 0rpx);"> | |||||
<u-list-item v-for="(item, index) in warnList" :key="index"> | |||||
<view class="liBox"> | |||||
<view class="topCard"> | |||||
<view class="pic"> | |||||
<image src="@/static/image/earlyWarning/warnBack.png" mode="aspectFill"></image> | |||||
<view class="resolvingPower"> | |||||
2560*1440 | |||||
</view> | |||||
</view> | |||||
<view class="rightCard"> | |||||
<view class="firstCard"> | |||||
<view class="schoolName"> | |||||
摄像头ID:SXT001 | |||||
</view> | |||||
</view> | |||||
<view class="secondCard"> | |||||
<view class="txt"> | |||||
摄像头名称:厨房(良景) | |||||
</view> | |||||
</view> | |||||
<view class="thirdCard"> | |||||
<view class="txt"> | |||||
设备IP:192.168.10.130 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="btoCard"> | |||||
<view class="leftBox btoBox"> | |||||
<image src="@/static/image/earlyWarning/school.png" mode=""></image> | |||||
<view class="txt"> | |||||
所属学校:演示学校 | |||||
</view> | |||||
</view> | |||||
<view class="rightBox btoBox" @click="deleteClick"> | |||||
<view class="txt"> | |||||
播放 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</u-list-item> | |||||
<u-loadmore :status="status" /> | |||||
</u-list> | |||||
</view> | |||||
<u-modal :show="showDelete" :title="deleteTitle" :showCancelButton="true" @confirm="confirmDelete" | |||||
@cancel="cancelDelete"> | |||||
<view class="slot-content"> | |||||
<text style="text-align: center;">是否确定删除该预警吗?</text> | |||||
</view> | |||||
</u-modal> | |||||
<selectSearch ref="selectSearchBox" :cellVisible="false" :value.sync="searchForm.alarmType" | |||||
:options="[{value:1,label:'qinshi1'},{value:2,label:'qinshi2'}]" title="预警类型" search-place-holder="预警类型" /> | |||||
<selectRadio ref="selectRadioBox" :cellVisible="false" :value.sync="searchForm.warnHand" | |||||
:options="[{value:1,label:'loudong1'},{value:2,label:'loudong2'}]" title="楼栋" /> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
import selectRadio from "@/components/selectRadio.vue" | |||||
import selectSearch from "@/components/selectSearch.vue" | |||||
export default { | |||||
components: { | |||||
selectRadio, | |||||
selectSearch, | |||||
}, | |||||
data() { | |||||
return { | |||||
showDelete: false, | |||||
deleteTitle: '提示', | |||||
deleteContent: '是否确定删除该预警吗?', | |||||
isShowSearch: false, | |||||
searchForm: { | |||||
alarmType: '警告类型', | |||||
warnHand: '处理状态', | |||||
tick: [], | |||||
StartTick: '开始时间', | |||||
EndTick: '结束时间', | |||||
}, | |||||
warnList: [{ | |||||
warnHand: 1 | |||||
}, { | |||||
warnHand: 0 | |||||
}, { | |||||
warnHand: 1 | |||||
}, { | |||||
warnHand: 1 | |||||
}, { | |||||
warnHand: 1 | |||||
}, {}, {}, {}, {}, ], | |||||
isLoading: false, | |||||
status: 'loadmore', //loading正在加载 loadmore加载更多 nomore没有更多了 | |||||
listc: [{ | |||||
code: 1, | |||||
name: 'dasda' | |||||
}, { | |||||
code: 2, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 3, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 4, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 5, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 6, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 7, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 8, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 9, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 10, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 11, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 12, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 13, | |||||
name: '你好' | |||||
} | |||||
] | |||||
} | |||||
}, | |||||
watch: { | |||||
"searchForm.tick"() { | |||||
console.log('日期时间:', this.searchForm.tick); | |||||
if (this.searchForm.tick && this.searchForm.tick.length > 0) { | |||||
this.searchForm.StartTick = this.searchForm.tick[0] | |||||
this.searchForm.EndTick = this.searchForm.tick[1] | |||||
} | |||||
}, | |||||
}, | |||||
filters: { | |||||
// statusChange(val) { | |||||
// switch (val) { | |||||
// case 'todo': | |||||
// return '我的待办' | |||||
// break; | |||||
// case 'send': | |||||
// return '由我发起' | |||||
// break; | |||||
// case 'done': | |||||
// return '我的已办' | |||||
// break; | |||||
// default: | |||||
// } | |||||
// }, | |||||
}, | |||||
onLoad() { | |||||
// 隐藏导航栏 | |||||
this.loadmore() | |||||
}, | |||||
methods: { | |||||
cancelDelete() { | |||||
this.showDelete = false; | |||||
}, | |||||
deleteClick() { | |||||
this.showDelete = true; | |||||
}, | |||||
confirmDelete() { | |||||
this.showDelete = false; | |||||
}, | |||||
// 跳转处理页面 | |||||
toHandle(row) { | |||||
if (row.warnHand == 1) { | |||||
uni.navigateTo({ | |||||
url: '/pages/earlyWarning/handlingSuggestions' | |||||
}); | |||||
} | |||||
}, | |||||
// 跳转详情页面 | |||||
toDetail(row) { | |||||
uni.navigateTo({ | |||||
url: '/pages/earlyWarning/detail' | |||||
}); | |||||
}, | |||||
// 预警类型弹框筛选 | |||||
toOpen() { | |||||
this.$refs.selectSearchBox.show = true; | |||||
}, | |||||
// 处理情况筛选 | |||||
toOpenSelect() { | |||||
this.$refs.selectRadioBox.show = true; | |||||
}, | |||||
// 打开筛选框 | |||||
openSearch() { | |||||
this.isShowSearch = !this.isShowSearch; | |||||
}, | |||||
isSelect() { | |||||
}, | |||||
scrolltolower() { | |||||
this.loadmore() | |||||
}, | |||||
loadmore() { | |||||
if (this.status != 'loadmore') return | |||||
this.status = 'loading' | |||||
setTimeout(() => { | |||||
for (let i = 0; i < 1; i++) { | |||||
this.warnList.push({}, {}) | |||||
} | |||||
// 获取到的总条数>=接口总条数 | |||||
if (this.warnList.length >= 14) { | |||||
this.status = 'nomore' | |||||
} else { | |||||
this.status = 'loadmore' | |||||
} | |||||
}, 2000) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
// .contentBox { | |||||
// height: calc(100% - 375rpx); | |||||
.inspectionCenter { | |||||
width: 100%; | |||||
height: 100%; | |||||
.u-modal__title { | |||||
color: #000000; | |||||
} | |||||
} | |||||
.searchBox { | |||||
// height: calc(100% - 360rpx); | |||||
position: relative; | |||||
.searchLine { | |||||
height: 88rpx; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
padding: 0 15px; | |||||
box-sizing: border-box; | |||||
background: #fff; | |||||
.leftSearchBox { | |||||
display: flex; | |||||
align-items: center; | |||||
width: calc(100% - 40px); | |||||
.searchLabel { | |||||
flex-shrink: 1; | |||||
color: #333333; | |||||
width: 80px; | |||||
} | |||||
.searchValue { | |||||
width: calc(100% - 60px); | |||||
margin-left: 10px; | |||||
color: #2388FF; | |||||
overflow: hidden; | |||||
word-wrap: break-word; | |||||
white-space: pre-wrap; | |||||
// font-size: 14px; | |||||
display: -webkit-box; | |||||
-webkit-box-orient: vertical; | |||||
-webkit-line-clamp: 1; | |||||
} | |||||
} | |||||
} | |||||
.searchDialog { | |||||
position: absolute; | |||||
z-index: 990; | |||||
top: 89rpx; | |||||
width: 100%; | |||||
height: calc(100vh - 375rpx - 100rpx); | |||||
font-size: 26rpx; | |||||
background: rgba(0, 0, 0, 0.2); | |||||
.content { | |||||
background: #FFFFFF; | |||||
padding: 15px; | |||||
box-sizing: border-box; | |||||
.demo-layout { | |||||
height: 80rpx; | |||||
border-radius: 8rpx; | |||||
background: #F5F5F5; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
padding: 0 10px; | |||||
box-sizing: border-box; | |||||
.left-layout { | |||||
color: #777777; | |||||
} | |||||
.right-layout {} | |||||
.startBox { | |||||
color: #777777; | |||||
} | |||||
text { | |||||
color: #777777; | |||||
} | |||||
.endBox { | |||||
color: #777777; | |||||
} | |||||
.timeIcon {} | |||||
} | |||||
} | |||||
.btnBox { | |||||
display: flex; | |||||
align-items: center; | |||||
margin-top: 15px; | |||||
.leftBtn { | |||||
width: 50%; | |||||
height: 74rpx; | |||||
line-height: 74rpx; | |||||
border: 1px solid #BABABA; | |||||
border-radius: 12rpx; | |||||
color: #333333; | |||||
text-align: center; | |||||
} | |||||
.rightBtn { | |||||
width: 50%; | |||||
height: 74rpx; | |||||
line-height: 74rpx; | |||||
border: 1px solid #2388FF; | |||||
border-radius: 12rpx; | |||||
color: #fff; | |||||
text-align: center; | |||||
background: #2388FF; | |||||
margin-left: 15rpx; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.tableBox { | |||||
height: 100%; | |||||
padding: 10px; | |||||
box-sizing: border-box; | |||||
// height: 600px; | |||||
padding-bottom: 50px; | |||||
.liBox { | |||||
background: #fff; | |||||
padding: 20px 15px; | |||||
box-sizing: border-box; | |||||
border-radius: 20px; | |||||
margin-bottom: 10px; | |||||
.topCard { | |||||
display: flex; | |||||
.pic { | |||||
position: relative; | |||||
image { | |||||
width: 310rpx; | |||||
height: 220rpx; | |||||
border-radius: 4px; | |||||
} | |||||
.resolvingPower { | |||||
position: absolute; | |||||
top: 15rpx; | |||||
right: 15rpx; | |||||
background: #000000; | |||||
color: #fff; | |||||
padding: 8rpx; | |||||
box-sizing: border-box; | |||||
font-size: 20rpx; | |||||
border-radius: 4rpx; | |||||
} | |||||
} | |||||
.rightCard { | |||||
margin-left: 20rpx; | |||||
margin-top: 15rpx; | |||||
.firstCard { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
margin-bottom: 60rpx; | |||||
.schoolName { | |||||
font-size: 32rpx; | |||||
font-weight: 700; | |||||
color: #333333; | |||||
overflow: hidden; | |||||
word-wrap: break-word; | |||||
white-space: pre-wrap; | |||||
// font-size: 14px; | |||||
display: -webkit-box; | |||||
-webkit-box-orient: vertical; | |||||
-webkit-line-clamp: 1; | |||||
} | |||||
.statusBox { | |||||
width: 140rpx; | |||||
flex-shrink: 1; | |||||
text-align: center; | |||||
height: 50rpx; | |||||
line-height: 50rpx; | |||||
font-size: 28rpx; | |||||
border-radius: 8rpx; | |||||
color: #fff; | |||||
} | |||||
.handle { | |||||
background: rgba(15, 175, 118, 0.1); | |||||
color: #0FAF76; | |||||
} | |||||
.nohandle { | |||||
background: rgba(239, 45, 45, 0.1); | |||||
color: rgba(239, 45, 45, 1); | |||||
} | |||||
} | |||||
.secondCard, | |||||
.thirdCard { | |||||
display: flex; | |||||
align-items: center; | |||||
margin-top: 18rpx; | |||||
.txt { | |||||
font-size: 28rpx; | |||||
color: #333333; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.midCard { | |||||
font-size: 28rpx; | |||||
.midContent { | |||||
margin-top: 18rpx; | |||||
} | |||||
} | |||||
.btoCard { | |||||
border-top: 1px solid rgba(0, 0, 0, 0.1); | |||||
margin-top: 30rpx; | |||||
padding: 18px 0 0 0; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
.btoBox { | |||||
// width: 33.3%; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
position: relative; | |||||
image { | |||||
width: 40rpx; | |||||
height: 40rpx; | |||||
margin-right: 15rpx; | |||||
} | |||||
} | |||||
.rightBox { | |||||
width: 180rpx; | |||||
height: 74rpx; | |||||
background: #2388FF; | |||||
color: #fff; | |||||
border-radius: 80rpx; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
// } | |||||
</style> |
@@ -0,0 +1,641 @@ | |||||
<template> | |||||
<view class="warningInfo"> | |||||
<view class="searchBox"> | |||||
<view class="searchLine"> | |||||
<view class="leftSearchBox"> | |||||
<view class="searchLabel"> | |||||
筛选条件: | |||||
</view> | |||||
<view class="searchValue"> | |||||
</view> | |||||
</view> | |||||
<view class="searchShow" @click="openSearch"> | |||||
<image v-show="isShowSearch==false" style="width:20px;height:20px;" | |||||
src="@/static/image/earlyWarning/screen.png" mode=""> | |||||
</image> | |||||
<image v-show="isShowSearch" style="width:20px;height:20px;" | |||||
src="@/static/image/earlyWarning/screenActive.png" mode=""> | |||||
</image> | |||||
</view> | |||||
</view> | |||||
<view @click="isShowSearch=false" class="searchDialog" v-if="isShowSearch"> | |||||
<view class="content" @click.stop="isSelect"> | |||||
<u-row justify="space-between" gutter="10"> | |||||
<u-col span="7"> | |||||
<view class="demo-layout" @click="toOpen"> | |||||
<view class="left-layout"> | |||||
<text>{{searchForm.alarmType}}</text> | |||||
</view> | |||||
<view class="right-layout"> | |||||
<image style="width: 30rpx;height:30rpx;" | |||||
src="@/static/image/earlyWarning/arrowRight.png" mode=""></image> | |||||
</view> | |||||
</view> | |||||
<!-- <jp-select-plus ref="selectPlus" :isShow="false" color="#2388FF" placeholder="请选择" | |||||
isSearch v-model="va3" :list="listc"></jp-select-plus> --> | |||||
</u-col> | |||||
<u-col span="5"> | |||||
<view class="demo-layout" @click="toOpenSelect"> | |||||
<view class="left-layout"> | |||||
<text>{{searchForm.warnHand}}</text> | |||||
</view> | |||||
<view class="right-layout"> | |||||
<image style="width: 30rpx;height:30rpx;" | |||||
src="@/static/image/earlyWarning/arrowRight.png" mode=""></image> | |||||
</view> | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
<u-row style="margin-top:10px;" justify="space-between" gutter="10"> | |||||
<u-col span="12"> | |||||
<uni-datetime-picker v-model="searchForm.tick" type="datetimerange"> | |||||
<view class="demo-layout"> | |||||
<view class="startBox"> | |||||
{{searchForm.StartTick}} | |||||
</view> | |||||
<text>至</text> | |||||
<view class="endBox"> | |||||
{{searchForm.EndTick}} | |||||
</view> | |||||
<view class="timeIcon"> | |||||
<image style="width: 30rpx;height:30rpx;" | |||||
src="@/static/image/earlyWarning/calendar.png" mode=""></image> | |||||
</view> | |||||
</view> | |||||
</uni-datetime-picker> | |||||
</u-col> | |||||
</u-row> | |||||
<view class="btnBox"> | |||||
<view class="leftBtn"> | |||||
重置 | |||||
</view> | |||||
<view class="rightBtn"> | |||||
确认 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="tableBox"> | |||||
<u-empty marginTop="100rpx" :show="false" mode="warnList" text="暂无数据"></u-empty> | |||||
<u-list @scrolltolower="scrolltolower" style="height: calc(100% - 0rpx);"> | |||||
<u-list-item v-for="(item, index) in warnList" :key="index"> | |||||
<view class="liBox"> | |||||
<view class="topCard"> | |||||
<view class="pic"> | |||||
<image src="@/static/image/earlyWarning/warnBack.png" mode="aspectFill"></image> | |||||
</view> | |||||
<view class="rightCard"> | |||||
<view class="firstCard"> | |||||
<view class="schoolName"> | |||||
学校名称学校名称学校名称学校名称 | |||||
</view> | |||||
<view class="statusBox" :class="[item.warnHand == 1?'handle':'nohandle']"> | |||||
{{item.warnHand == 1 ? '已处理' : '未处理'}} | |||||
</view> | |||||
</view> | |||||
<view class="secondCard"> | |||||
<image style="width: 30rpx;height: 30rpx;" | |||||
src="@/static/image/earlyWarning/warnType.png" mode=""></image> | |||||
<view class="txt"> | |||||
警告类型:周界入侵 | |||||
</view> | |||||
</view> | |||||
<view class="thirdCard"> | |||||
<image style="width: 30rpx;height: 30rpx;" | |||||
src="@/static/image/earlyWarning/warnVideo.png" mode=""></image> | |||||
<view class="txt"> | |||||
警告摄像头:厨房(良景) | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="midCard"> | |||||
<u-row> | |||||
<u-col span="6"> | |||||
<view class="midContent"> | |||||
姓名:杨云 | |||||
</view> | |||||
</u-col> | |||||
<u-col span="6"> | |||||
<view class="midContent"> | |||||
系部:安环部 | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
<u-row> | |||||
<u-col span="6"> | |||||
<view class="midContent"> | |||||
专业:环艺 | |||||
</view> | |||||
</u-col> | |||||
<u-col span="6"> | |||||
<view class="midContent"> | |||||
班级:第二班 | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
<u-row> | |||||
<u-col span="12"> | |||||
<view class="midContent"> | |||||
时间:2024-08-15 11:59:12 | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
</view> | |||||
<view class="btoCard"> | |||||
<view class="leftBox btoBox" @click="toDetail(item)"> | |||||
<image src="@/static/image/earlyWarning/detail.png" mode=""></image> | |||||
<view class="txt"> | |||||
查看 | |||||
</view> | |||||
</view> | |||||
<view class="midBox btoBox" @click="toHandle(item)"> | |||||
<image v-if="item.warnHand == 1" src="@/static/image/earlyWarning/handle.png" mode=""> | |||||
</image> | |||||
<image v-if="item.warnHand == 0" src="@/static/image/earlyWarning/handleDisabled.png" | |||||
mode=""></image> | |||||
<view :class="[item.warnHand == 1?'txt':'disabled']"> | |||||
处理 | |||||
</view> | |||||
</view> | |||||
<view class="rightBox btoBox" @click="deleteClick"> | |||||
<image src="@/static/image/earlyWarning/delete.png" mode=""></image> | |||||
<view class="txt"> | |||||
删除 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</u-list-item> | |||||
<u-loadmore :status="status" /> | |||||
</u-list> | |||||
</view> | |||||
<u-modal :show="showDelete" :title="deleteTitle" :showCancelButton="true" @confirm="confirmDelete" | |||||
@cancel="cancelDelete"> | |||||
<view class="slot-content"> | |||||
<text style="text-align: center;">是否确定删除该预警吗?</text> | |||||
</view> | |||||
</u-modal> | |||||
<selectSearch ref="selectSearchBox" :cellVisible="false" :value.sync="searchForm.alarmType" | |||||
:options="[{value:1,label:'qinshi1'},{value:2,label:'qinshi2'}]" title="预警类型" search-place-holder="预警类型" /> | |||||
<selectRadio ref="selectRadioBox" :cellVisible="false" :value.sync="searchForm.warnHand" | |||||
:options="[{value:1,label:'loudong1'},{value:2,label:'loudong2'}]" title="楼栋" /> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
import selectRadio from "@/components/selectRadio.vue" | |||||
import selectSearch from "@/components/selectSearch.vue" | |||||
export default { | |||||
components: { | |||||
selectRadio, | |||||
selectSearch | |||||
}, | |||||
data() { | |||||
return { | |||||
showDelete: false, | |||||
deleteTitle: '提示', | |||||
deleteContent: '是否确定删除该预警吗?', | |||||
isShowSearch: false, | |||||
searchForm: { | |||||
alarmType: '警告类型', | |||||
warnHand: '处理状态', | |||||
tick: [], | |||||
StartTick: '开始时间', | |||||
EndTick: '结束时间', | |||||
}, | |||||
warnList: [{ | |||||
warnHand: 1 | |||||
}, { | |||||
warnHand: 0 | |||||
}, { | |||||
warnHand: 1 | |||||
}, { | |||||
warnHand: 1 | |||||
}, { | |||||
warnHand: 1 | |||||
}, {}, {}, {}, {}, ], | |||||
isLoading: false, | |||||
status: 'loadmore', //loading正在加载 loadmore加载更多 nomore没有更多了 | |||||
listc: [{ | |||||
code: 1, | |||||
name: 'dasda' | |||||
}, { | |||||
code: 2, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 3, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 4, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 5, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 6, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 7, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 8, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 9, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 10, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 11, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 12, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 13, | |||||
name: '你好' | |||||
} | |||||
] | |||||
} | |||||
}, | |||||
watch: { | |||||
"searchForm.tick"() { | |||||
console.log('日期时间:', this.searchForm.tick); | |||||
if (this.searchForm.tick && this.searchForm.tick.length > 0) { | |||||
this.searchForm.StartTick = this.searchForm.tick[0] | |||||
this.searchForm.EndTick = this.searchForm.tick[1] | |||||
} | |||||
}, | |||||
}, | |||||
filters: { | |||||
// statusChange(val) { | |||||
// switch (val) { | |||||
// case 'todo': | |||||
// return '我的待办' | |||||
// break; | |||||
// case 'send': | |||||
// return '由我发起' | |||||
// break; | |||||
// case 'done': | |||||
// return '我的已办' | |||||
// break; | |||||
// default: | |||||
// } | |||||
// }, | |||||
}, | |||||
onLoad() { | |||||
// 隐藏导航栏 | |||||
this.loadmore() | |||||
}, | |||||
methods: { | |||||
cancelDelete() { | |||||
this.showDelete = false; | |||||
}, | |||||
deleteClick() { | |||||
this.showDelete = true; | |||||
}, | |||||
confirmDelete() { | |||||
this.showDelete = false; | |||||
}, | |||||
// 跳转处理页面 | |||||
toHandle(row) { | |||||
if (row.warnHand == 1) { | |||||
uni.navigateTo({ | |||||
url: '/pages/earlyWarning/handlingSuggestions' | |||||
}); | |||||
} | |||||
}, | |||||
// 跳转详情页面 | |||||
toDetail(row) { | |||||
uni.navigateTo({ | |||||
url: '/pages/earlyWarning/detail' | |||||
}); | |||||
}, | |||||
// 预警类型弹框筛选 | |||||
toOpen() { | |||||
this.$refs.selectSearchBox.show = true; | |||||
}, | |||||
// 处理情况筛选 | |||||
toOpenSelect() { | |||||
this.$refs.selectRadioBox.show = true; | |||||
}, | |||||
// 打开筛选框 | |||||
openSearch() { | |||||
this.isShowSearch = !this.isShowSearch; | |||||
}, | |||||
isSelect() { | |||||
}, | |||||
scrolltolower() { | |||||
this.loadmore() | |||||
}, | |||||
loadmore() { | |||||
if (this.status != 'loadmore') return | |||||
this.status = 'loading' | |||||
setTimeout(() => { | |||||
for (let i = 0; i < 1; i++) { | |||||
this.warnList.push({}, {}) | |||||
} | |||||
// 获取到的总条数>=接口总条数 | |||||
if (this.warnList.length >= 14) { | |||||
this.status = 'nomore' | |||||
} else { | |||||
this.status = 'loadmore' | |||||
} | |||||
}, 2000) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
// .contentBox { | |||||
// height: calc(100% - 375rpx); | |||||
.warningInfo { | |||||
width: 100%; | |||||
height: 100%; | |||||
.u-modal__title { | |||||
color: #000000; | |||||
} | |||||
} | |||||
.searchBox { | |||||
// height: calc(100% - 360rpx); | |||||
position: relative; | |||||
.searchLine { | |||||
height: 88rpx; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
padding: 0 15px; | |||||
box-sizing: border-box; | |||||
background: #fff; | |||||
.leftSearchBox { | |||||
display: flex; | |||||
align-items: center; | |||||
width: calc(100% - 40px); | |||||
.searchLabel { | |||||
flex-shrink: 1; | |||||
color: #333333; | |||||
width: 80px; | |||||
} | |||||
.searchValue { | |||||
width: calc(100% - 60px); | |||||
margin-left: 10px; | |||||
color: #2388FF; | |||||
overflow: hidden; | |||||
word-wrap: break-word; | |||||
white-space: pre-wrap; | |||||
// font-size: 14px; | |||||
display: -webkit-box; | |||||
-webkit-box-orient: vertical; | |||||
-webkit-line-clamp: 1; | |||||
} | |||||
} | |||||
} | |||||
.searchDialog { | |||||
position: absolute; | |||||
z-index: 990; | |||||
top: 89rpx; | |||||
width: 100%; | |||||
height: calc(100vh - 375rpx - 100rpx); | |||||
font-size: 26rpx; | |||||
background: rgba(0, 0, 0, 0.2); | |||||
.content { | |||||
background: #FFFFFF; | |||||
padding: 15px; | |||||
box-sizing: border-box; | |||||
.demo-layout { | |||||
height: 80rpx; | |||||
border-radius: 8rpx; | |||||
background: #F5F5F5; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
padding: 0 10px; | |||||
box-sizing: border-box; | |||||
.left-layout { | |||||
color: #777777; | |||||
} | |||||
.right-layout {} | |||||
.startBox { | |||||
color: #777777; | |||||
} | |||||
text { | |||||
color: #777777; | |||||
} | |||||
.endBox { | |||||
color: #777777; | |||||
} | |||||
.timeIcon {} | |||||
} | |||||
} | |||||
.btnBox { | |||||
display: flex; | |||||
align-items: center; | |||||
margin-top: 15px; | |||||
.leftBtn { | |||||
width: 50%; | |||||
height: 74rpx; | |||||
line-height: 74rpx; | |||||
border: 1px solid #BABABA; | |||||
border-radius: 12rpx; | |||||
color: #333333; | |||||
text-align: center; | |||||
} | |||||
.rightBtn { | |||||
width: 50%; | |||||
height: 74rpx; | |||||
line-height: 74rpx; | |||||
border: 1px solid #2388FF; | |||||
border-radius: 12rpx; | |||||
color: #fff; | |||||
text-align: center; | |||||
background: #2388FF; | |||||
margin-left: 15rpx; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.tableBox { | |||||
height: 100%; | |||||
padding: 10px; | |||||
box-sizing: border-box; | |||||
// height: 600px; | |||||
padding-bottom: 50px; | |||||
.liBox { | |||||
background: #fff; | |||||
padding: 20px 15px; | |||||
box-sizing: border-box; | |||||
border-radius: 20px; | |||||
margin-bottom: 10px; | |||||
.topCard { | |||||
display: flex; | |||||
.pic { | |||||
image { | |||||
width: 160rpx; | |||||
height: 160rpx; | |||||
border-radius: 4px; | |||||
} | |||||
} | |||||
.rightCard { | |||||
margin-left: 20rpx; | |||||
.firstCard { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
margin-bottom: 20rpx; | |||||
.schoolName { | |||||
font-size: 32rpx; | |||||
font-weight: 700; | |||||
color: #333333; | |||||
overflow: hidden; | |||||
word-wrap: break-word; | |||||
white-space: pre-wrap; | |||||
// font-size: 14px; | |||||
display: -webkit-box; | |||||
-webkit-box-orient: vertical; | |||||
-webkit-line-clamp: 1; | |||||
} | |||||
.statusBox { | |||||
width: 140rpx; | |||||
flex-shrink: 1; | |||||
text-align: center; | |||||
height: 50rpx; | |||||
line-height: 50rpx; | |||||
font-size: 28rpx; | |||||
border-radius: 8rpx; | |||||
color: #fff; | |||||
} | |||||
.handle { | |||||
background: rgba(15, 175, 118, 0.1); | |||||
color: #0FAF76; | |||||
} | |||||
.nohandle { | |||||
background: rgba(239, 45, 45, 0.1); | |||||
color: rgba(239, 45, 45, 1); | |||||
} | |||||
} | |||||
.secondCard, | |||||
.thirdCard { | |||||
display: flex; | |||||
align-items: center; | |||||
margin-top: 18rpx; | |||||
.txt { | |||||
font-size: 28rpx; | |||||
margin-left: 10rpx; | |||||
color: #333333; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.midCard { | |||||
font-size: 28rpx; | |||||
.midContent { | |||||
margin-top: 18rpx; | |||||
} | |||||
} | |||||
.btoCard { | |||||
border-top: 1px solid rgba(0, 0, 0, 0.1); | |||||
margin-top: 30rpx; | |||||
padding: 18px 0 0 0; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
.btoBox { | |||||
width: 33.3%; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
position: relative; | |||||
image { | |||||
width: 40rpx; | |||||
height: 40rpx; | |||||
margin-right: 15rpx; | |||||
} | |||||
} | |||||
.btoBox:not(:last-child)::before { | |||||
content: ''; | |||||
display: block; | |||||
width: 1px; | |||||
height: 100%; | |||||
background: rgba(0, 0, 0, 0.1); | |||||
position: absolute; | |||||
right: 0px; | |||||
} | |||||
.midBox { | |||||
.txt { | |||||
color: #333333; | |||||
} | |||||
.disabled { | |||||
color: #777777; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
// } | |||||
</style> |
@@ -0,0 +1,292 @@ | |||||
<template> | |||||
<view class="warningDetail"> | |||||
<view class="title cli"> | |||||
周界入侵-2024-08-20 18:01:41 | |||||
</view> | |||||
<image style="width: 100%;" src="../../static/image/add.png" mode="widthFix"></image> | |||||
<view class="cli"> | |||||
<view class="labelBox"> | |||||
所属学校: | |||||
</view> | |||||
<view class="valueBox"> | |||||
演示学校 | |||||
</view> | |||||
</view> | |||||
<view class="cli"> | |||||
<view class="labelBox"> | |||||
班级: | |||||
</view> | |||||
<view class="valueBox"> | |||||
暂无数据 | |||||
</view> | |||||
</view> | |||||
<view class="cli"> | |||||
<view class="labelBox"> | |||||
告警摄像头: | |||||
</view> | |||||
<view class="valueBox"> | |||||
演示学校 | |||||
</view> | |||||
</view> | |||||
<view class="cli"> | |||||
<view class="labelBox"> | |||||
告警类型: | |||||
</view> | |||||
<view class="valueBox"> | |||||
演示学校 | |||||
</view> | |||||
</view> | |||||
<view class="cli"> | |||||
<view class="labelBox"> | |||||
告警时间: | |||||
</view> | |||||
<view class="valueBox"> | |||||
2024-8-24 16:42:13 | |||||
</view> | |||||
</view> | |||||
<view class="cli"> | |||||
<view class="labelBox"> | |||||
复核视频: | |||||
</view> | |||||
<view class="valueBox"> | |||||
<text style="color: #2388FF;" @click="seeVideo">查看视频</text> | |||||
<text>暂无数据</text> | |||||
</view> | |||||
</view> | |||||
<view class="cli2"> | |||||
<view class="labelBox"> | |||||
备注信息: | |||||
</view> | |||||
<view class="valueBox"> | |||||
11111111111111111111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa撒大大飒飒水水水水水水顶顶顶顶顶反对 | |||||
</view> | |||||
</view> | |||||
<view class="cli2"> | |||||
<view class="labelBox"> | |||||
处理意见: | |||||
</view> | |||||
<view class="valueBox"> | |||||
11111111111111111111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa撒大大飒飒水水水水水水顶顶顶顶顶反对 | |||||
</view> | |||||
</view> | |||||
<u-popup :show="showVideo" :closeable="true" @close="close" @open="open" mode="center"> | |||||
<!-- <view class=""> | |||||
视频 | |||||
</view> --> | |||||
<view class="poupBox"> | |||||
<view style="width: 750rpx;height: 400rpx;"> | |||||
<DomVideoPlayer ref="domVideoPlayer" object-fit='contain' :controls="controls" :autoplay="autoplay" | |||||
:loop="loop" :src="src" :playback-rate="playbackRate" :is-loading="isLoading" @play="onPlay" | |||||
@pause="onPause" @ended="onEnded" @durationchange="onDurationChange" @timeupdate="onTimeUpdate" | |||||
@ratechange="onRateChange" @fullscreenchange="onFullscreenChange" /> | |||||
</view> | |||||
</view> | |||||
</u-popup> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
import DomVideoPlayer from '@/components/DomVideoPlayer/DomVideoPlayer.vue' | |||||
// 将xx秒转为 xx:xx 分秒格式 | |||||
const formatSec2Time = (time) => { | |||||
const min = Math.floor(time / 60) | |||||
const sec = Math.floor(time % 60) | |||||
return `${min}:${sec < 10 ? '0' + sec : sec}` | |||||
} | |||||
export default { | |||||
components: { | |||||
DomVideoPlayer | |||||
}, | |||||
data() { | |||||
return { | |||||
value1: '', | |||||
showVideo: false, | |||||
// 视频参数 | |||||
src: '', | |||||
// src: 'http://deepvision.oss-cn-zhangjiakou.aliyuncs.com/acp/quanjiang/DEMO00001/20240708/video/wander/SXT001__quanjiang__DEMO00001_video_wm_1720400435638.mp4?Expires=1724745909&OSSAccessKeyId=STS.NV49VEGSbWMNi7Wp4e76VrWKk&Signature=wXTdiWQHGNp%2FtbtezUBmD%2Fziy1E%3D&security-token=CAIS0wN1q6Ft5B2yfSjIr5WBcuzxqoxD4I%2BlaxHmlDQwO7l6nZLgiTz2IHFMf3huCeodsv8%2BlGxS5%2FgelrpqVpZDR03Na8RHwrly1lv5O9KY4zIJb0D10s%2FLI3OaLjKm9hi7AYygPgK0GJqEb1TDiVUto9%2FTfimjWFqIKICAjYUdAP0cQgi%2Fa0gwZrJRPRAwh8IGEnHTOP2xUHvtmXGCNFd0nQB%2BhGhjk7TdpPeR8R3Dllb35%2FYIroDqWPieYtJrIY10XqWBvqx%2FfbGT1zVLuVoYtvV6gaFc5zbcv9abRFVf4hiCP6%2Ff6MBuNw5%2Fae94efZNp%2BOukuZj6K6B1db7xhtVI%2BBOUiPZA4mr2IzdBeqvNNcwc7m8F1no9YjXbsGs9EEGGStLaVgVI4F8dyAhWEd9FWjgR%2FX5qAyQUGCKULOY1aw6651xwmjz8MCCT1r1GOTBindGasVnMxh5Z0JMjDK9aNkKfgFUbVJ8BrGTCIh%2FYx0bsq7yowDIEyp71TRMo%2Bbu%2FDBhIifKpO4VN7AxMup1DPwu2wNCxKRpnrU0rgxd8uAx9DyyfH1x3TObqd7jjqzaKs3NYdtswV4BUlvK5CGWEjhzQEO8mJtNIDT39ax%2Bf3elrfsIeBqAAaamZEcVMZBN29tT2k9jMRQfJjNJzZRtx5Z4sYbOwDoRAq%2F4qEv07jBx5PUAAB3q9IqDapPoeUw8Yccvlo9q5VG8AsY%2BZkidTAw%2B7s7%2BTKuJC93tJfdSUYdycPZ%2BZneA%2BlZqpdvfhTtZCteGsdnoQU4H7x%2B9ph9K%2Bg3HGMQrtuFdIAA%3D', | |||||
playing: false, | |||||
loop: false, | |||||
controls: true, | |||||
autoplay: false, | |||||
isLoading: true, | |||||
playbackRate: 1, | |||||
currentTime: 0, | |||||
duration: 0, | |||||
} | |||||
}, | |||||
computed: { | |||||
// 播放进度 | |||||
// progress() { | |||||
// const percent = this.currentTime / this.duration * 100 | |||||
// return percent.toFixed(2) + '%' | |||||
// }, | |||||
// // 显示当前时间 | |||||
// showPlayTime() { | |||||
// const curr = formatSec2Time(this.currentTime) | |||||
// const dur = formatSec2Time(this.duration) | |||||
// return `${curr} / ${dur}` | |||||
// }, | |||||
}, | |||||
methods: { | |||||
seeVideo() { | |||||
this.showVideo = true; | |||||
}, | |||||
open() { | |||||
// console.log('open'); | |||||
setTimeout(() => { | |||||
this.src = | |||||
'http://deepvision.oss-cn-zhangjiakou.aliyuncs.com/acp/quanjiang/DEMO00001/20240708/video/wander/SXT001__quanjiang__DEMO00001_video_wm_1720400435638.mp4?Expires=1724748181&OSSAccessKeyId=STS.NTwCzwCtwDDYeE7RAhHue5mDb&Signature=qY%2F82lk1K9VJEX95ImeNH9wMHiw%3D&security-token=CAIS0wN1q6Ft5B2yfSjIr5fCCMDDrqtW84ayZ2OGtkE9RPpJ2qjvgDz2IHFMf3huCeodsv8%2BlGxS5%2FgelrpqVpZDR03Na8RHwrly1lv5O9KY4z1YIkL10s%2FLI3OaLjKm9hi7AYygPgK0GJqEb1TDiVUto9%2FTfimjWFqIKICAjYUdAP0cQgi%2Fa0gwZrJRPRAwh8IGEnHTOP2xUHvtmXGCNFd0nQB%2BhGhjk7TdpPeR8R3Dllb35%2FYIroDqWPieYtJrIY10XqWBvqx%2FfbGT1zVLuVoYtvV6gaFc5zbcv9abRFVf4hiCP6%2Ff6MBuNw5%2Fae94efZNp%2BOukuZj6K6B1db7xhtVI%2BBOUiPZA4mr2IzdBeqvNNcwc7m8F1no9YjXbsGs9EEGGStLaVgVI4F8dyAhWEd9FWjgR%2FX5qAyQUGCKULOY1aw6651xwmjz8MCCT1r1GOTBindGasVnMxh5Z0JMjDK9aNkKfgFUbVJ8BrGTCIh%2FYx0bsq7yowDIEyp71TRMo%2Bbu%2FDBhIifKpO4VN7AxMup1DPwu2wNCxKQmwS5Se2k%2BwM10kxsnMbhsSH5O0sXx5M%2B5TxBoZB5p9PtUj15fgYQDR12uT0nToulHQz7%2BX6zfLqvSrfsIeBqAAUdgBEBn%2BksEpfpynILn8V8z3O5GaZcm3NmplGe%2F2XtD9%2FbnSWWTEzR1JJ45DnANEEIGzfjd6UvxpIcrk5Ggr0I52UqVdGUhcovTegZXYeBMsXYze8OLsu0UOhtpHsy8nCCJzpNnrwUBZOfUdZtwsCYHC4Bs8BRQ9JORs4ECvUnyIAA%3D' | |||||
}, 3000) | |||||
}, | |||||
close() { | |||||
this.showVideo = false; | |||||
// console.log('close'); | |||||
}, | |||||
// 播放 - 事件 | |||||
onPlay() { | |||||
console.log('onPlay') | |||||
this.playing = true | |||||
}, | |||||
// 暂停 - 事件 | |||||
onPause() { | |||||
console.log('onPause') | |||||
this.playing = false | |||||
}, | |||||
// 播放完毕 - 事件 | |||||
onEnded() { | |||||
console.log('onEnded') | |||||
this.playing = false | |||||
}, | |||||
// 总时长变化 - 事件 | |||||
onDurationChange(e) { | |||||
console.log('onDurationChange', e) | |||||
this.duration = e | |||||
}, | |||||
// 播放时间更新 - 事件 | |||||
onTimeUpdate(e) { | |||||
// console.log('onTimeUpdate', e) | |||||
this.currentTime = e | |||||
}, | |||||
// 倍速变化 - 事件 | |||||
onRateChange(e) { | |||||
console.log('onRateChange', e) | |||||
this.playbackRate = e | |||||
}, | |||||
// 进入/退出全屏 - 事件 | |||||
onFullscreenChange(e) { | |||||
console.log('onFullScreenChange', e) | |||||
}, | |||||
// // 切换播放/暂停 - 函数 | |||||
// doPlaying() { | |||||
// const domVideoPlayer = this.$refs.domVideoPlayer | |||||
// if (domVideoPlayer.playing) { | |||||
// this.doPause() | |||||
// } else { | |||||
// this.doPlay() | |||||
// } | |||||
// }, | |||||
// // 播放 - 函数 | |||||
// doPlay() { | |||||
// const domVideoPlayer = this.$refs.domVideoPlayer | |||||
// domVideoPlayer.play() | |||||
// }, | |||||
// // 暂停 - 函数 | |||||
// doPause() { | |||||
// const domVideoPlayer = this.$refs.domVideoPlayer | |||||
// domVideoPlayer.pause() | |||||
// }, | |||||
// // 快退/快进 - 函数 | |||||
// doSeek(time) { | |||||
// const domVideoPlayer = this.$refs.domVideoPlayer | |||||
// time += domVideoPlayer.currentTime | |||||
// domVideoPlayer.toSeek(time) | |||||
// }, | |||||
// // 全屏播放 - 函数 | |||||
// doFullScreen() { | |||||
// const domVideoPlayer = this.$refs.domVideoPlayer | |||||
// domVideoPlayer.fullScreen() | |||||
// }, | |||||
// // 移除视频 - 函数 | |||||
// doRemove() { | |||||
// this.src = '' | |||||
// const domVideoPlayer = this.$refs.domVideoPlayer | |||||
// domVideoPlayer.remove() | |||||
// }, | |||||
// // 更换src - 函数 | |||||
// doUpdateSrc() { | |||||
// this.src = 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/create-schema2code-video.mp4' | |||||
// }, | |||||
// doUpdateSrcToSeek() { | |||||
// // 切换视频 | |||||
// this.src = 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/create-schema2code-video.mp4' | |||||
// setTimeout(() => { | |||||
// const domVideoPlayer = this.$refs.domVideoPlayer | |||||
// // 视频加载完后,延迟调用toSeek()方法,跳转到第60s位置 | |||||
// domVideoPlayer.toSeek(60, true) | |||||
// }, 100) | |||||
// }, | |||||
// // 切换倍速 - 函数 | |||||
// switchRate() { | |||||
// this.playbackRate = this.playbackRate === 1 ? 2 : 1 | |||||
// }, | |||||
// // 切换视频控制栏 - 函数 | |||||
// switchControls() { | |||||
// this.controls = !this.controls | |||||
// }, | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
.warningDetail { | |||||
height: 100%; | |||||
background: #fff; | |||||
.title { | |||||
font-size: 30rpx; | |||||
} | |||||
.cli { | |||||
font-size: 30rpx; | |||||
padding: 20rpx 30rpx; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
.labelBox { | |||||
color: #333333; | |||||
} | |||||
.valueBox { | |||||
color: #333333; | |||||
font-weight: 700; | |||||
} | |||||
} | |||||
.cli2 { | |||||
font-size: 30rpx; | |||||
padding: 20rpx 30rpx; | |||||
.labelBox { | |||||
color: #333333; | |||||
} | |||||
.valueBox { | |||||
margin-top: 20rpx; | |||||
color: #333333; | |||||
font-weight: 700; | |||||
min-height: 100rpx; | |||||
word-break: break-all; | |||||
} | |||||
} | |||||
.poupBox { | |||||
width: 100%; | |||||
padding: 80rpx 20rpx 20rpx 20rpx; | |||||
box-sizing: border-box; | |||||
} | |||||
} | |||||
</style> |
@@ -0,0 +1,78 @@ | |||||
<template> | |||||
<view class="handlingSuggestions"> | |||||
<view class="formBox"> | |||||
<u-form :model="form" ref="uForm" labelPosition="top" labelWidth="100"> | |||||
<u-form-item label="处理意见" prop="remark" required> | |||||
<u--textarea v-model="form.remark" placeholder="请输入处理意见"></u--textarea> | |||||
</u-form-item> | |||||
</u-form> | |||||
</view> | |||||
<view class="btn"> | |||||
<u-button shape="circle" type="primary" @click="submit">确定</u-button> | |||||
<u-button style="margin-top: 30rpx;" shape="circle" :plain="true" :hairline="true">取消</u-button> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
data() { | |||||
return { | |||||
form: { | |||||
remark: '', | |||||
}, | |||||
rules: { | |||||
remark: [{ | |||||
required: true, | |||||
message: '请输入处理意见', | |||||
// 可以单个或者同时写两个触发验证方式 | |||||
trigger: 'blur,change' | |||||
}] | |||||
} | |||||
} | |||||
}, | |||||
methods: { | |||||
submit() { | |||||
uni.navigateTo({ | |||||
url: '/pages/earlyWarning/processingResults' | |||||
}); | |||||
this.$refs.uForm.validate(valid => { | |||||
if (valid) { | |||||
console.log('验证通过'); | |||||
} else { | |||||
console.log('验证失败'); | |||||
} | |||||
}); | |||||
} | |||||
}, | |||||
onReady() { | |||||
this.$refs.uForm.setRules(this.rules); | |||||
}, | |||||
} | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
.handlingSuggestions { | |||||
height: 100%; | |||||
position: relative; | |||||
.formBox { | |||||
background: #fff; | |||||
padding: 20rpx 30rpx; | |||||
box-sizing: border-box; | |||||
} | |||||
.btn { | |||||
width: 100%; | |||||
position: absolute; | |||||
bottom: 50rpx; | |||||
padding: 20rpx 30rpx; | |||||
box-sizing: border-box; | |||||
.u-button--primary { | |||||
background: #2388FF; | |||||
} | |||||
} | |||||
} | |||||
</style> |
@@ -18,197 +18,27 @@ | |||||
</view> | </view> | ||||
</u-popup> | </u-popup> | ||||
</view> | </view> | ||||
<view class="contentBox" v-if="isActive == '1'"> | |||||
<view class="searchBox"> | |||||
<view class="searchLine"> | |||||
<view class="leftSearchBox"> | |||||
<view class="searchLabel"> | |||||
筛选条件: | |||||
</view> | |||||
<view class="searchValue"> | |||||
111111111111111111111111111111111111111111111111111111111111111111111111 | |||||
</view> | |||||
</view> | |||||
<view class="searchShow" @click="openSearch"> | |||||
<image v-show="isShowSearch==false" style="width:20px;height:20px;" | |||||
src="@/static/image/earlyWarning/screen.png" mode=""> | |||||
</image> | |||||
<image v-show="isShowSearch" style="width:20px;height:20px;" | |||||
src="@/static/image/earlyWarning/screenActive.png" mode=""> | |||||
</image> | |||||
</view> | |||||
</view> | |||||
<view @click="isShowSearch=false" class="searchDialog" v-if="isShowSearch"> | |||||
<view class="content" @click.stop="isSelect"> | |||||
<u-row justify="space-between" gutter="10"> | |||||
<u-col span="7"> | |||||
<view class="demo-layout" @click="toOpen"> | |||||
<view class="left-layout"> | |||||
<text>{{searchForm.alarmType}}</text> | |||||
</view> | |||||
<view class="right-layout"> | |||||
<image style="width: 30rpx;height:30rpx;" | |||||
src="@/static/image/earlyWarning/arrowRight.png" mode=""></image> | |||||
</view> | |||||
</view> | |||||
<!-- <jp-select-plus ref="selectPlus" :isShow="false" color="#2388FF" placeholder="请选择" | |||||
isSearch v-model="va3" :list="listc"></jp-select-plus> --> | |||||
</u-col> | |||||
<u-col span="5"> | |||||
<view class="demo-layout"> | |||||
<view class="left-layout"> | |||||
<text>{{searchForm.warnHand}}</text> | |||||
</view> | |||||
<view class="right-layout"> | |||||
<image style="width: 30rpx;height:30rpx;" | |||||
src="@/static/image/earlyWarning/arrowRight.png" mode=""></image> | |||||
</view> | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
<u-row style="margin-top:10px;" justify="space-between" gutter="10"> | |||||
<u-col span="12"> | |||||
<uni-datetime-picker v-model="searchForm.tick" type="datetimerange"> | |||||
<view class="demo-layout"> | |||||
<view class="startBox"> | |||||
{{searchForm.StartTick}} | |||||
</view> | |||||
<text>至</text> | |||||
<view class="endBox"> | |||||
{{searchForm.EndTick}} | |||||
</view> | |||||
<view class="timeIcon"> | |||||
<image style="width: 30rpx;height:30rpx;" | |||||
src="@/static/image/earlyWarning/calendar.png" mode=""></image> | |||||
</view> | |||||
</view> | |||||
</uni-datetime-picker> | |||||
<view class="contentBox"> | |||||
<warningInfo v-if="isActive == '1'"></warningInfo> | |||||
<inspectionCenter v-else></inspectionCenter> | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
<view class="btnBox"> | |||||
<view class="leftBtn"> | |||||
重置 | |||||
</view> | |||||
<view class="rightBtn"> | |||||
确认 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="tableBox"> | |||||
<u-empty marginTop="100rpx" :show="false" mode="warnList" text="暂无数据"></u-empty> | |||||
<u-list @scrolltolower="scrolltolower" style="height: calc(100% - 0rpx);"> | |||||
<u-list-item v-for="(item, index) in warnList" :key="index"> | |||||
<view class="liBox"> | |||||
<view class="topCard"> | |||||
<view class="pic"> | |||||
<image src="@/static/image/earlyWarning/warnBack.png" mode=""></image> | |||||
</view> | |||||
<view class="rightCard"> | |||||
<view class="firstCard"> | |||||
<view class="schoolName"> | |||||
学校名称学校名称学校名称学校名称 | |||||
</view> | |||||
<view class="statusBox" :class="[item.warnHand == 1?'handle':'nohandle']"> | |||||
{{item.warnHand == 1 ? '已处理' : '未处理'}} | |||||
</view> | |||||
</view> | |||||
<view class="secondCard"> | |||||
<image style="width: 30rpx;height: 30rpx;" | |||||
src="@/static/image/earlyWarning/warnType.png" mode=""></image> | |||||
<view class="txt"> | |||||
警告类型:周界入侵 | |||||
</view> | |||||
</view> | |||||
<view class="thirdCard"> | |||||
<image style="width: 30rpx;height: 30rpx;" | |||||
src="@/static/image/earlyWarning/warnVideo.png" mode=""></image> | |||||
<view class="txt"> | |||||
警告摄像头:厨房(良景) | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="midCard"> | |||||
<u-row> | |||||
<u-col span="6"> | |||||
<view class="midContent"> | |||||
姓名:杨云 | |||||
</view> | |||||
</u-col> | |||||
<u-col span="6"> | |||||
<view class="midContent"> | |||||
系部:安环部 | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
<u-row> | |||||
<u-col span="6"> | |||||
<view class="midContent"> | |||||
专业:环艺 | |||||
</view> | |||||
</u-col> | |||||
<u-col span="6"> | |||||
<view class="midContent"> | |||||
班级:第二班 | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
<u-row> | |||||
<u-col span="12"> | |||||
<view class="midContent"> | |||||
时间:2024-08-15 11:59:12 | |||||
</view> | |||||
</u-col> | |||||
</u-row> | |||||
</view> | |||||
<view class="btoCard"> | |||||
<view class="leftBox btoBox"> | |||||
<image src="@/static/image/earlyWarning/detail.png" mode=""></image> | |||||
<view class="txt"> | |||||
查看 | |||||
</view> | |||||
</view> | |||||
<view class="midBox btoBox"> | |||||
<image v-if="item.warnHand == 1" src="@/static/image/earlyWarning/handle.png" | |||||
mode=""></image> | |||||
<image v-if="item.warnHand == 0" | |||||
src="@/static/image/earlyWarning/handleDisabled.png" mode=""></image> | |||||
<view :class="[item.warnHand == 1?'txt':'disabled']"> | |||||
处理 | |||||
</view> | |||||
</view> | |||||
<view class="rightBox btoBox"> | |||||
<image src="@/static/image/earlyWarning/delete.png" mode=""></image> | |||||
<view class="txt"> | |||||
删除 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</u-list-item> | |||||
<u-loadmore :status="status" /> | |||||
</u-list> | |||||
</view> | |||||
</view> | |||||
</view> | </view> | ||||
</template> | </template> | ||||
<script> | <script> | ||||
import warningInfo from "./components/warningInfo.vue" | |||||
import inspectionCenter from "./components/inspectionCenter.vue" | |||||
export default { | export default { | ||||
components: { | |||||
warningInfo, | |||||
inspectionCenter | |||||
}, | |||||
data() { | data() { | ||||
return { | return { | ||||
searchForm: { | |||||
alarmType: '警告类型', | |||||
warnHand: '处理状态', | |||||
tick: [], | |||||
StartTick: '开始时间', | |||||
EndTick: '结束时间', | |||||
}, | |||||
showSelectModel: false, | showSelectModel: false, | ||||
modelObj: { | modelObj: { | ||||
name: '预警信息', | name: '预警信息', | ||||
@@ -226,102 +56,10 @@ | |||||
imgUrl: require(`@/static/image/earlyWarning/majorBack.png`) | imgUrl: require(`@/static/image/earlyWarning/majorBack.png`) | ||||
} | } | ||||
], | ], | ||||
isShowSearch: false, | |||||
warnList: [{ | |||||
warnHand: 0 | |||||
}, {}, {}, {}, {}, {}, {}, {}, {}, ], | |||||
isLoading: false, | |||||
status: 'loadmore', //loading正在加载 loadmore加载更多 nomore没有更多了 | |||||
listc: [{ | |||||
code: 1, | |||||
name: 'dasda' | |||||
}, { | |||||
code: 2, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 3, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 4, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 5, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 6, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 7, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 8, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 9, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 10, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 11, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 12, | |||||
name: 'dasda' | |||||
}, | |||||
{ | |||||
code: 13, | |||||
name: '你好' | |||||
} | |||||
] | |||||
} | |||||
}, | |||||
watch: { | |||||
"searchForm.tick"() { | |||||
console.log('日期时间:', this.searchForm.tick); | |||||
if(this.searchForm.tick && this.searchForm.tick.length>0) { | |||||
this.searchForm.StartTick = this.searchForm.tick[0] | |||||
this.searchForm.EndTick = this.searchForm.tick[1] | |||||
} | |||||
}, | |||||
}, | |||||
filters: { | |||||
// statusChange(val) { | |||||
// switch (val) { | |||||
// case 'todo': | |||||
// return '我的待办' | |||||
// break; | |||||
// case 'send': | |||||
// return '由我发起' | |||||
// break; | |||||
// case 'done': | |||||
// return '我的已办' | |||||
// break; | |||||
// default: | |||||
// } | |||||
// }, | |||||
}, | |||||
onLoad() { | |||||
// 隐藏导航栏 | |||||
this.loadmore() | |||||
} | |||||
}, | }, | ||||
methods: { | methods: { | ||||
toOpen() { | |||||
this.$refs.selectPlus.open() | |||||
}, | |||||
open() { | open() { | ||||
// console.log('open'); | // console.log('open'); | ||||
}, | }, | ||||
@@ -346,32 +84,7 @@ | |||||
// break; | // break; | ||||
// } | // } | ||||
}, | }, | ||||
// 打开筛选框 | |||||
openSearch() { | |||||
this.isShowSearch = !this.isShowSearch; | |||||
}, | |||||
isSelect() { | |||||
}, | |||||
scrolltolower() { | |||||
this.loadmore() | |||||
}, | |||||
loadmore() { | |||||
if (this.status != 'loadmore') return | |||||
this.status = 'loading' | |||||
setTimeout(() => { | |||||
for (let i = 0; i < 1; i++) { | |||||
this.warnList.push({}, {}) | |||||
} | |||||
// 获取到的总条数>=接口总条数 | |||||
if (this.warnList.length >= 14) { | |||||
this.status = 'nomore' | |||||
} else { | |||||
this.status = 'loadmore' | |||||
} | |||||
}, 2000) | |||||
} | |||||
} | } | ||||
} | } | ||||
</script> | </script> | ||||
@@ -430,261 +143,6 @@ | |||||
.contentBox { | .contentBox { | ||||
height: calc(100% - 375rpx); | height: calc(100% - 375rpx); | ||||
.searchBox { | |||||
// height: calc(100% - 360rpx); | |||||
position: relative; | |||||
.searchLine { | |||||
height: 88rpx; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
padding: 0 15px; | |||||
box-sizing: border-box; | |||||
background: #fff; | |||||
.leftSearchBox { | |||||
display: flex; | |||||
align-items: center; | |||||
width: calc(100% - 40px); | |||||
.searchLabel { | |||||
flex-shrink: 1; | |||||
color: #333333; | |||||
width: 80px; | |||||
} | |||||
.searchValue { | |||||
width: calc(100% - 60px); | |||||
margin-left: 10px; | |||||
color: #2388FF; | |||||
overflow: hidden; | |||||
word-wrap: break-word; | |||||
white-space: pre-wrap; | |||||
// font-size: 14px; | |||||
display: -webkit-box; | |||||
-webkit-box-orient: vertical; | |||||
-webkit-line-clamp: 1; | |||||
} | |||||
} | |||||
} | |||||
.searchDialog { | |||||
position: absolute; | |||||
z-index: 990; | |||||
top: 89rpx; | |||||
width: 100%; | |||||
height: calc(100vh - 375rpx - 100rpx); | |||||
font-size: 26rpx; | |||||
background: rgba(0, 0, 0, 0.2); | |||||
.content { | |||||
background: #FFFFFF; | |||||
padding: 15px; | |||||
box-sizing: border-box; | |||||
.demo-layout { | |||||
height: 80rpx; | |||||
border-radius: 8rpx; | |||||
background: #F5F5F5; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
padding: 0 10px; | |||||
box-sizing: border-box; | |||||
.left-layout { | |||||
color: #777777; | |||||
} | |||||
.right-layout {} | |||||
.startBox { | |||||
color: #777777; | |||||
} | |||||
text { | |||||
color: #777777; | |||||
} | |||||
.endBox { | |||||
color: #777777; | |||||
} | |||||
.timeIcon {} | |||||
} | |||||
} | |||||
.btnBox { | |||||
display: flex; | |||||
align-items: center; | |||||
margin-top: 15px; | |||||
.leftBtn { | |||||
width: 50%; | |||||
height: 74rpx; | |||||
line-height: 74rpx; | |||||
border: 1px solid #BABABA; | |||||
border-radius: 12rpx; | |||||
color: #333333; | |||||
text-align: center; | |||||
} | |||||
.rightBtn { | |||||
width: 50%; | |||||
height: 74rpx; | |||||
line-height: 74rpx; | |||||
border: 1px solid #2388FF; | |||||
border-radius: 12rpx; | |||||
color: #fff; | |||||
text-align: center; | |||||
background: #2388FF; | |||||
margin-left: 15rpx; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.tableBox { | |||||
height: 100%; | |||||
padding: 10px; | |||||
box-sizing: border-box; | |||||
// height: 600px; | |||||
padding-bottom: 50px; | |||||
.liBox { | |||||
background: #fff; | |||||
padding: 20px 15px; | |||||
box-sizing: border-box; | |||||
border-radius: 20px; | |||||
margin-bottom: 10px; | |||||
.topCard { | |||||
display: flex; | |||||
.pic { | |||||
image { | |||||
width: 160rpx; | |||||
height: 160rpx; | |||||
border-radius: 4px; | |||||
} | |||||
} | |||||
.rightCard { | |||||
margin-left: 20rpx; | |||||
.firstCard { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
margin-bottom: 20rpx; | |||||
.schoolName { | |||||
font-size: 32rpx; | |||||
color: #333333; | |||||
overflow: hidden; | |||||
word-wrap: break-word; | |||||
white-space: pre-wrap; | |||||
// font-size: 14px; | |||||
display: -webkit-box; | |||||
-webkit-box-orient: vertical; | |||||
-webkit-line-clamp: 1; | |||||
} | |||||
.statusBox { | |||||
width: 140rpx; | |||||
flex-shrink: 1; | |||||
text-align: center; | |||||
height: 50rpx; | |||||
line-height: 50rpx; | |||||
font-size: 28rpx; | |||||
border-radius: 8rpx; | |||||
color: #fff; | |||||
} | |||||
.handle { | |||||
background: rgba(15, 175, 118, 0.1); | |||||
color: #0FAF76; | |||||
} | |||||
.nohandle { | |||||
background: rgba(239, 45, 45, 0.1); | |||||
color: rgba(239, 45, 45, 1); | |||||
} | |||||
} | |||||
.secondCard, | |||||
.thirdCard { | |||||
display: flex; | |||||
align-items: center; | |||||
margin-top: 18rpx; | |||||
.txt { | |||||
font-size: 28rpx; | |||||
margin-left: 10rpx; | |||||
color: #333333; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.midCard { | |||||
font-size: 28rpx; | |||||
.midContent { | |||||
margin-top: 18rpx; | |||||
} | |||||
} | |||||
.btoCard { | |||||
border-top: 1px solid rgba(0, 0, 0, 0.1); | |||||
margin-top: 30rpx; | |||||
padding: 18px 0 0 0; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
.btoBox { | |||||
width: 33.3%; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
position: relative; | |||||
image { | |||||
width: 40rpx; | |||||
height: 40rpx; | |||||
margin-right: 15rpx; | |||||
} | |||||
} | |||||
.btoBox:not(:last-child)::before { | |||||
content: ''; | |||||
display: block; | |||||
width: 1px; | |||||
height: 100%; | |||||
background: rgba(0, 0, 0, 0.1); | |||||
position: absolute; | |||||
right: 0px; | |||||
} | |||||
.midBox { | |||||
.txt { | |||||
color: #333333; | |||||
} | |||||
.disabled { | |||||
color: #777777; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | } | ||||
} | } | ||||
</style> | </style> |
@@ -0,0 +1,64 @@ | |||||
<template> | |||||
<view class="processingResults"> | |||||
<view class="tips" v-if="callBackType == 'success'"> | |||||
<image class="auto" src="@/static/image/earlyWarning/success.png" mode=""></image> | |||||
<view class="title auto"> | |||||
提交成功 | |||||
</view> | |||||
<u-button class="auto" style="width: 60%" shape="circle" type="primary" @click="back">知道了</u-button> | |||||
</view> | |||||
<view class="tips" v-else> | |||||
<image class="auto" src="@/static/image/earlyWarning/falid.png" mode=""></image> | |||||
<view class="title auto"> | |||||
提交失败 | |||||
</view> | |||||
<u-button class="auto" style="width: 60%" shape="circle" type="primary" @click="back">重新提交</u-button> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
data() { | |||||
return { | |||||
callBackType: 'success' | |||||
} | |||||
}, | |||||
methods: { | |||||
back() { | |||||
uni.switchTab({ | |||||
url: '/pages/earlyWarning/index' | |||||
}); | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
.processingResults { | |||||
width: 100%; | |||||
height: 100%; | |||||
background: #fff; | |||||
.tips { | |||||
width: 100%; | |||||
text-align: center; | |||||
margin-top: 200rpx; | |||||
image { | |||||
width: 300rpx; | |||||
height: 268rpx; | |||||
margin: 0 auto; | |||||
} | |||||
.auto { | |||||
margin: 0 auto; | |||||
} | |||||
.title { | |||||
text-align: center; | |||||
color: #333333; | |||||
font-weight: 700; | |||||
margin: 20rpx 0 120rpx 0; | |||||
} | |||||
} | |||||
} | |||||
</style> |