Compare commits
22 Commits
dev_xiao
...
dev_newtes
Author | SHA1 | Date | |
---|---|---|---|
d0a928eb40 | |||
3401a3b254 | |||
9f7c6206ca | |||
|
ab38ee029a | ||
|
dbf412713b | ||
|
67ba78f268 | ||
|
d63a6c42b3 | ||
babc40d36a | |||
409089e2ca | |||
e08386333a | |||
b19feb5a44 | |||
|
0865af247a | ||
|
8d32269ee0 | ||
|
b4569f8ccc | ||
9e38ea85c8 | |||
|
3be4b185d6 | ||
5d77eebc67 | |||
8868915944 | |||
2d98b2d8b8 | |||
bee7dc6f03 | |||
1046978877 | |||
bc981fc7a9 |
@ -3,12 +3,47 @@ using System.ComponentModel;
|
||||
using System.Drawing.Imaging;
|
||||
using AntdUI;
|
||||
using DH.Commons.Enums;
|
||||
using HalconDotNet;
|
||||
using OpenCvSharp;
|
||||
|
||||
namespace DH.Commons.Base
|
||||
{
|
||||
public class MatSet
|
||||
{
|
||||
public DateTime ImageTime { get; set; } = DateTime.Now;
|
||||
|
||||
private string id = "";
|
||||
public string Id
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(id))
|
||||
{
|
||||
id = ImageTime.ToString("HHmmssfff");
|
||||
}
|
||||
return id;
|
||||
}
|
||||
set
|
||||
{
|
||||
id = value;
|
||||
}
|
||||
}
|
||||
public string CameraId { get; set; }
|
||||
public Mat _mat { get; set; } = null;
|
||||
|
||||
public ImageFormat _imageFormat { get; set; } = ImageFormat.Jpeg;
|
||||
public virtual void Dispose()
|
||||
{
|
||||
_mat?.Dispose();
|
||||
_mat = null;
|
||||
|
||||
}
|
||||
}
|
||||
public class CameraBase : NotifyProperty
|
||||
{
|
||||
|
||||
// public LoggerHelper LoggerHelper { get; set; } = new LoggerHelper();
|
||||
|
||||
// 私有字段 + 带通知的属性(与DetectionLabel风格一致)
|
||||
private bool _isEnabled = false;
|
||||
private bool _isallPicEnabled = true;//默认全画幅
|
||||
|
@ -9,6 +9,7 @@ using AntdUI;
|
||||
using static DH.Commons.Enums.EnumHelper;
|
||||
using System.Text.Json.Serialization;
|
||||
using DH.Commons.Enums;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace DH.Commons.Base
|
||||
{
|
||||
@ -104,20 +105,20 @@ namespace DH.Commons.Base
|
||||
/// </summary>
|
||||
public class DetectionResultDetail
|
||||
{
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
|
||||
public string LabelBGR { get; set; }//识别到对象的标签BGR
|
||||
|
||||
|
||||
|
||||
public int LabelNo { get; set; } // 识别到对象的标签索引
|
||||
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
|
||||
public string LabelName { get; set; }//识别到对象的标签名称
|
||||
|
||||
|
||||
public double Score { get; set; }//识别目标结果的可能性、得分
|
||||
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
|
||||
public string LabelDisplay { get; set; }//识别到对象的 显示信息
|
||||
|
||||
|
||||
@ -138,10 +139,10 @@ namespace DH.Commons.Base
|
||||
public class MLResult
|
||||
{
|
||||
public bool IsSuccess = false;
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
|
||||
public string ResultMessage;
|
||||
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
|
||||
public Bitmap ResultMap;
|
||||
|
||||
public List<DetectionResultDetail> ResultDetails = new List<DetectionResultDetail>();
|
||||
@ -165,8 +166,7 @@ namespace DH.Commons.Base
|
||||
public bool IsGPU;
|
||||
public int GPUId;
|
||||
public float Score_thre;
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
|
||||
public MLInit(string modelFile, bool isGPU, int gpuId, float score_thre)
|
||||
|
||||
|
||||
@ -191,18 +191,32 @@ namespace DH.Commons.Base
|
||||
}
|
||||
public class DetectStationResult
|
||||
{
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
public DateTime ImageTime { get; set; } = DateTime.Now;
|
||||
|
||||
private string id = "";
|
||||
public string Id
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(id))
|
||||
{
|
||||
id = ImageTime.ToString("HHmmssfff");
|
||||
}
|
||||
return id;
|
||||
}
|
||||
set
|
||||
{
|
||||
id = value;
|
||||
}
|
||||
}
|
||||
public string Pid { get; set; }
|
||||
|
||||
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
public string TempPid { get; set; }
|
||||
public string TempPid { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 检测工位名称
|
||||
/// </summary>
|
||||
#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
|
||||
public string DetectName { get; set; }
|
||||
|
||||
|
||||
@ -212,8 +226,11 @@ namespace DH.Commons.Base
|
||||
/// </summary>
|
||||
public List<DetectionResultDetail> DetectDetails = new List<DetectionResultDetail>();
|
||||
public List<IShapeElement> DetectionResultShapes = new List<IShapeElement>();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 视觉测量结果集合
|
||||
/// </summary>
|
||||
|
||||
public List<IndexedSpec> realSpecs { get; set; } = new List<IndexedSpec>();
|
||||
/// <summary>
|
||||
/// 工位检测结果
|
||||
/// </summary>
|
||||
@ -238,35 +255,24 @@ namespace DH.Commons.Base
|
||||
/// 预处理阶段已经NG
|
||||
/// </summary>
|
||||
public bool IsPreTreatNG { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 检测原图
|
||||
/// </summary>
|
||||
public Bitmap DetectionOriginImage { get; set; }
|
||||
/// <summary>
|
||||
/// 目标检测NG
|
||||
/// </summary>
|
||||
public bool IsObjectDetectNG { get; set; } = false;
|
||||
|
||||
public ImageFormat ImageFormat { get; set; } = ImageFormat.Jpeg;
|
||||
public DateTime EndTime { get; set; }
|
||||
|
||||
public string ImageSaveDirectory { get; set; }
|
||||
public int StationDetectElapsed { get; set; }
|
||||
public static string NormalizeAndClean(string input)
|
||||
{
|
||||
#pragma warning disable CS8603 // 可能返回 null 引用。
|
||||
if (input == null) return null;
|
||||
#pragma warning restore CS8603 // 可能返回 null 引用。
|
||||
public bool SaveOKOriginal = false;
|
||||
public bool SaveNGOriginal = false;
|
||||
public bool SaveOKDetect = false;
|
||||
public bool SaveNGDetect = false;
|
||||
|
||||
// Step 1: 标准化字符编码为 Form C (规范组合)
|
||||
string normalizedString = input.Normalize(NormalizationForm.FormC);
|
||||
|
||||
// Step 2: 移除所有空白字符,包括制表符和换行符
|
||||
string withoutWhitespace = Regex.Replace(normalizedString, @"\s+", "");
|
||||
|
||||
// Step 3: 移除控制字符 (Unicode 控制字符,范围 \u0000 - \u001F 和 \u007F)
|
||||
string withoutControlChars = Regex.Replace(withoutWhitespace, @"[\u0000-\u001F\u007F]+", "");
|
||||
|
||||
// Step 4: 移除特殊的不可见字符(如零宽度空格等)
|
||||
string cleanedString = Regex.Replace(withoutControlChars, @"[\u200B\u200C\u200D\uFEFF]+", "");
|
||||
|
||||
return cleanedString;
|
||||
}
|
||||
|
||||
}
|
||||
public class RelatedCamera : NotifyProperty
|
||||
@ -503,7 +509,7 @@ namespace DH.Commons.Base
|
||||
private AntList<SizeTreatParam> _sizeTreatParamList = new AntList<SizeTreatParam>();
|
||||
|
||||
private CustomizedPoint _showLocation = new CustomizedPoint();
|
||||
|
||||
private string _imageSaveDirectory="D://Images";
|
||||
private bool _saveOKOriginal = false;
|
||||
private bool _saveNGOriginal = false;
|
||||
private bool _saveOKDetect = false;
|
||||
@ -621,7 +627,19 @@ namespace DH.Commons.Base
|
||||
OnPropertyChanged(nameof(IsAddStation));
|
||||
}
|
||||
}
|
||||
|
||||
[Category("图片保存")]
|
||||
[DisplayName("图片保存文件夹")]
|
||||
[Description("图片保存文件夹")]
|
||||
public virtual string ImageSaveDirectory
|
||||
{
|
||||
get => _imageSaveDirectory;
|
||||
set
|
||||
{
|
||||
if (_imageSaveDirectory == value) return;
|
||||
_imageSaveDirectory = value;
|
||||
OnPropertyChanged(nameof(ImageSaveDirectory));
|
||||
}
|
||||
}
|
||||
[Category("1.预处理(视觉算子)")]
|
||||
[DisplayName("预处理-算法文件路径")]
|
||||
public string HalconAlgorithemPath_Pre
|
||||
|
389
DH.Commons/Base/DeviceBase.cs
Normal file
@ -0,0 +1,389 @@
|
||||
|
||||
using DH.Commons.Enums;
|
||||
using OpenCvSharp.Internal;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using static DH.Commons.Enums.EnumHelper;
|
||||
using Timer = System.Threading.Timer;
|
||||
|
||||
namespace DH.Commons.Base
|
||||
{
|
||||
public abstract class DeviceBase : IDisposable
|
||||
{
|
||||
#region Event
|
||||
[JsonIgnore]
|
||||
[Browsable(false)]
|
||||
public Action<DateTime, Exception> OnExceptionOccured { get; set; }
|
||||
//public event Action<DateTime, LogLevel, string> OnLog;
|
||||
public event Action<LogMsg> OnLog;
|
||||
// public event Action<IDevice, DeviceState> OnDeviceStateChanged;
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
#endregion
|
||||
|
||||
#region field
|
||||
int RetryTime = 3;
|
||||
/// <summary>
|
||||
/// 和设备暂停状态关联的信号量
|
||||
/// </summary>
|
||||
private readonly ManualResetEvent pauseHandle = new ManualResetEvent(true);
|
||||
readonly Timer stateChangedTimer;
|
||||
#endregion
|
||||
|
||||
#region Property
|
||||
#region State
|
||||
private EnumHelper.DeviceState _currentStateToBe = EnumHelper.DeviceState.DSUninit;
|
||||
/// <summary>
|
||||
/// 当前设备状态
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
internal EnumHelper.DeviceState CurrentStateToBe
|
||||
{
|
||||
get
|
||||
{
|
||||
return _currentStateToBe;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value != _currentStateToBe)
|
||||
{
|
||||
var initialState = _currentStateToBe;
|
||||
_currentStateToBe = value;
|
||||
|
||||
if (_currentStateToBe != EnumHelper.DeviceState.DSExcept)
|
||||
{
|
||||
// OnStateChanged(initialState);
|
||||
}
|
||||
else
|
||||
{
|
||||
stateChangedTimer.Change(Timeout.Infinite, Timeout.Infinite);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//private EnumHelper.DeviceState initialState = EnumHelper.DeviceState.DSUninit;
|
||||
private EnumHelper.DeviceState _currentState = EnumHelper.DeviceState.DSUninit;
|
||||
public EnumHelper.DeviceState CurrentState
|
||||
{
|
||||
get
|
||||
{
|
||||
return _currentState;
|
||||
}
|
||||
set
|
||||
{
|
||||
_currentState = value;
|
||||
|
||||
if (value != EnumHelper.DeviceState.TBD)
|
||||
{
|
||||
// OnDeviceStateChanged?.Invoke(this, _currentState);
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("CurrentState"));
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// initialState = _currentState;
|
||||
//}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 设备标识符 从数据库获取
|
||||
/// </summary>
|
||||
public string Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 设备名称 从数据库获取
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
//private IInitialConfig initialConfig = null;
|
||||
///// <summary>
|
||||
///// 设备初始化配置 从数据库获取
|
||||
///// </summary>
|
||||
//public virtual IInitialConfig InitialConfig
|
||||
//{
|
||||
// get => initialConfig;
|
||||
// set
|
||||
// {
|
||||
// initialConfig = value;
|
||||
// Id = initialConfig.Id;
|
||||
// Name = initialConfig.Name;
|
||||
|
||||
// LoggerHelper.LogPath = initialConfig.LogPath;
|
||||
// LoggerHelper.LogPrefix = initialConfig.Name;
|
||||
// }
|
||||
//}
|
||||
#endregion
|
||||
|
||||
#region 构造函数
|
||||
public DeviceBase()
|
||||
{
|
||||
RegisterFileWriterException();
|
||||
// stateChangedTimer = new Timer(new TimerCallback(CheckDeviceOpTimeOut), null, Timeout.Infinite, Timeout.Infinite);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 设备抽象方法
|
||||
protected virtual void Init()
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Information, $"{Name}初始化完成");
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected virtual void Start()
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Information, $"{Name}启动");
|
||||
}
|
||||
|
||||
protected virtual void Stop()
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Information, $"{Name}停止");
|
||||
}
|
||||
|
||||
//public abstract void AttachToProcess(IProcess process);
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 常用操作封装方法
|
||||
/// </summary>
|
||||
/// <param name="opConfig"></param>
|
||||
/// <returns></returns>
|
||||
//public virtual ResponseMessage RunWrap(IOperationConfig opConfig)
|
||||
//{
|
||||
// ResponseMessage msg = new ResponseMessage();
|
||||
// msg.Message = "设备基类默认操作";
|
||||
// return msg;
|
||||
//}
|
||||
|
||||
#region 状态切换
|
||||
//[DeviceExceptionAspect]
|
||||
//public void StateChange(EnumHelper.DeviceState stateToBe)
|
||||
//{
|
||||
// if (CurrentState == stateToBe)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// if (!stateToBe.CheckPreStateValid((int)CurrentStateToBe))
|
||||
// {
|
||||
// string currentStateStr = CurrentStateToBe.GetEnumDescription();
|
||||
// string stateToBeStr = stateToBe.GetEnumDescription();
|
||||
// throw new ProcessException($"{InitialConfig.Name}设备的当前状态为{currentStateStr},无法切换至{stateToBeStr}");
|
||||
// }
|
||||
|
||||
// CurrentState = EnumHelper.DeviceState.TBD;
|
||||
// CurrentStateToBe = stateToBe;
|
||||
//}
|
||||
|
||||
//[DeviceExceptionAspect]
|
||||
//private void OnStateChanged(EnumHelper.DeviceState initialState)
|
||||
//{
|
||||
// try
|
||||
// {
|
||||
// if (CurrentStateToBe != EnumHelper.DeviceState.DSExcept)
|
||||
// {
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (CurrentState == EnumHelper.DeviceState.DSExcept)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// throw new ProcessException($"{InitialConfig.Name}设备操作超时");
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (RetryTime >= 0)
|
||||
// {
|
||||
// if (initialState == CurrentStateToBe)
|
||||
// {
|
||||
// CurrentState = CurrentStateToBe;
|
||||
// return;
|
||||
// }
|
||||
|
||||
// #region 状态切换操作
|
||||
// switch (CurrentStateToBe)
|
||||
// {
|
||||
// case EnumHelper.DeviceState.DSInit:
|
||||
// if (initialState == EnumHelper.DeviceState.DSOpen)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Init();
|
||||
// }
|
||||
// break;
|
||||
// case EnumHelper.DeviceState.DSOpen:
|
||||
// if (initialState == EnumHelper.DeviceState.DSInit)
|
||||
// {
|
||||
// Start();
|
||||
// }
|
||||
// else if (initialState == EnumHelper.DeviceState.DSPause)
|
||||
// {
|
||||
// Resume();
|
||||
// pauseHandle.Set();
|
||||
// }
|
||||
// break;
|
||||
// case EnumHelper.DeviceState.DSPause:
|
||||
// pauseHandle.Reset();
|
||||
// Pause();
|
||||
// break;
|
||||
// case EnumHelper.DeviceState.DSClose:
|
||||
// if (initialState != DeviceState.DSUninit)
|
||||
// {
|
||||
// Stop();
|
||||
// }
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
|
||||
// RetryTime = 3;
|
||||
// CurrentState = CurrentStateToBe;
|
||||
// #endregion
|
||||
// }
|
||||
|
||||
// stateChangedTimer.Change(Timeout.Infinite, Timeout.Infinite);
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// RetryTime--;
|
||||
// if (RetryTime > 0)
|
||||
// {
|
||||
// OnStateChanged(initialState);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (CurrentState != EnumHelper.DeviceState.DSExcept)
|
||||
// {
|
||||
// RetryTime = 3;
|
||||
// throw new ProcessException($"设备{InitialConfig.Name}的{CurrentStateToBe.GetEnumDescription()}操作重复3次失败", ex, ExceptionLevel.Warning);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
//private void CheckDeviceOpTimeOut(object state)
|
||||
//{
|
||||
// stateChangedTimer?.Change(Timeout.Infinite, Timeout.Infinite);
|
||||
|
||||
// if (CurrentState != EnumHelper.DeviceState.DSExcept)
|
||||
// {
|
||||
// StateChange(EnumHelper.DeviceState.DSExcept);
|
||||
// }
|
||||
//}
|
||||
#endregion
|
||||
|
||||
#region 日志处理
|
||||
private void RegisterFileWriterException()
|
||||
{
|
||||
LoggerHelper.OnLogExceptionRaised -= LoggerHelper_OnLogExceptionRaised;
|
||||
// CSVHelper.OnCSVExceptionRaised -= LoggerHelper_OnLogExceptionRaised;
|
||||
|
||||
LoggerHelper.OnLogExceptionRaised += LoggerHelper_OnLogExceptionRaised;
|
||||
// CSVHelper.OnCSVExceptionRaised += LoggerHelper_OnLogExceptionRaised;
|
||||
}
|
||||
// public CSVHelper CSVHelper { get; set; } = new CSVHelper();
|
||||
|
||||
public LoggerHelper LoggerHelper { get; set; } = new LoggerHelper();
|
||||
|
||||
public virtual void LogAsync(LogMsg msg)
|
||||
{
|
||||
msg.MsgSource = Name;
|
||||
msg.ThreadId = Thread.CurrentThread.ManagedThreadId;
|
||||
|
||||
//OnLog?.BeginInvoke(msg, null, null);
|
||||
OnLog?.Invoke(msg);
|
||||
|
||||
//if (InitialConfig.IsEnableLog)
|
||||
//{
|
||||
// LoggerHelper.LogAsync(msg);
|
||||
//}
|
||||
}
|
||||
|
||||
public virtual void LogAsync(DateTime dt, LogLevel logLevel, string msg)
|
||||
{
|
||||
LogAsync(new LogMsg(dt, logLevel, msg));
|
||||
}
|
||||
private void LoggerHelper_OnLogExceptionRaised(DateTime dt, string msg)
|
||||
{
|
||||
OnLog?.Invoke(new LogMsg(dt, LogLevel.Error, msg));
|
||||
}
|
||||
/// <summary>
|
||||
/// CSV异步数据输出
|
||||
/// </summary>
|
||||
/// <param name="csvFile">CSV输出文件的文件全路径</param>
|
||||
/// <param name="csvData">CSV输出数据</param>
|
||||
/// <param name="csvHead">CSV文件表头</param>
|
||||
public virtual void CSVRecordAsync(string csvFile, string csvData, string csvHead = "")
|
||||
{
|
||||
// CSVHelper.CSVOutputAsync(csvFile, csvData, csvHead);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 报警记录
|
||||
//object _alarmLock = new object();
|
||||
//protected virtual async void SaveAlarmCSVAsync(DateTime now, string deviceName, IWarningSet ws)
|
||||
//{
|
||||
// await Task.Run(() =>
|
||||
// {
|
||||
// LogAsync(now, LogLevel.Warning, $"{ws.WarningCode}-{ws.WarningDescription} {(ws.CurrentStatus ? "发生" : "取消")}");
|
||||
|
||||
// if (string.IsNullOrWhiteSpace(this.InitialConfig.LogPath) || !InitialConfig.IsEnableCSV)
|
||||
// return;
|
||||
|
||||
// string path = Path.Combine(InitialConfig.LogPath, $"Alarm_{Name}_{now.ToString("yyyyMMdd")}.csv");
|
||||
// string head = "Time,Source,AlarmCode,AlarmDescription,AlarmStatus";
|
||||
// string data = $"{now.ToString("HH:mm:ss.fff")},{deviceName},{ws.WarningCode},{ws.WarningDescription},{(ws.CurrentStatus ? "报警发生" : "报警取消")}";
|
||||
// CSVRecordAsync(path, data, head);
|
||||
// });
|
||||
//}
|
||||
#endregion
|
||||
|
||||
#region IDisposable Support
|
||||
private bool disposedValue = false; // 要检测冗余调用
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposedValue)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
//释放托管状态(托管对象)。
|
||||
stateChangedTimer?.Dispose();
|
||||
pauseHandle?.Dispose();
|
||||
}
|
||||
|
||||
// TODO: 释放未托管的资源(未托管的对象)并在以下内容中替代终结器。
|
||||
// TODO: 将大型字段设置为 null。
|
||||
|
||||
disposedValue = true;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: 仅当以上 Dispose(bool disposing) 拥有用于释放未托管资源的代码时才替代终结器。
|
||||
// ~DeviceBase()
|
||||
// {
|
||||
// // 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。
|
||||
// Dispose(false);
|
||||
// }
|
||||
|
||||
// 添加此代码以正确实现可处置模式。
|
||||
public void Dispose()
|
||||
{
|
||||
// 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。
|
||||
Dispose(true);
|
||||
// TODO: 如果在以上内容中替代了终结器,则取消注释以下行。
|
||||
// GC.SuppressFinalize(this);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.Commons.Base
|
||||
{
|
||||
internal class GloablConfig
|
||||
{
|
||||
}
|
||||
}
|
131
DH.Commons/Base/GlobalConfig.cs
Normal file
@ -0,0 +1,131 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using AntdUI;
|
||||
|
||||
namespace DH.Commons.Base
|
||||
{
|
||||
public class GlobalConfig : NotifyProperty
|
||||
{
|
||||
string _name;
|
||||
private BindingList<PLCItem> _InitProcessList = new BindingList<PLCItem>();
|
||||
private BindingList<PLCItem> _StartProcessList = new BindingList<PLCItem>();
|
||||
private BindingList<PLCItem> _StopProcessList = new BindingList<PLCItem>();
|
||||
private BindingList<PLCItem> _StartResetList = new BindingList<PLCItem>();
|
||||
private BindingList<PLCItem> _StopResetList = new BindingList<PLCItem>();
|
||||
public string Name
|
||||
{
|
||||
get => _name;
|
||||
set
|
||||
{
|
||||
if (_name != value)
|
||||
{
|
||||
_name = value;
|
||||
OnPropertyChanged(nameof(Name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public BindingList<PLCItem> InitProcessList
|
||||
{
|
||||
get => _InitProcessList;
|
||||
set
|
||||
{
|
||||
if (_InitProcessList == value) return;
|
||||
_InitProcessList = value;
|
||||
OnPropertyChanged(nameof(InitProcessList));
|
||||
}
|
||||
}
|
||||
public BindingList<PLCItem> StartProcessList
|
||||
{
|
||||
get => _StartProcessList;
|
||||
set
|
||||
{
|
||||
if (_StartProcessList == value) return;
|
||||
_StartProcessList = value;
|
||||
OnPropertyChanged(nameof(StartProcessList));
|
||||
}
|
||||
}
|
||||
public BindingList<PLCItem> StopProcessList
|
||||
{
|
||||
get => _StopProcessList;
|
||||
set
|
||||
{
|
||||
if (_StopProcessList == value) return;
|
||||
_StopProcessList = value;
|
||||
OnPropertyChanged(nameof(StopProcessList));
|
||||
}
|
||||
}
|
||||
public BindingList<PLCItem> StartResetList
|
||||
{
|
||||
get => _StartResetList;
|
||||
set
|
||||
{
|
||||
if (_StartResetList == value) return;
|
||||
_StartResetList = value;
|
||||
OnPropertyChanged(nameof(StartResetList));
|
||||
}
|
||||
}
|
||||
public BindingList<PLCItem> StopResetList
|
||||
{
|
||||
get => _StopResetList;
|
||||
set
|
||||
{
|
||||
if (_StopResetList == value) return;
|
||||
_StopResetList = value;
|
||||
OnPropertyChanged(nameof(StopResetList));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
string _imgSavePath;
|
||||
string _dbSavePath;
|
||||
string _configSavePath;
|
||||
|
||||
public string ImgSavePath
|
||||
{
|
||||
get => _imgSavePath;
|
||||
set
|
||||
{
|
||||
if (_imgSavePath != value)
|
||||
{
|
||||
_imgSavePath = value;
|
||||
OnPropertyChanged(nameof(ImgSavePath));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string DbSavePath
|
||||
{
|
||||
get => _dbSavePath;
|
||||
set
|
||||
{
|
||||
if (_dbSavePath != value)
|
||||
{
|
||||
_dbSavePath = value;
|
||||
OnPropertyChanged(nameof(DbSavePath));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string ConfigSavePath
|
||||
{
|
||||
get => _configSavePath;
|
||||
set
|
||||
{
|
||||
if (_configSavePath != value)
|
||||
{
|
||||
_configSavePath = value;
|
||||
OnPropertyChanged(nameof(ConfigSavePath));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -8,6 +8,7 @@ namespace DH.Commons.Base
|
||||
{
|
||||
public class PLCBase : NotifyProperty
|
||||
{
|
||||
|
||||
// 私有字段
|
||||
private bool _enable;
|
||||
private bool _connected;
|
||||
@ -20,7 +21,8 @@ namespace DH.Commons.Base
|
||||
private Parity _parity = Parity.None;
|
||||
private string _ip = "192.168.6.61";
|
||||
private int _port = 502;
|
||||
private AntList<PLCItem> _PLCItemList = new AntList<PLCItem>();
|
||||
private BindingList<PLCItem> _PLCItemList = new BindingList<PLCItem>();
|
||||
|
||||
[Category("设备配置")]
|
||||
[DisplayName("是否启用")]
|
||||
[Description("是否启用")]
|
||||
@ -179,7 +181,7 @@ namespace DH.Commons.Base
|
||||
[Category("点位配置")]
|
||||
[DisplayName("点位配置")]
|
||||
[Description("点位配置")]
|
||||
public AntList<PLCItem> PLCItemList
|
||||
public BindingList<PLCItem> PLCItemList
|
||||
{
|
||||
get => _PLCItemList;
|
||||
set
|
||||
@ -189,6 +191,8 @@ namespace DH.Commons.Base
|
||||
OnPropertyChanged(nameof(PLCItemList));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public virtual bool PLCConnect()
|
||||
{
|
||||
Connected = true;
|
||||
@ -201,14 +205,23 @@ namespace DH.Commons.Base
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual Int16 ReadInt16(string address) { return 0; }
|
||||
|
||||
public virtual ushort ReadShort(string address) { return 0; }
|
||||
public virtual int ReadInt(string address) { return 0; }
|
||||
public virtual Int32 ReadInt32(string address) { return 0; }
|
||||
|
||||
public virtual UInt16 ReadUInt16(string address) { return 0; }
|
||||
|
||||
public virtual UInt32 ReadUInt32(string address) { return 0; }
|
||||
public virtual float ReadFloat(string address) { return 0; }
|
||||
public virtual bool ReadBool(string address) { return false; }
|
||||
public virtual bool WriteShort(string address, short value, bool waitForReply = true) { return false; }
|
||||
public virtual bool WriteInt(string address, int value, bool waitForReply = true) { return false; }
|
||||
public virtual bool WriteDInt(string address, int value, bool waitForReply = true) { return false; }
|
||||
|
||||
public virtual bool WriteInt16(string address, Int16 value, bool waitForReply = true) { return false; }
|
||||
public virtual bool WriteInt32(string address, Int32 value, bool waitForReply = true) { return false; }
|
||||
|
||||
|
||||
public virtual bool WriteUInt16(string address, UInt16 value, bool waitForReply = true) { return false; }
|
||||
public virtual bool WriteUInt32(string address, UInt32 value, bool waitForReply = true) { return false; }
|
||||
|
||||
public virtual bool WriteFloat(string address, float value, bool waitForReply = true) { return false; }
|
||||
public virtual bool WriteBool(string address, bool value, bool waitForReply = true) { return false; }
|
||||
}
|
||||
@ -218,13 +231,10 @@ namespace DH.Commons.Base
|
||||
{
|
||||
private bool _selected;
|
||||
private string _name = string.Empty;
|
||||
private string _type = string.Empty;
|
||||
private EnumPLCDataType _type;
|
||||
private string _value = string.Empty;
|
||||
private bool _startexecute;
|
||||
private bool _endexecute;
|
||||
private int _startindex;
|
||||
private int _endindex;
|
||||
private string _numtype;
|
||||
private string _address;
|
||||
/// <summary>
|
||||
/// 是否选中
|
||||
@ -257,7 +267,7 @@ namespace DH.Commons.Base
|
||||
}
|
||||
}
|
||||
}
|
||||
public string Type
|
||||
public EnumPLCDataType Type
|
||||
{
|
||||
get => _type;
|
||||
set
|
||||
@ -284,18 +294,7 @@ namespace DH.Commons.Base
|
||||
}
|
||||
}
|
||||
}
|
||||
public string NumTpye
|
||||
{
|
||||
get => _numtype;
|
||||
set
|
||||
{
|
||||
if (_numtype != value)
|
||||
{
|
||||
_numtype = value;
|
||||
OnPropertyChanged(nameof(NumTpye));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 参数值
|
||||
/// </summary>
|
||||
@ -313,7 +312,7 @@ namespace DH.Commons.Base
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 流程开启执行状态
|
||||
/// 启用状态
|
||||
/// </summary>
|
||||
public bool StartExecute
|
||||
{
|
||||
@ -327,27 +326,13 @@ namespace DH.Commons.Base
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 流程结束执行状态
|
||||
/// </summary>
|
||||
public bool EndExecute
|
||||
{
|
||||
get => _endexecute;
|
||||
set
|
||||
{
|
||||
if (_endexecute != value)
|
||||
{
|
||||
_endexecute = value;
|
||||
OnPropertyChanged(nameof(EndExecute));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 流程开启顺序
|
||||
/// 顺序
|
||||
/// </summary>
|
||||
public int StartIndex
|
||||
{
|
||||
@ -361,22 +346,7 @@ namespace DH.Commons.Base
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 流程结束顺序
|
||||
/// </summary>
|
||||
public int EndIndex
|
||||
{
|
||||
get => _endindex;
|
||||
set
|
||||
{
|
||||
if (_endindex != value)
|
||||
{
|
||||
_endindex = value;
|
||||
OnPropertyChanged(nameof(EndIndex));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private CellLink[] cellLinks;
|
||||
[JsonIgnore]
|
||||
public CellLink[] CellLinks
|
||||
@ -390,18 +360,18 @@ namespace DH.Commons.Base
|
||||
}
|
||||
}
|
||||
|
||||
private CellTag[] cellTags;
|
||||
[JsonIgnore]
|
||||
public CellTag[] CellTags
|
||||
{
|
||||
get { return cellTags; }
|
||||
set
|
||||
{
|
||||
if (cellTags == value) return;
|
||||
cellTags = value;
|
||||
OnPropertyChanged(nameof(CellTags));
|
||||
}
|
||||
}
|
||||
//private CellTag[] cellTags;
|
||||
//[JsonIgnore]
|
||||
//public CellTag[] CellTags
|
||||
//{
|
||||
// get { return cellTags; }
|
||||
// set
|
||||
// {
|
||||
// if (cellTags == value) return;
|
||||
// cellTags = value;
|
||||
// OnPropertyChanged(nameof(CellTags));
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
|
@ -3,6 +3,7 @@ using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Commons.Helper;
|
||||
using HalconDotNet;
|
||||
using OpenCvSharp;
|
||||
|
||||
@ -18,7 +19,7 @@ namespace DH.Commons.Base
|
||||
/// Object Detection 目标检测:寻找图像中的物体并进行定位;
|
||||
/// Instance Segmentation 实例分割:定位图中每个物体,并进行像素级标注,区分不同个体;
|
||||
/// </summary>
|
||||
public abstract class VisionEngineBase
|
||||
public abstract class VisionEngineBase : DeviceBase
|
||||
{
|
||||
public List<DetectionConfig> DetectionConfigs = new List<DetectionConfig>();
|
||||
#region event
|
||||
@ -50,134 +51,25 @@ namespace DH.Commons.Base
|
||||
{
|
||||
OnDetectionWarningStop?.Invoke(detectionDes);
|
||||
}
|
||||
|
||||
public ImageSaveHelper ImageSaveHelper { get; set; } = new ImageSaveHelper();
|
||||
public virtual void SaveImageAsync(string fullname, Bitmap saveMap, ImageFormat imageFormat)
|
||||
{
|
||||
if (saveMap != null)
|
||||
{
|
||||
//ImageSaveSet imageSaveSet = new ImageSaveSet()
|
||||
//{
|
||||
// FullName = fullname,
|
||||
// SaveImage = saveMap.CopyBitmap(),
|
||||
// ImageFormat = imageFormat.DeepSerializeClone()
|
||||
//};
|
||||
ImageSaveSet imageSaveSet = new ImageSaveSet()
|
||||
{
|
||||
FullName = fullname,
|
||||
SaveImage = saveMap.CopyBitmap(),
|
||||
ImageFormat = imageFormat.DeepSerializeClone()
|
||||
|
||||
//ImageSaveHelper.ImageSaveAsync(imageSaveSet);
|
||||
};
|
||||
|
||||
ImageSaveHelper.ImageSaveAsync(imageSaveSet);
|
||||
}
|
||||
}
|
||||
}
|
||||
public class CamModuleXY
|
||||
{
|
||||
[Category("图片行")]
|
||||
[DisplayName("行")]
|
||||
[Description("行")]
|
||||
// [TypeConverter(typeof(DeviceIdSelectorConverter<CameraBase>))]
|
||||
//[TypeConverter(typeof(CollectionCountConvert))]
|
||||
public int PicRows { get; set; } = 1;
|
||||
|
||||
[Category("图片列")]
|
||||
[DisplayName("列")]
|
||||
[Description("列")]
|
||||
// [TypeConverter(typeof(DeviceIdSelectorConverter<CameraBase>))]
|
||||
//[TypeConverter(typeof(CollectionCountConvert))]
|
||||
public int PicCols { get; set; } = 1;
|
||||
|
||||
public string GetDisplayText()
|
||||
{
|
||||
return "行:" + PicRows.ToString() + "列:" + PicCols.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
//public class RelatedCamera
|
||||
//{
|
||||
|
||||
// [Category("关联相机")]
|
||||
// [DisplayName("关联相机")]
|
||||
// [Description("关联相机描述")]
|
||||
// //[TypeConverter(typeof(DeviceIdSelectorConverter<CameraBase>))]
|
||||
// //[TypeConverter(typeof(CollectionCountConvert))]
|
||||
// public string CameraSourceId { get; set; } = "";
|
||||
|
||||
|
||||
// //public string GetDisplayText()
|
||||
// //{
|
||||
// // using (var scope = GlobalVar.Container.BeginLifetimeScope())
|
||||
// // {
|
||||
// // List<IDevice> deviceList = scope.Resolve<List<IDevice>>();
|
||||
// // IDevice CameraDevice = deviceList.FirstOrDefault(dev => dev.Id.Equals(CameraSourceId));
|
||||
|
||||
// // if (CameraDevice != null && CameraDevice is CameraBase)
|
||||
// // {
|
||||
// // return CameraDevice.Name;
|
||||
// // }
|
||||
|
||||
// // }
|
||||
// // return CameraSourceId;
|
||||
// //}
|
||||
//}
|
||||
public class VisionEngineInitialConfigBase //: InitialConfigBase
|
||||
{
|
||||
[Category("深度学习检测配置")]
|
||||
[DisplayName("检测配置集合")]
|
||||
[Description("检测配置集合")]
|
||||
//[TypeConverter(typeof(CollectionCountConvert))]
|
||||
//[Editor(typeof(ComplexCollectionEditor<DetectionConfig>), typeof(UITypeEditor))]
|
||||
public List<DetectionConfig> DetectionConfigs { get; set; } = new List<DetectionConfig>();
|
||||
|
||||
[Category("深度学习检测配置")]
|
||||
[DisplayName("标签分类")]
|
||||
[Description("标签分类,A_NG,B_TBD...")]
|
||||
// [TypeConverter(typeof(CollectionCountConvert))]
|
||||
// [Editor(typeof(ComplexCollectionEditor<RecongnitionLabelCategory>), typeof(UITypeEditor))]
|
||||
public List<RecongnitionLabelCategory> RecongnitionLabelCategoryList { get; set; } = new List<RecongnitionLabelCategory>();
|
||||
|
||||
[Category("深度学习检测配置")]
|
||||
[DisplayName("检测标签定义集合")]
|
||||
[Description("定义检测标签的集合,例如:Seg/Detection模式:断裂、油污、划伤...;Class模式:ok、ng、上面、下面、套环、正常...")]
|
||||
// [TypeConverter(typeof(CollectionCountConvert))]
|
||||
// [Editor(typeof(ComplexCollectionEditor<RecongnitionLabel>), typeof(UITypeEditor))]
|
||||
public List<RecongnitionLabel> RecongnitionLabelList { get; set; } = new List<RecongnitionLabel>();
|
||||
|
||||
[Category("深度学习检测配置")]
|
||||
[DisplayName("标签置信度")]
|
||||
[Description("标签置信度,过滤小于改置信度的标签,大于该设置的标签才能识别")]
|
||||
public float Score { get; set; } = 0.5f;
|
||||
|
||||
[Category("深度学习检测配置")]
|
||||
[DisplayName("CPU线程数量")]
|
||||
[Description("用于深度学习的CPU线程数量,不要设置太大,会单独占用线程,影响其他程序运行")]
|
||||
public int CPUNums { get; set; } = 1;
|
||||
|
||||
//[Category("深度学习检测配置")]
|
||||
//[DisplayName("检测项GPU指定")]
|
||||
//[Description("将检测项指定到GPU")]
|
||||
// [TypeConverter(typeof(CollectionCountConvert))]
|
||||
// [Editor(typeof(ComplexCollectionEditor<DetectionGPUConfig>), typeof(UITypeEditor))]
|
||||
// public List<DetectionGPUConfig> DetectionGPUList { get; set; } = new List<DetectionGPUConfig>();
|
||||
|
||||
// [Category("数据保存配置")]
|
||||
//[DisplayName("是否保存检测明细CSV")]
|
||||
//[Description("是否保存 检测明细CSV")]
|
||||
//public override bool IsEnableCSV { get; set; } = true;
|
||||
|
||||
//[Category("数据保存配置")]
|
||||
//[DisplayName("是否保存检测图片")]
|
||||
//[Description("是否保存 检测图片,总开关")]
|
||||
//public bool IsSaveImage { get; set; } = true;
|
||||
|
||||
//[Category("数据保存配置")]
|
||||
//[Description("检测图片 保存文件夹")]
|
||||
//[DisplayName("检测图片保存文件夹")]
|
||||
//[Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))]
|
||||
//public string ImageSaveDirectory { get; set; } = "D:\\PROJECTS\\X017\\Images";
|
||||
|
||||
//[Category("数据保存配置")]
|
||||
//[Description("检测明细CSV文件夹")]
|
||||
//[DisplayName("检测明细CSV文件夹")]
|
||||
//[Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))]
|
||||
//public string CSVDataPath { get; set; } = "D:\\PROJECTS\\X017\\Images";
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -12,16 +12,10 @@
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AntdUI" Version="1.8.9" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="OpenCvSharp4" Version="4.10.0.20241108" />
|
||||
<PackageReference Include="OpenCvSharp4.Extensions" Version="4.10.0.20241108" />
|
||||
<PackageReference Include="OpenCvSharp4.runtime.win" Version="4.10.0.20241108" />
|
||||
|
@ -7,7 +7,13 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace DH.Commons.Enums
|
||||
{
|
||||
|
||||
public enum EnumStatus
|
||||
{
|
||||
未运行,
|
||||
运行中,
|
||||
警告,
|
||||
异常
|
||||
}
|
||||
public enum ModelType
|
||||
{
|
||||
图像分类 = 1,
|
||||
@ -91,10 +97,8 @@ namespace DH.Commons.Enums
|
||||
工位8 ,
|
||||
工位9 ,
|
||||
工位10 ,
|
||||
OK料盒 ,
|
||||
NG料盒,
|
||||
OK吹气时间,
|
||||
NG吹气时间,
|
||||
相机触发时间,
|
||||
吹气时间,
|
||||
产品计数,
|
||||
计数清零,
|
||||
工件最小值,
|
||||
@ -109,6 +113,9 @@ namespace DH.Commons.Enums
|
||||
挡料电机位置,
|
||||
OK脉冲,
|
||||
NG脉冲,
|
||||
状态复位,
|
||||
启用定位,
|
||||
定位完成脉冲值
|
||||
|
||||
|
||||
|
||||
@ -118,18 +125,22 @@ namespace DH.Commons.Enums
|
||||
|
||||
public enum EnumPLCDataType
|
||||
{
|
||||
HD,
|
||||
D,
|
||||
M
|
||||
}
|
||||
public enum EnumPLCINTType
|
||||
{
|
||||
单字16位,
|
||||
单字32位,
|
||||
双字16位,
|
||||
双字32位
|
||||
单字整型,
|
||||
双字整型,
|
||||
浮点型,
|
||||
布尔型
|
||||
}
|
||||
|
||||
public enum EnumBool
|
||||
{
|
||||
关闭,
|
||||
启用
|
||||
}
|
||||
public enum EnumBool1
|
||||
{
|
||||
False,
|
||||
True
|
||||
}
|
||||
public enum StreamFormat
|
||||
{
|
||||
[Description("8位图像")]
|
||||
|
64
DH.Commons/Exception/ExceptionHelper.cs
Normal file
@ -0,0 +1,64 @@
|
||||
using System;
|
||||
using static DH.Commons.Enums.EnumHelper;
|
||||
|
||||
|
||||
namespace DH.Commons.Helper
|
||||
{
|
||||
public enum ExceptionLevel
|
||||
{
|
||||
Info = 0,
|
||||
Warning = 1,
|
||||
Fatal = 2,
|
||||
}
|
||||
|
||||
//public delegate void OnProcessExceptionRaisedDelegate(DateTime dt, ProcessException ex);
|
||||
//[Serializable]
|
||||
public class ProcessException : Exception
|
||||
{
|
||||
public ExceptionLevel Level { get; set; } = ExceptionLevel.Warning;
|
||||
|
||||
public ProcessException()
|
||||
{
|
||||
}
|
||||
|
||||
public ProcessException(Exception ex, ExceptionLevel lvl = ExceptionLevel.Warning) : base(ex.Message, ex)
|
||||
{
|
||||
Level = lvl;
|
||||
ExceptionNotice();
|
||||
}
|
||||
|
||||
public ProcessException(string error, Exception ex = null, ExceptionLevel lvl = ExceptionLevel.Warning) : base(error, ex)
|
||||
{
|
||||
Level = lvl;
|
||||
ExceptionNotice();
|
||||
}
|
||||
|
||||
public void ExceptionNotice()
|
||||
{
|
||||
//OnProcessExceptionRaised?.Invoke(DateTime.Now, this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ExceptionHelper
|
||||
{
|
||||
public static LogLevel LogLevel = LogLevel.Information;
|
||||
public static string GetExceptionMessage(this Exception ex)
|
||||
{
|
||||
string msg = "异常信息:" + ex.Message;
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
msg += ";\t内部异常信息:" + ex.InnerException.GetExceptionMessage();
|
||||
}
|
||||
|
||||
if (LogLevel <= LogLevel.Assist)
|
||||
{
|
||||
msg += (";\r\n\t\tStackTrace:" + ex.StackTrace);
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
}
|
||||
|
||||
public class AuthorityException : ProcessException
|
||||
{
|
||||
}
|
||||
}
|
162
DH.Commons/Helper/AttributeHelper.cs
Normal file
@ -0,0 +1,162 @@
|
||||
using DH.Commons.Enums;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.CompilerServices;
|
||||
using static DH.Commons.Enums.EnumHelper;
|
||||
|
||||
|
||||
namespace DH.Commons.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备特性,指示该信息的设备类型,适用于设备信息和配置信息
|
||||
/// </summary>
|
||||
public class DeviceAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备类型
|
||||
/// </summary>
|
||||
public string TypeCode { get; set; }
|
||||
|
||||
public string TypeDescription { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 特性修饰类别
|
||||
/// </summary>
|
||||
public DeviceAttributeType AttrType { get; set; }
|
||||
|
||||
public DeviceAttribute(string typeCode, string typeDesc, EnumHelper.DeviceAttributeType attrType)
|
||||
{
|
||||
TypeCode = typeCode;
|
||||
TypeDescription = typeDesc;
|
||||
AttrType = attrType;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 预置状态特性 指定该修饰信息的前置状态允许范围
|
||||
/// </summary>
|
||||
public class PreStateAttribute : Attribute
|
||||
{
|
||||
public int PreState { get; set; }
|
||||
public PreStateAttribute(int _preState)
|
||||
{
|
||||
PreState = _preState;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查当前待执行操作的前置状态要求是否合法
|
||||
/// </summary>
|
||||
/// <param name="currentState"></param>
|
||||
/// <returns></returns>
|
||||
public bool CheckPreStateValid(int currentState)
|
||||
{
|
||||
return (currentState & PreState) == currentState;
|
||||
}
|
||||
}
|
||||
|
||||
public class ColorSelectAttribute : Attribute
|
||||
{
|
||||
public string SelectedColor { get; set; }
|
||||
public ColorSelectAttribute(string selectedColor)
|
||||
{
|
||||
SelectedColor = selectedColor;
|
||||
}
|
||||
}
|
||||
|
||||
public class FontColorSelectAttribute : Attribute
|
||||
{
|
||||
public string SelectedColor { get; set; }
|
||||
public FontColorSelectAttribute(string selectedColor)
|
||||
{
|
||||
SelectedColor = selectedColor;
|
||||
}
|
||||
}
|
||||
|
||||
public enum InvokeType
|
||||
{
|
||||
/// <summary>
|
||||
/// 不公开调用
|
||||
/// </summary>
|
||||
[Description("不公开调用")]
|
||||
NoneInvoke = 0,
|
||||
/// <summary>
|
||||
/// 测试调用
|
||||
/// </summary>
|
||||
[Description("测试调用")]
|
||||
TestInvoke = 1,
|
||||
/// <summary>
|
||||
/// 标定调用
|
||||
/// </summary>
|
||||
[Description("标定调用")]
|
||||
CalibInvoke = 2,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用来修饰对外开放的调用方法的特性
|
||||
/// 调用方法参数顺序:IOperationConfig,InvokeDevice,SourceDevice
|
||||
/// </summary>
|
||||
public class ProcessMethodAttribute : Attribute
|
||||
{
|
||||
public string MethodCode { get; set; }
|
||||
public string MethodDesc { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否提供人工调用测试
|
||||
/// </summary>
|
||||
public InvokeType InvokeType { get; set; }
|
||||
|
||||
public string DeviceType { get; set; }
|
||||
|
||||
public ProcessMethodAttribute(string deviceType, string code, string description, InvokeType invokeType)
|
||||
{
|
||||
DeviceType = deviceType;
|
||||
MethodCode = code;
|
||||
MethodDesc = description;
|
||||
InvokeType = invokeType;
|
||||
}
|
||||
}
|
||||
|
||||
public class SwitchDisplayAttribute : Attribute
|
||||
{
|
||||
public string SwitchName { get; set; }
|
||||
|
||||
public bool SwithOnStatus { get; set; } = true;
|
||||
|
||||
public SwitchDisplayAttribute(string name, bool status)
|
||||
{
|
||||
SwitchName = name;
|
||||
SwithOnStatus = status;
|
||||
}
|
||||
}
|
||||
|
||||
public class ElementAttribute : Attribute
|
||||
{
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Desc { get; set; }
|
||||
|
||||
public string IconPath { get; set; }
|
||||
|
||||
public bool IsShowInToolBar { get; set; }
|
||||
|
||||
public ElementAttribute(string desc, string iconPath, bool isShowInToolBar = true, [CallerMemberName] string name = "")
|
||||
{
|
||||
Name = name;
|
||||
Desc = desc;
|
||||
IconPath = iconPath;
|
||||
IsShowInToolBar = isShowInToolBar;
|
||||
}
|
||||
}
|
||||
|
||||
public class ProcessAttribute : Attribute
|
||||
{
|
||||
public string ProcessCode { get; set; }
|
||||
public DeviceAttributeType AttrType { get; set; }
|
||||
|
||||
public ProcessAttribute(string stationCode, DeviceAttributeType attrType)
|
||||
{
|
||||
ProcessCode = stationCode;
|
||||
AttrType = attrType;
|
||||
}
|
||||
}
|
||||
}
|
@ -101,7 +101,8 @@ namespace DH.Commons.Helper
|
||||
{
|
||||
ConfigModel.CameraBaseList,
|
||||
ConfigModel.PLCBaseList,
|
||||
ConfigModel.DetectionList
|
||||
ConfigModel.DetectionList,
|
||||
ConfigModel.GlobalList,
|
||||
}, _jsonOptions);
|
||||
|
||||
// 写入新配置
|
||||
@ -157,8 +158,9 @@ namespace DH.Commons.Helper
|
||||
var data = JsonSerializer.Deserialize<ConfigData>(json, _jsonOptions);
|
||||
|
||||
ConfigModel.CameraBaseList = data?.Cameras ?? new List<CameraBase>();
|
||||
ConfigModel.PLCBaseList = data?.PLCs ?? new List<PLCBase>();
|
||||
ConfigModel.DetectionList = data?.Detections ?? new List<DetectionConfig>();
|
||||
ConfigModel.PLCBaseList = data?.PLCs ?? new List<PLCBase>();
|
||||
ConfigModel.GlobalList = data?.GlobalConfigs ?? new List<GlobalConfig>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -261,6 +263,10 @@ namespace DH.Commons.Helper
|
||||
|
||||
[JsonPropertyName("detectionList")]
|
||||
public List<DetectionConfig> Detections { get; set; } = new List<DetectionConfig>();
|
||||
[JsonPropertyName("globalList")]
|
||||
public List<GlobalConfig> GlobalConfigs { get; set; } = new List<GlobalConfig>();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -120,6 +120,40 @@ namespace DH.Commons.Enums
|
||||
.FirstOrDefault() as DescriptionAttribute;
|
||||
return attribute?.Description ?? value.ToString();
|
||||
}
|
||||
|
||||
public static System.Drawing.Color GetEnumSelectedColor(this Enum enumObj)
|
||||
{
|
||||
Type t = enumObj.GetType();
|
||||
FieldInfo f = t.GetField(enumObj.ToString());
|
||||
|
||||
ColorSelectAttribute attr = f.GetCustomAttribute<ColorSelectAttribute>();
|
||||
if (attr != null)
|
||||
{
|
||||
return System.Drawing.Color.FromName(attr.SelectedColor);
|
||||
}
|
||||
else
|
||||
{
|
||||
return System.Drawing.Color.Transparent;
|
||||
}
|
||||
}
|
||||
|
||||
public static System.Drawing.Color GetEnumSelectedFontColor(this Enum enumObj)
|
||||
{
|
||||
Type t = enumObj.GetType();
|
||||
FieldInfo f = t.GetField(enumObj.ToString());
|
||||
|
||||
var attr = f.GetCustomAttribute<FontColorSelectAttribute>();
|
||||
if (attr != null)
|
||||
{
|
||||
return System.Drawing.Color.FromName(attr.SelectedColor);
|
||||
}
|
||||
else
|
||||
{
|
||||
return System.Drawing.Color.Transparent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Flags]
|
||||
public enum DeviceAttributeType
|
||||
{
|
||||
@ -251,7 +285,38 @@ namespace DH.Commons.Enums
|
||||
[Description("测量结果")]
|
||||
MeasureResult = 31,
|
||||
}
|
||||
|
||||
|
||||
public enum LogLevel
|
||||
{
|
||||
[Description("详细")]
|
||||
[ColorSelect("White")]
|
||||
[FontColorSelect("Green")]
|
||||
Detail = 2,
|
||||
[Description("信息")]
|
||||
[ColorSelect("White")]
|
||||
[FontColorSelect("Dark")]
|
||||
Information = 3,
|
||||
[Description("辅助")]
|
||||
[ColorSelect("White")]
|
||||
[FontColorSelect("Blue")]
|
||||
Assist = 4,
|
||||
[Description("动作")]
|
||||
[ColorSelect("DarkGreen")]
|
||||
[FontColorSelect("Yellow")]
|
||||
Action = 5,
|
||||
[Description("错误")]
|
||||
[ColorSelect("Orange")]
|
||||
[FontColorSelect("White")]
|
||||
Error = 6,
|
||||
[Description("警报")]
|
||||
[ColorSelect("Brown")]
|
||||
[FontColorSelect("White")]
|
||||
Warning = 7,
|
||||
[Description("异常")]
|
||||
[ColorSelect("Red")]
|
||||
[FontColorSelect("White")]
|
||||
Exception = 8,
|
||||
}
|
||||
//public enum CameraDriverType
|
||||
//{
|
||||
// Halcon,
|
||||
@ -272,7 +337,44 @@ namespace DH.Commons.Enums
|
||||
// NG = -1,
|
||||
// IGNORE = -999,
|
||||
//}
|
||||
public enum DeviceState
|
||||
{
|
||||
TBD = -1,
|
||||
|
||||
[ColorSelect("Gray")]
|
||||
[FontColorSelect("Black")]
|
||||
[Description("未初始化")]
|
||||
DSUninit = 1,
|
||||
|
||||
[ColorSelect("Gold")]
|
||||
[FontColorSelect("White")]
|
||||
[PreState(1 + 2 + 4 + 8 + 32)]
|
||||
[Description("初始化")]
|
||||
DSInit = 2,
|
||||
|
||||
[ColorSelect("Lime")]
|
||||
[FontColorSelect("Black")]
|
||||
[PreState(2 + 4 + 16)]
|
||||
[Description("运行中")]
|
||||
DSOpen = 4,
|
||||
|
||||
[ColorSelect("Gray")]
|
||||
[FontColorSelect("White")]
|
||||
[PreState(1 + 4 + 8 + 16 + 32)]
|
||||
[Description("关闭")]
|
||||
DSClose = 8,
|
||||
|
||||
[ColorSelect("Gold")]
|
||||
[FontColorSelect("White")]
|
||||
[PreState(4 + 16)]
|
||||
[Description("暂停")]
|
||||
DSPause = 16,
|
||||
|
||||
[ColorSelect("Red")]
|
||||
[FontColorSelect("White")]
|
||||
[Description("异常")]
|
||||
DSExcept = 32
|
||||
}
|
||||
public enum PriorityDirection
|
||||
{
|
||||
X,
|
||||
|
107
DH.Commons/Helper/ImageSaveHelper.cs
Normal file
@ -0,0 +1,107 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using DH.Commons.Helper;
|
||||
|
||||
namespace DH.Commons.Enums
|
||||
{
|
||||
public class ImageSaveHelper
|
||||
{
|
||||
public event Action<DateTime, string> OnImageSaveExceptionRaised;
|
||||
|
||||
//private string baseDirectory = "";
|
||||
//public string BaseDirectory
|
||||
//{
|
||||
// get => baseDirectory;
|
||||
// set
|
||||
// {
|
||||
// baseDirectory = value;
|
||||
// if (string.IsNullOrWhiteSpace(baseDirectory) || !Path.IsPathRooted(baseDirectory))
|
||||
// {
|
||||
// baseDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Images");
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
public bool EnableImageSave { get; set; } = true;
|
||||
|
||||
public ImageSaveHelper() { }
|
||||
public ImageSaveHelper(bool enableImageSave = true)
|
||||
{
|
||||
EnableImageSave = enableImageSave;
|
||||
}
|
||||
|
||||
|
||||
object lockObj = new object();
|
||||
////耗时操作从 _taskFactory分配线程
|
||||
//public TaskFactory _taskFactory = new TaskFactory(TaskCreationOptions.LongRunning, TaskContinuationOptions.LongRunning);
|
||||
readonly ConcurrentQueue<ImageSaveSet> _imageQueue = new ConcurrentQueue<ImageSaveSet>();
|
||||
Task _saveTask = null;
|
||||
readonly object _saveLock = new object();
|
||||
|
||||
public async void ImageSaveAsync(ImageSaveSet set)
|
||||
{
|
||||
if (!EnableImageSave)
|
||||
return;
|
||||
|
||||
await Task.Run(() =>
|
||||
{
|
||||
_imageQueue.Enqueue(set);
|
||||
|
||||
lock (_saveLock)
|
||||
{
|
||||
if (_saveTask == null)
|
||||
{
|
||||
_saveTask = Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
while (_imageQueue.Count > 0)
|
||||
{
|
||||
if (_imageQueue.TryDequeue(out ImageSaveSet saveSet))
|
||||
{
|
||||
if (!Directory.Exists(Path.GetDirectoryName(saveSet.FullName)))
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(saveSet.FullName));
|
||||
}
|
||||
if (saveSet.SaveImage != null)
|
||||
{
|
||||
saveSet.SaveImage.Save(saveSet.FullName, saveSet.ImageFormat);
|
||||
saveSet.SaveImage.Dispose();
|
||||
}
|
||||
saveSet = null;
|
||||
}
|
||||
}
|
||||
|
||||
await Task.Delay(2000);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnImageSaveExceptionRaised?.Invoke(DateTime.Now, $"图片保存异常:{ex.GetExceptionMessage()}");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public class ImageSaveSet
|
||||
{
|
||||
public string FullName { get; set; }//带后缀 全路径
|
||||
|
||||
public Bitmap SaveImage { get; set; }
|
||||
|
||||
public ImageFormat ImageFormat { get; set; } = ImageFormat.Jpeg;
|
||||
}
|
||||
}
|
138
DH.Commons/Helper/LoggerHelper.cs
Normal file
@ -0,0 +1,138 @@
|
||||
using DH.Commons.Helper;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using static DH.Commons.Enums.EnumHelper;
|
||||
|
||||
namespace DH.Commons.Enums
|
||||
{
|
||||
public interface ILogOutput
|
||||
{
|
||||
event Action<LogMsg> OnLogMsgOutput;
|
||||
void LogDisplay(LogMsg msg);
|
||||
}
|
||||
public interface ILogger
|
||||
{
|
||||
event Action<LogMsg> OnLog;
|
||||
LoggerHelper LoggerHelper { get; set; }
|
||||
//void LogAsync(DateTime dt, LogLevel loglevel, string msg);
|
||||
void LogAsync(LogMsg msg);
|
||||
}
|
||||
public class LoggerHelper
|
||||
{
|
||||
public event Action<DateTime, string> OnLogExceptionRaised;
|
||||
|
||||
public string LogPath { get; set; }
|
||||
public string LogPrefix { get; set; }
|
||||
|
||||
LogLevel LogLevel = LogLevel.Information;
|
||||
|
||||
public LoggerHelper() { }
|
||||
public LoggerHelper(string logPath, string logPrefix, LogLevel logLevel = LogLevel.Information)
|
||||
{
|
||||
LogPath = logPath;
|
||||
LogPrefix = logPrefix;
|
||||
|
||||
LogLevel = logLevel;
|
||||
}
|
||||
|
||||
public void SetLogLevel(LogLevel logLevel)
|
||||
{
|
||||
if (LogLevel != logLevel)
|
||||
LogLevel = logLevel;
|
||||
}
|
||||
////耗时操作从 _taskFactory分配线程
|
||||
//public TaskFactory _taskFactory = new TaskFactory(TaskCreationOptions.LongRunning, TaskContinuationOptions.LongRunning);
|
||||
readonly ConcurrentQueue<LogMsg> _logQueue = new ConcurrentQueue<LogMsg>();
|
||||
Task _logTask = null;
|
||||
readonly object _logLock = new object();
|
||||
|
||||
public async void LogAsync(LogMsg msg)
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
_logQueue.Enqueue(msg);
|
||||
|
||||
lock (_logLock)
|
||||
{
|
||||
if (_logTask == null)
|
||||
{
|
||||
_logTask = Task.Run(async () =>
|
||||
{
|
||||
string filePath = Path.Combine(LogPath, $"{(string.IsNullOrWhiteSpace(LogPrefix) ? "Log_" : ("Log_" + LogPrefix + "_"))}{DateTime.Now.ToString("yyyyMMdd")}.txt");
|
||||
try
|
||||
{
|
||||
if (!StaticHelper.CheckFilesCanUse(filePath))
|
||||
{
|
||||
OnLogExceptionRaised?.Invoke(DateTime.Now, $"日志文件{filePath}被占用,无法写入");
|
||||
return;
|
||||
}
|
||||
using (StreamWriter writer = new StreamWriter(filePath, true, System.Text.Encoding.UTF8))
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
if (!Directory.Exists(LogPath))
|
||||
{
|
||||
Directory.CreateDirectory(LogPath);
|
||||
}
|
||||
|
||||
while (_logQueue.Count > 0)
|
||||
{
|
||||
if (_logQueue.TryDequeue(out LogMsg log))
|
||||
{
|
||||
if (log.LogLevel >= LogLevel)
|
||||
{
|
||||
writer.WriteLine($"{log.LogTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}[{log.ThreadId}]\t{log.LogLevel.GetEnumDescription()}\t{log.Msg}");
|
||||
}
|
||||
}
|
||||
}
|
||||
writer.Flush();
|
||||
|
||||
await Task.Delay(2000);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//OnLogExceptionRaised?.Invoke(DateTime.Now, $"日志文件{filePath}写入异常:/*{ex.GetExceptionMessage()*/}");
|
||||
OnLogExceptionRaised?.Invoke(DateTime.Now, $"日志文件{filePath}写入异常");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void LogAsync(DateTime dt, LogLevel logLevel, string msg)
|
||||
{
|
||||
LogAsync(new LogMsg(dt, logLevel, msg));
|
||||
}
|
||||
}
|
||||
|
||||
public class LogMsg
|
||||
{
|
||||
public DateTime LogTime { get; set; }
|
||||
public LogLevel LogLevel { get; set; }
|
||||
//public string Prefix { get; set; }
|
||||
public string Msg { get; set; }
|
||||
|
||||
public string MsgSource { get; set; }
|
||||
|
||||
public int ThreadId { get; set; }
|
||||
|
||||
public LogMsg() { }
|
||||
public LogMsg(DateTime dt, LogLevel logLevel, string msg)
|
||||
{
|
||||
LogTime = dt;
|
||||
LogLevel = logLevel;
|
||||
Msg = msg;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{LogTime.ToString("HH:mm:ss.fff")}\t{MsgSource}\t{Msg}";
|
||||
}
|
||||
}
|
||||
}
|
680
DH.Commons/Helper/StaticHelper.cs
Normal file
@ -0,0 +1,680 @@
|
||||
using Microsoft.CSharp.RuntimeBinder;
|
||||
using Newtonsoft.Json;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Dynamic;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.ExceptionServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
|
||||
namespace DH.Commons.Helper
|
||||
{
|
||||
public static class StaticHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 数值转换为byte数组 高位在前,低位在后
|
||||
/// </summary>
|
||||
/// <param name="number"></param>
|
||||
/// <param name="size"></param>
|
||||
/// <returns></returns>
|
||||
public static byte[] IntToBytes(this int number, int size = 2)
|
||||
{
|
||||
byte[] result = new byte[size];
|
||||
|
||||
int temp = size;
|
||||
while (temp > 0)
|
||||
{
|
||||
result[size - temp] = (byte)(number >> ((temp - 1) * 8) & 0xff);
|
||||
|
||||
temp--;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
public static T DeepSerializeClone<T>(this T t)
|
||||
{
|
||||
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(t));
|
||||
}
|
||||
/// <summary>
|
||||
/// 字节数组转换为整数
|
||||
/// </summary>
|
||||
/// <param name="data">字节数组</param>
|
||||
/// <param name="HtL">true:数组序号低的在高位 false:数组序号低的在低位</param>
|
||||
/// <returns></returns>
|
||||
public static int BytesToInt(this byte[] data, bool HtL = true)
|
||||
{
|
||||
int res = 0;
|
||||
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
{
|
||||
int index = i;
|
||||
|
||||
if (HtL)
|
||||
{
|
||||
index = data.Length - 1 - i;
|
||||
}
|
||||
|
||||
res += data[index] << (8 * i);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取一个类指定的属性值
|
||||
/// </summary>
|
||||
/// <param name="info">object对象</param>
|
||||
/// <param name="field">属性名称</param>
|
||||
/// <returns></returns>
|
||||
public static object GetPropertyValue(object info, string field)
|
||||
{
|
||||
if (info == null) return null;
|
||||
Type t = info.GetType();
|
||||
IEnumerable<System.Reflection.PropertyInfo> property = from pi in t.GetProperties() where pi.Name.ToLower() == field.ToLower() select pi;
|
||||
return property.First().GetValue(info, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将32位整形拆分为无符号16位整形
|
||||
/// </summary>
|
||||
/// <param name="num">需要拆分的32位整形</param>
|
||||
/// <param name="bitNum">拆分为16位整形的位数 1或者2</param>
|
||||
/// <param name="HtL">true:高位在前,低位在后;false:高位在后,低位在前</param>
|
||||
/// <returns></returns>
|
||||
public static List<ushort> ParseIntToUnsignShortList(this int num, int bitNum = 2, bool HtL = false)
|
||||
{
|
||||
if (bitNum == 2)
|
||||
{
|
||||
ushort high = (ushort)(num >> 16);
|
||||
ushort low = (ushort)num;
|
||||
|
||||
if (HtL)
|
||||
{
|
||||
return new List<ushort>() { high, low };
|
||||
}
|
||||
else
|
||||
{
|
||||
return new List<ushort>() { low, high };
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (num < 0)
|
||||
{
|
||||
num = ushort.MaxValue + 1 + num;
|
||||
}
|
||||
|
||||
return new List<ushort>() { (ushort)num };
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将32位整形数组拆分为无符号16位整形数组
|
||||
/// </summary>
|
||||
/// <param name="list">需要拆分的32位整形</param>
|
||||
/// <param name="bitNum">拆分为16位整形的位数 1或者2</param>
|
||||
/// <param name="HtL">true:高位在前,低位在后;false:高位在后,低位在前</param>
|
||||
/// <returns></returns>
|
||||
public static List<ushort> ParseIntToUnsignShortList(this List<int> list, int bitNum = 2, bool HtL = false)
|
||||
{
|
||||
return list.SelectMany(u => u.ParseIntToUnsignShortList(bitNum, HtL)).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将ushort的集合转换为16位带符号整形
|
||||
/// </summary>
|
||||
/// <param name="numList"></param>
|
||||
/// <param name="bitNum">合并的位数 1或者2</param>
|
||||
/// <param name="HtL">true:高位在前,低位在后;false:高位在后,低位在前</param>
|
||||
/// <returns></returns>
|
||||
public static List<int> ParseUnsignShortListToInt(this List<int> numList, int bitNum = 2, bool HtL = false)
|
||||
{
|
||||
if (bitNum == 1)
|
||||
{
|
||||
return numList.ConvertAll(n =>
|
||||
{
|
||||
int num = n;
|
||||
if (num > short.MaxValue)
|
||||
{
|
||||
num = num - ushort.MaxValue - 1;
|
||||
}
|
||||
|
||||
return num;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
List<int> list = new List<int>();
|
||||
for (int i = 0; i < numList.Count; i += 2)
|
||||
{
|
||||
int high = HtL ? numList[i] : numList[i + 1];
|
||||
int low = HtL ? numList[i + 1] : numList[i];
|
||||
list.Add((high << 16) | low);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
//public static T DeepSerializeClone<T>(this T t)
|
||||
//{
|
||||
// return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(t));
|
||||
//}
|
||||
|
||||
public static void DataFrom<T1, T2>(this T1 destT, T2 sourceT, List<string> exceptionProps = null) where T1 : class where T2 : class
|
||||
{
|
||||
if (sourceT == null)
|
||||
{
|
||||
destT = null;
|
||||
return;
|
||||
}
|
||||
|
||||
PropertyInfo[] propDest = destT.GetType().GetProperties();//.Where(p => !(p.GetMethod.IsVirtual && !p.GetMethod.IsFinal)).ToArray();
|
||||
PropertyInfo[] propSource = sourceT.GetType().GetProperties();
|
||||
|
||||
Array.ForEach(propDest, prop =>
|
||||
{
|
||||
if (exceptionProps == null || !exceptionProps.Contains(prop.Name))
|
||||
{
|
||||
if (prop.CanWrite)
|
||||
{
|
||||
PropertyInfo propS = propSource.FirstOrDefault(p => p.Name == prop.Name);
|
||||
if (propS != null && propS.CanRead)
|
||||
{
|
||||
prop.SetValue(destT, propS.GetValue(sourceT));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//RtlMoveMemory
|
||||
[DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory", SetLastError = false)]
|
||||
public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);
|
||||
[HandleProcessCorruptedStateExceptions]
|
||||
//public static Bitmap CopyBitmap(this Bitmap source)
|
||||
//{
|
||||
// Bitmap clone = new Bitmap(source.Width, source.Height, source.PixelFormat);
|
||||
// try
|
||||
// {
|
||||
// int PixelSize = Bitmap.GetPixelFormatSize(source.PixelFormat) / 8;
|
||||
// if (PixelSize == 1)
|
||||
// {
|
||||
// ColorPalette cp = clone.Palette;
|
||||
// for (int i = 0; i < 256; i++)
|
||||
// {
|
||||
// cp.Entries[i] = Color.FromArgb(255, i, i, i);
|
||||
// }
|
||||
// clone.Palette = cp;
|
||||
// }
|
||||
|
||||
// Rectangle rect = new Rectangle(0, 0, source.Width, source.Height);
|
||||
// BitmapData sourceData = source.LockBits(rect, ImageLockMode.ReadWrite, source.PixelFormat);
|
||||
// BitmapData cloneData = clone.LockBits(rect, ImageLockMode.ReadWrite, source.PixelFormat);
|
||||
// if (source.Width % 4 == 0)
|
||||
// {
|
||||
// unsafe
|
||||
// {
|
||||
// CopyMemory(cloneData.Scan0, sourceData.Scan0, (uint)(sourceData.Stride * sourceData.Height));
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Parallel.For(0, source.Height, h =>
|
||||
// {
|
||||
// unsafe
|
||||
// {
|
||||
// CopyMemory(cloneData.Scan0 + h * sourceData.Stride, sourceData.Scan0 + h * sourceData.Stride, (uint)sourceData.Width);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
|
||||
// clone.UnlockBits(cloneData);
|
||||
// source.UnlockBits(sourceData);
|
||||
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// return clone;
|
||||
// }
|
||||
|
||||
// return clone;
|
||||
//}
|
||||
public static Bitmap CopyBitmap(this Bitmap source)
|
||||
{
|
||||
Bitmap clone = new Bitmap(source.Width, source.Height, source.PixelFormat);
|
||||
|
||||
try
|
||||
{
|
||||
int pixelSize = Bitmap.GetPixelFormatSize(source.PixelFormat) / 8;
|
||||
if (pixelSize == 1)
|
||||
{
|
||||
ColorPalette cp = clone.Palette;
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
cp.Entries[i] = Color.FromArgb(255, i, i, i);
|
||||
}
|
||||
clone.Palette = cp;
|
||||
}
|
||||
|
||||
Rectangle rect = new Rectangle(0, 0, source.Width, source.Height);
|
||||
BitmapData sourceData = source.LockBits(rect, ImageLockMode.ReadOnly, source.PixelFormat);
|
||||
BitmapData cloneData = clone.LockBits(rect, ImageLockMode.WriteOnly, source.PixelFormat);
|
||||
|
||||
int stride = sourceData.Stride;
|
||||
int height = sourceData.Height;
|
||||
|
||||
if (stride % 4 == 0)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
CopyMemory(cloneData.Scan0, sourceData.Scan0, (uint)(stride * height));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Parallel.For(0, height, h =>
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
CopyMemory(cloneData.Scan0 + h * stride, sourceData.Scan0 + h * stride, (uint)stride);
|
||||
}
|
||||
});
|
||||
}
|
||||
source.UnlockBits(sourceData); clone.UnlockBits(cloneData);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{ // Handle or log exception if needed
|
||||
} return clone; }
|
||||
|
||||
|
||||
public static Bitmap BitmapDeepClone(Bitmap source)
|
||||
{
|
||||
Bitmap clone = new Bitmap(source.Width, source.Height, source.PixelFormat);
|
||||
|
||||
try
|
||||
{
|
||||
int PixelSize = Bitmap.GetPixelFormatSize(source.PixelFormat) / 8;
|
||||
if (PixelSize == 1)
|
||||
{
|
||||
ColorPalette cp = clone.Palette;
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
cp.Entries[i] = Color.FromArgb(255, i, i, i);
|
||||
}
|
||||
clone.Palette = cp;
|
||||
}
|
||||
Rectangle rect = new Rectangle(0, 0, source.Width, source.Height);
|
||||
BitmapData source_bitmap = source.LockBits(rect, ImageLockMode.ReadWrite, source.PixelFormat);
|
||||
BitmapData destination_bitmap = clone.LockBits(rect, ImageLockMode.ReadWrite, clone.PixelFormat);
|
||||
|
||||
int depth_width = source_bitmap.Width * PixelSize;
|
||||
|
||||
unsafe
|
||||
{
|
||||
byte* source_ptr = (byte*)source_bitmap.Scan0;
|
||||
byte* destination_ptr = (byte*)destination_bitmap.Scan0;
|
||||
|
||||
int offset = source_bitmap.Stride - depth_width;
|
||||
|
||||
for (int i = 0; i < source_bitmap.Height; i++)
|
||||
{
|
||||
for (int j = 0; j < depth_width; j++, source_ptr++, destination_ptr++)
|
||||
{
|
||||
*destination_ptr = *source_ptr;
|
||||
}
|
||||
|
||||
source_ptr += offset;
|
||||
destination_ptr += offset;
|
||||
}
|
||||
}
|
||||
|
||||
source.UnlockBits(source_bitmap);
|
||||
clone.UnlockBits(destination_bitmap);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
return clone;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static Bitmap HConnectBitmap(this Bitmap map1, Bitmap map2)
|
||||
{
|
||||
Bitmap connectImage = null;
|
||||
if (map1 == null || map2 == null)
|
||||
return null;
|
||||
//横向拼接
|
||||
int width = map1.Width + map2.Width;
|
||||
//高度不变
|
||||
int height = Math.Max(map1.Height, map2.Height);
|
||||
connectImage = new Bitmap(width, height);
|
||||
using (Graphics graph = Graphics.FromImage(connectImage))
|
||||
{
|
||||
graph.DrawImage(connectImage, width, height);
|
||||
graph.Clear(System.Drawing.Color.White);
|
||||
graph.DrawImage(map1, 0, 0);
|
||||
graph.DrawImage(map2, map1.Width, 0);
|
||||
}
|
||||
return connectImage;
|
||||
}
|
||||
|
||||
public static IntPtr FloatToIntptr(float[] bytes)
|
||||
{
|
||||
GCHandle hObject = GCHandle.Alloc(bytes, GCHandleType.Pinned);
|
||||
return hObject.AddrOfPinnedObject();
|
||||
}
|
||||
|
||||
// 将Btimap类转换为byte[]类函数
|
||||
public static byte[] GetBGRValues(Bitmap bmp, out int stride)
|
||||
{
|
||||
var rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
|
||||
var bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat);
|
||||
stride = bmpData.Stride;
|
||||
var rowBytes = bmpData.Width * Image.GetPixelFormatSize(bmp.PixelFormat) / 8;
|
||||
var imgBytes = bmp.Height * rowBytes;
|
||||
byte[] rgbValues = new byte[imgBytes];
|
||||
IntPtr ptr = bmpData.Scan0;
|
||||
for (var i = 0; i < bmp.Height; i++)
|
||||
{
|
||||
Marshal.Copy(ptr, rgbValues, i * rowBytes, rowBytes);
|
||||
ptr += bmpData.Stride;
|
||||
}
|
||||
bmp.UnlockBits(bmpData);
|
||||
return rgbValues;
|
||||
}
|
||||
/// <summary>
|
||||
/// 缺陷灰度图转彩色图像函数
|
||||
/// </summary>
|
||||
/// <param name="src">灰度图</param>
|
||||
/// <returns>返回构造的伪彩色图像</returns>
|
||||
public static Bitmap GrayMapToColorMap(this Bitmap src, Dictionary<int, Color> indexColorDict = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
//Stopwatch sw = new Stopwatch();
|
||||
//sw.Start();
|
||||
|
||||
Bitmap dest = new Bitmap(src.Width, src.Height, PixelFormat.Format32bppArgb);
|
||||
|
||||
int destHeight = dest.Height;
|
||||
int destWidth = dest.Width;
|
||||
|
||||
Rectangle rect = new Rectangle(0, 0, destWidth, destHeight);
|
||||
BitmapData bmpDataDest = dest.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
|
||||
BitmapData bmpDataSrc = src.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed);
|
||||
int strideDest = bmpDataDest.Stride;
|
||||
|
||||
int strideSrc = bmpDataSrc.Stride;
|
||||
unsafe
|
||||
{
|
||||
byte* pDest = (byte*)bmpDataDest.Scan0.ToPointer();
|
||||
byte* pSrc = (byte*)bmpDataSrc.Scan0.ToPointer();
|
||||
|
||||
Parallel.For(0, destHeight, y =>
|
||||
{
|
||||
Parallel.For(0, destWidth, x =>
|
||||
{
|
||||
int pixel = pSrc[y * strideSrc + x];
|
||||
int startIndex = y * strideDest + x * 4;
|
||||
if (pixel >= 0 && pixel <= 63)
|
||||
{
|
||||
Color color = Color.Red;
|
||||
if (indexColorDict != null && indexColorDict.ContainsKey(pixel))
|
||||
{
|
||||
color = indexColorDict[pixel];
|
||||
}
|
||||
|
||||
byte R = color.R;
|
||||
byte G = color.G;
|
||||
byte B = color.B;
|
||||
|
||||
pDest[startIndex] = B;
|
||||
pDest[startIndex + 1] = G;
|
||||
pDest[startIndex + 2] = R;
|
||||
pDest[startIndex + 3] = 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
pDest[startIndex] = 255;
|
||||
pDest[startIndex + 1] = 255;
|
||||
pDest[startIndex + 2] = 255;
|
||||
pDest[startIndex + 3] = 0;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
dest.UnlockBits(bmpDataDest);
|
||||
src.UnlockBits(bmpDataSrc);
|
||||
|
||||
//sw.Stop();
|
||||
//Console.WriteLine($"转换耗时:{sw.ElapsedMilliseconds}");
|
||||
|
||||
return dest;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Sort<T>(this ObservableCollection<T> collection) where T : IComparable<T>
|
||||
{
|
||||
List<T> sortedList = collection.OrderByDescending(x => x).ToList();//这里用降序
|
||||
for (int i = 0; i < sortedList.Count(); i++)
|
||||
{
|
||||
collection.Move(collection.IndexOf(sortedList[i]), i);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得字符串中开始和结束字符串中间的值
|
||||
/// </summary>
|
||||
/// <param name="sourse"></param>
|
||||
/// <param name="startstr"></param>
|
||||
/// <param name="endstr"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetMidString(string sourse, string startstr, string endstr)
|
||||
{
|
||||
string result = string.Empty;
|
||||
int startindex, endindex;
|
||||
try
|
||||
{
|
||||
startindex = sourse.IndexOf(startstr);
|
||||
if (startindex == -1)
|
||||
return result;
|
||||
string tmpstr = sourse.Substring(startindex + startstr.Length);
|
||||
endindex = tmpstr.IndexOf(endstr);
|
||||
if (endindex == -1)
|
||||
return result;
|
||||
result = tmpstr.Remove(endindex);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得字符串中开始和结束字符串中间的值
|
||||
/// </summary>
|
||||
/// <param name="t">字符串</param>
|
||||
/// <param name="k">开始</param>
|
||||
/// <param name="j">结束</param>
|
||||
/// <returns></returns>
|
||||
private static string GetMidString2(string sourse, string startstr, string endstr) //截取指定文本,和易语言的取文本中间差不多
|
||||
{
|
||||
try //异常捕捉
|
||||
{
|
||||
var kn = sourse.IndexOf(startstr, StringComparison.Ordinal) + startstr.Length;
|
||||
var jn = sourse.IndexOf(endstr, kn, StringComparison.Ordinal);
|
||||
return sourse.Substring(kn, jn - kn);
|
||||
}
|
||||
catch //如果发现未知的错误,比如上面的代码出错了,就执行下面这句代码
|
||||
{
|
||||
return ""; //返回空
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 布尔类型转换为整型
|
||||
public static int ToInt(this object obj)
|
||||
{
|
||||
if (Convert.ToBoolean(obj) == true)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 整型转换为布尔类型
|
||||
public static bool ToBool(this object obj)
|
||||
{
|
||||
if (Convert.ToInt32(obj) == 1)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public static object GetProperty(this object o, string member)
|
||||
{
|
||||
if (o == null) throw new ArgumentNullException("o");
|
||||
if (member == null) throw new ArgumentNullException("member");
|
||||
Type scope = o.GetType();
|
||||
IDynamicMetaObjectProvider provider = o as IDynamicMetaObjectProvider;
|
||||
if (provider != null)
|
||||
{
|
||||
ParameterExpression param = Expression.Parameter(typeof(object));
|
||||
DynamicMetaObject mobj = provider.GetMetaObject(param);
|
||||
GetMemberBinder binder = (GetMemberBinder)Microsoft.CSharp.RuntimeBinder.Binder.GetMember(0, member, scope, new CSharpArgumentInfo[] { CSharpArgumentInfo.Create(0, null) });
|
||||
DynamicMetaObject ret = mobj.BindGetMember(binder);
|
||||
BlockExpression final = Expression.Block(
|
||||
Expression.Label(CallSiteBinder.UpdateLabel),
|
||||
ret.Expression
|
||||
);
|
||||
LambdaExpression lambda = Expression.Lambda(final, param);
|
||||
Delegate del = lambda.Compile();
|
||||
return del.DynamicInvoke(o);
|
||||
}
|
||||
else
|
||||
{
|
||||
return o.GetType().GetProperty(member, BindingFlags.Public | BindingFlags.Instance).GetValue(o, null);
|
||||
}
|
||||
}
|
||||
|
||||
#region 检测文件状态及操作方式选择
|
||||
[DllImport("kernel32.dll")]
|
||||
private static extern IntPtr _lopen(string lpPathName, int iReadWrite);
|
||||
[DllImport("kernel32.dll")]
|
||||
private static extern bool CloseHandle(IntPtr hObject);
|
||||
private const int OF_READWRITE = 2;
|
||||
private const int OF_SHARE_DENY_NONE = 0x40;
|
||||
private static readonly IntPtr HFILE_ERROR = new IntPtr(-1);
|
||||
/// <summary>
|
||||
/// 检测文件是否只读或被使用
|
||||
/// </summary>
|
||||
/// <param name="FileNames">要检测的文件</param>
|
||||
/// <returns>true可用,false在用或只读</returns>
|
||||
public static bool CheckFilesCanUse(string fileName)
|
||||
{
|
||||
if (!File.Exists(fileName))
|
||||
return true;//文件不存在
|
||||
if ((File.GetAttributes(fileName) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
|
||||
return false; //文件只读
|
||||
IntPtr vHandle = _lopen(fileName, OF_READWRITE | OF_SHARE_DENY_NONE);
|
||||
if (vHandle == HFILE_ERROR)
|
||||
{
|
||||
CloseHandle(vHandle);
|
||||
return false; //文件被占用
|
||||
}
|
||||
|
||||
CloseHandle(vHandle); //文件没被占用
|
||||
return true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 获取指定文件夹下所有的文件名称
|
||||
/// </summary>
|
||||
/// <param name="folderName">指定文件夹名称,绝对路径</param>
|
||||
/// <param name="fileFilter">文件类型过滤,根据文件后缀名,如:*,*.txt,*.xls</param>
|
||||
/// <param name="isContainSubFolder">是否包含子文件夹</param>
|
||||
/// <returns>ArrayList数组,为所有需要的文件路径名称</returns>
|
||||
public static List<FileInfo> GetAllFilesByFolder(string folderName, string fileFilter, bool isContainSubFolder = false)
|
||||
{
|
||||
List<FileInfo> resList = new List<FileInfo>();
|
||||
try
|
||||
{
|
||||
DirectoryInfo currDir = new DirectoryInfo(folderName);//当前目录
|
||||
FileInfo[] currFiles = currDir.GetFiles(fileFilter);//当前目录文件
|
||||
foreach (FileInfo file in currFiles)
|
||||
{
|
||||
if (fileFilter.ToLower().IndexOf(file.Extension.ToLower()) >= 0)
|
||||
{
|
||||
resList.Add(file);
|
||||
}
|
||||
}
|
||||
if (isContainSubFolder)
|
||||
{
|
||||
string[] subFolders = Directory.GetDirectories(folderName);
|
||||
foreach (string subFolder in subFolders)
|
||||
{
|
||||
resList.AddRange(GetAllFilesByFolder(subFolder, fileFilter));//递归
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
return resList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取指定文件夹下所有的文件名称,不过滤文件类型
|
||||
/// </summary>
|
||||
/// <param name="folderName">指定文件夹名称,绝对路径</param>
|
||||
/// <param name="isContainSubFolder">是否包含子文件夹</param>
|
||||
/// <returns>ArrayList数组,为所有需要的文件路径名称</returns>
|
||||
public static List<FileInfo> GetAllFilesByFolder(string folderName, bool isContainSubFolder)
|
||||
{
|
||||
return GetAllFilesByFolder(folderName, "*", isContainSubFolder);
|
||||
}
|
||||
}
|
||||
|
||||
public class Compare<T, C> : IEqualityComparer<T>
|
||||
{
|
||||
private Func<T, C> _getField;
|
||||
public Compare(Func<T, C> getfield)
|
||||
{
|
||||
_getField = getfield;
|
||||
}
|
||||
public bool Equals(T x, T y)
|
||||
{
|
||||
return EqualityComparer<C>.Default.Equals(_getField(x), _getField(y));
|
||||
}
|
||||
public int GetHashCode(T obj)
|
||||
{
|
||||
return EqualityComparer<C>.Default.GetHashCode(_getField(obj));
|
||||
}
|
||||
}
|
||||
|
||||
public static class ObjectExtensions
|
||||
{
|
||||
public static IEnumerable<T> DistinctBy<T, C>(this IEnumerable<T> source, Func<T, C> getfield)
|
||||
{
|
||||
return source.Distinct(new Compare<T, C>(getfield));
|
||||
}
|
||||
|
||||
public static IQueryable<T> DistinctBy<T, C>(this IQueryable<T> source, Func<T, C> getfield)
|
||||
{
|
||||
return source.Distinct(new Compare<T, C>(getfield));
|
||||
}
|
||||
}
|
||||
}
|
109
DH.Commons/Interface/Spec.cs
Normal file
@ -0,0 +1,109 @@
|
||||
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing.Design;
|
||||
|
||||
namespace DH.Commons.Enums
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 标准配置
|
||||
/// </summary>
|
||||
public class Spec
|
||||
{
|
||||
[Category("通用配置")]
|
||||
[Description("标准代码")]
|
||||
public virtual string Code { get; set; }
|
||||
|
||||
[Category("通用配置")]
|
||||
[Description("启用状态,true:启用;false:禁用")]
|
||||
[DisplayName("启用状态")]
|
||||
public bool IsEnabled { get; set; }
|
||||
|
||||
[Category("标准配置")]
|
||||
[Description("标准值")]
|
||||
[DisplayName("标准值")]
|
||||
public double StandardValue { get; set; }
|
||||
|
||||
[Category("标准配置")]
|
||||
[Description("正公差")]
|
||||
[DisplayName("正公差")]
|
||||
public double Tolrenance_Positive { get; set; }
|
||||
|
||||
[Category("标准配置")]
|
||||
[Description("负公差")]
|
||||
[DisplayName("负公差")]
|
||||
public double Tolrenance_Negative { get; set; }
|
||||
|
||||
protected double? actualValue = null;
|
||||
[Browsable(false)]
|
||||
|
||||
public virtual double? ActualValue
|
||||
{
|
||||
get
|
||||
{
|
||||
return actualValue;
|
||||
}
|
||||
set
|
||||
{
|
||||
//if (actualValue != value && value != null)
|
||||
if (value != null)
|
||||
{
|
||||
if (value.Value >= (StandardValue - Tolrenance_Negative) && value.Value <= (StandardValue + Tolrenance_Positive))
|
||||
{
|
||||
MeasureResult = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
MeasureResult = false;
|
||||
}
|
||||
}
|
||||
|
||||
actualValue = value;
|
||||
}
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
|
||||
public bool? MeasureResult { get; set; } = null;
|
||||
|
||||
|
||||
public Spec Copy()
|
||||
{
|
||||
Spec spec = new Spec();
|
||||
|
||||
spec.Code = this.Code;
|
||||
spec.IsEnabled = this.IsEnabled;
|
||||
spec.StandardValue = this.StandardValue;
|
||||
spec.Tolrenance_Positive = this.Tolrenance_Positive;
|
||||
spec.Tolrenance_Negative = this.Tolrenance_Negative;
|
||||
|
||||
return spec;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class IndexedSpec : Spec
|
||||
{
|
||||
[Category("数据源配置")]
|
||||
[Description("数据源输出索引")]
|
||||
[DisplayName("数据源输出索引")]
|
||||
public int OutputIndex { get; set; }
|
||||
|
||||
public new IndexedSpec Copy()
|
||||
{
|
||||
IndexedSpec spec = new IndexedSpec();
|
||||
|
||||
spec.Code = this.Code;
|
||||
spec.IsEnabled = this.IsEnabled;
|
||||
spec.StandardValue = this.StandardValue;
|
||||
spec.Tolrenance_Positive = this.Tolrenance_Positive;
|
||||
spec.Tolrenance_Negative = this.Tolrenance_Negative;
|
||||
|
||||
spec.OutputIndex = this.OutputIndex;
|
||||
|
||||
return spec;
|
||||
}
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
|
||||
namespace DH.Commons.Models
|
||||
{
|
||||
@ -14,7 +15,10 @@ namespace DH.Commons.Models
|
||||
/// </summary>
|
||||
public static string CurrentScheme=string.Empty;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 当前状态
|
||||
/// </summary>
|
||||
public static EnumStatus CurrentStatus =EnumStatus.未运行;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -25,5 +29,6 @@ namespace DH.Commons.Models
|
||||
public static List<CameraBase> CameraBaseList = new List<CameraBase>();
|
||||
public static List<PLCBase> PLCBaseList = new List<PLCBase>();
|
||||
public static List<DetectionConfig> DetectionList = new List<DetectionConfig>();
|
||||
public static List<GlobalConfig> GlobalList = new List<GlobalConfig>();
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +1,21 @@
|
||||
using System.Diagnostics;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Diagnostics;
|
||||
using System.Reflection.Metadata;
|
||||
using System.Xml.Linq;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Commons.Helper;
|
||||
using DVPCameraType;
|
||||
using OpenCvSharp;
|
||||
using OpenCvSharp.Extensions;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
|
||||
using LogLevel = DH.Commons.Enums.EnumHelper.LogLevel;
|
||||
|
||||
|
||||
namespace DH.Devices.Camera
|
||||
{
|
||||
|
||||
public class Do3ThinkCamera : CameraBase
|
||||
public class Do3ThinkCamera : CameraBase, ILogger
|
||||
{
|
||||
|
||||
private dvpCameraInfo stDevInfo = new dvpCameraInfo();
|
||||
@ -24,9 +28,17 @@ namespace DH.Devices.Camera
|
||||
public dvpStreamFormat dvpStreamFormat = dvpStreamFormat.S_RGB24;
|
||||
public int m_CamCount = 0;
|
||||
public Double m_dfDisplayCount = 0;
|
||||
|
||||
public LoggerHelper LoggerHelper { get; set; } = new LoggerHelper();
|
||||
public event Action<LogMsg> OnLog;
|
||||
public ConcurrentDictionary<string, MatSet> _imageSetList = new ConcurrentDictionary<string, MatSet>();
|
||||
|
||||
|
||||
public Do3ThinkCamera()
|
||||
{
|
||||
|
||||
LoggerHelper.LogPath = "D://";
|
||||
LoggerHelper.LogPrefix = CameraName;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -130,41 +142,43 @@ namespace DH.Devices.Camera
|
||||
throw new Exception($"Start grabbing failed:{nRet:x8}");
|
||||
}
|
||||
//// 曝光
|
||||
//if (IIConfig.DefaultExposure != 0)
|
||||
//{
|
||||
// SetExposure(IIConfig.DefaultExposure);
|
||||
//}
|
||||
if (Exposure != 0)
|
||||
{
|
||||
SetExposure(Exposure);
|
||||
}
|
||||
//// 增益
|
||||
//if (IIConfig.Gain >= 0)
|
||||
//{
|
||||
// SetGain(IIConfig.Gain);
|
||||
//}
|
||||
//SetPictureRoi(IIConfig.VelocityPara.A_Pic_X, IIConfig.VelocityPara.A_Pic_Y, IIConfig.VelocityPara.Width, IIConfig.VelocityPara.Hight);
|
||||
if (Gain >= 0)
|
||||
{
|
||||
SetGain(Gain);
|
||||
}
|
||||
//全画幅
|
||||
if(!IsAllPicEnabled)
|
||||
SetPictureRoi((int)ROIX, (int)ROIY, (int)ROIW, (int)ROIH);
|
||||
|
||||
//// 设置 触发延迟
|
||||
//if (IIConfig.TriggerDelay > 0)
|
||||
//{
|
||||
// nRet = DVPCamera.dvpSetTriggerDelay(m_handle, IIConfig.TriggerDelay);
|
||||
// if (nRet != dvpStatus.DVP_STATUS_OK)
|
||||
// {
|
||||
// throw new Exception("Set TriggerDelay failed!");
|
||||
// }
|
||||
//}
|
||||
if (TriggerDelay > 0)
|
||||
{
|
||||
nRet = DVPCamera.dvpSetTriggerDelay(m_handle, TriggerDelay);
|
||||
if (nRet != dvpStatus.DVP_STATUS_OK)
|
||||
{
|
||||
throw new Exception("Set TriggerDelay failed!");
|
||||
}
|
||||
}
|
||||
|
||||
//// 信号消抖
|
||||
//if (IIConfig.LineDebouncerTime > 0)
|
||||
//{
|
||||
// nRet = DVPCamera.dvpSetTriggerJitterFilter(m_handle, IIConfig.LineDebouncerTime);
|
||||
// if (nRet != dvpStatus.DVP_STATUS_OK)
|
||||
// {
|
||||
// throw new Exception($"LineDebouncerTime set failed:{nRet}");
|
||||
// }
|
||||
//}
|
||||
if (LineDebouncerTime > 0)
|
||||
{
|
||||
nRet = DVPCamera.dvpSetTriggerJitterFilter(m_handle, LineDebouncerTime);
|
||||
if (nRet != dvpStatus.DVP_STATUS_OK)
|
||||
{
|
||||
throw new Exception($"LineDebouncerTime set failed:{nRet}");
|
||||
}
|
||||
}
|
||||
|
||||
//IIConfig.PropertyChanged -= IIConfig_PropertyChanged;
|
||||
//IIConfig.PropertyChanged += IIConfig_PropertyChanged;
|
||||
|
||||
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -351,9 +365,17 @@ namespace DH.Devices.Camera
|
||||
break;
|
||||
}
|
||||
Mat smat = cvImage.Clone();
|
||||
var imageSet = new MatSet
|
||||
{
|
||||
|
||||
_mat = smat,
|
||||
|
||||
};
|
||||
InitialImageSet(imageSet);
|
||||
OnHImageOutput?.Invoke(DateTime.Now, this, smat);
|
||||
|
||||
|
||||
//存图
|
||||
DisplayAndSaveOriginImage(imageSet.Id,SnapshotCount);
|
||||
|
||||
|
||||
|
||||
@ -369,7 +391,86 @@ namespace DH.Devices.Camera
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
public void InitialImageSet(MatSet set)
|
||||
{
|
||||
//if (saveOption != null)
|
||||
//{
|
||||
// set.ImageSaveOption = saveOption.Copy();
|
||||
//}
|
||||
|
||||
//set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage;
|
||||
//set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage;
|
||||
//set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType);
|
||||
set.CameraId = this.CameraName;
|
||||
|
||||
set.ImageTime = DateTime.Now;
|
||||
_imageSetList[set.Id] = set;
|
||||
}
|
||||
|
||||
public virtual async void DisplayAndSaveOriginImage(string imgSetId, int _counter)
|
||||
{
|
||||
MatSet set = _imageSetList.Values.FirstOrDefault(u => u.Id == imgSetId);
|
||||
|
||||
if (set != null && set._mat != null)
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
Bitmap showImage = set._mat.ToBitmap();
|
||||
// showImage.Save("D:/test333.bmp");
|
||||
// Marshal.Copy(pbyteImageBuffer, 0, (IntPtr)lAddrImage, (int)dwBufferSize);
|
||||
// Bitmap saveImage = showImage?.CopyBitmap();
|
||||
// saveImage.Save("d://TEST444.BMP");
|
||||
// OnShowImageUpdated?.Invoke(this, showImage, imgSetId);
|
||||
if (IsSavePicEnabled)
|
||||
{
|
||||
string fullname = Path.Combine(ImageSaveDirectory, $"{CameraName}_{_counter:D7}_{set.Id}.{set._imageFormat.ToString().ToLower()}");
|
||||
ImageSaveAsync(fullname, showImage);
|
||||
}
|
||||
|
||||
//释放 himage
|
||||
ClearImageSet(set);
|
||||
});
|
||||
}
|
||||
}
|
||||
static object _imageSetLock = new object();
|
||||
public void ClearImageSet(MatSet set)
|
||||
{
|
||||
try
|
||||
{
|
||||
bool flag = false;
|
||||
lock (_imageSetLock)
|
||||
{
|
||||
flag = _imageSetList.TryRemove(set.Id, out set);
|
||||
if (flag)
|
||||
{
|
||||
set.Dispose();
|
||||
}
|
||||
//LogAsync(DateTime.Now, $"{Name}移除图片信息{(flag ? "成功" : "失败")},当前缓存数量:{_imageSetList.Count}", "");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"清理图片缓存异常,当前缓存数量{_imageSetList.Count},{ex.GetExceptionMessage()}");
|
||||
}
|
||||
}
|
||||
public ImageSaveHelper ImageSaveHelper { get; set; } = new ImageSaveHelper();
|
||||
public virtual void ImageSaveAsync(string fullName, Bitmap map)
|
||||
{
|
||||
if (!IsSavePicEnabled)
|
||||
{
|
||||
map?.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
ImageSaveSet imageSaveSet = new ImageSaveSet()
|
||||
{
|
||||
FullName = fullName,
|
||||
SaveImage = map,
|
||||
|
||||
};
|
||||
|
||||
ImageSaveHelper.ImageSaveAsync(imageSaveSet);
|
||||
}
|
||||
public override bool CameraDisConnect()
|
||||
{
|
||||
try
|
||||
@ -411,6 +512,22 @@ namespace DH.Devices.Camera
|
||||
|
||||
}
|
||||
|
||||
public void LogAsync(LogMsg msg)
|
||||
{
|
||||
msg.MsgSource = CameraName;
|
||||
msg.ThreadId = Thread.CurrentThread.ManagedThreadId;
|
||||
|
||||
//OnLog?.BeginInvoke(msg, null, null);
|
||||
OnLog?.Invoke(msg);
|
||||
|
||||
//if (InitialConfig.IsEnableLog)
|
||||
{
|
||||
LoggerHelper.LogAsync(msg);
|
||||
}
|
||||
}
|
||||
public void LogAsync(DateTime dt, LogLevel logLevel, string msg)
|
||||
{
|
||||
LogAsync(new LogMsg(dt, logLevel, msg));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,14 @@
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<Optimize>False</Optimize>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Optimize>False</Optimize>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -104,18 +104,18 @@ namespace DH.Devices.Vision
|
||||
// json = "{\"FastDetResult\":[{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.654843,\"rect\":[175,99,110,594]},{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.654589,\"rect\":[2608,19,104,661]},{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.654285,\"rect\":[1275,19,104,662]},{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.620762,\"rect\":[1510,95,107,600]},{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.617812,\"rect\":[2844,93,106,602]}]}";
|
||||
//
|
||||
Console.WriteLine("检测结果JSON:" + json);
|
||||
#pragma warning disable CS8600 // 将 null 字面量或可能为 null 的值转换为非 null 类型。
|
||||
|
||||
HYoloResult detResult = JsonConvert.DeserializeObject<HYoloResult>(json);
|
||||
#pragma warning restore CS8600 // 将 null 字面量或可能为 null 的值转换为非 null 类型。
|
||||
|
||||
if (detResult == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int iNum = detResult.HYolo.Count;
|
||||
#pragma warning disable CS0219 // 变量已被赋值,但从未使用过它的值
|
||||
|
||||
int IokNum = 0;
|
||||
#pragma warning restore CS0219 // 变量已被赋值,但从未使用过它的值
|
||||
|
||||
for (int ix = 0; ix < iNum; ix++)
|
||||
{
|
||||
var det = detResult.HYolo[ix];
|
||||
@ -145,7 +145,6 @@ namespace DH.Devices.Vision
|
||||
Mat originMat = new Mat();
|
||||
Mat detectMat = new Mat();
|
||||
|
||||
#pragma warning disable CS0168 // 声明了变量,但从未使用过
|
||||
try
|
||||
{
|
||||
if (req.mImage == null)
|
||||
|
@ -281,7 +281,7 @@ namespace DH.Devices.Vision
|
||||
|
||||
// GC.Collect();
|
||||
}
|
||||
#pragma warning restore CS0168 // 声明了变量,但从未使用过
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Commons.Helper;
|
||||
using DH.UI.Model.Winform;
|
||||
using HalconDotNet;
|
||||
using OpenCvSharp;
|
||||
@ -7,6 +8,8 @@ using OpenCvSharp.Extensions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.Eventing.Reader;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Linq;
|
||||
using System.Runtime.ExceptionServices;
|
||||
using System.Text;
|
||||
@ -15,6 +18,7 @@ using System.Windows.Forms;
|
||||
using System.Xml.Linq;
|
||||
using XKRS.UI.Model.Winform;
|
||||
using static DH.Commons.Enums.EnumHelper;
|
||||
using LogLevel = DH.Commons.Enums.EnumHelper.LogLevel;
|
||||
using ResultState = DH.Commons.Base.ResultState;
|
||||
|
||||
|
||||
@ -36,7 +40,20 @@ namespace DH.Devices.Vision
|
||||
// ImageSaveHelper.OnImageSaveExceptionRaised += ImageSaveHelper_OnImageSaveExceptionRaised;
|
||||
// base.Init();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
SimboStationMLEngineList.ToList().ForEach(sm =>
|
||||
{
|
||||
if (sm.IsUseGPU)
|
||||
{
|
||||
sm.StationMLEngine.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
sm.StationMLEngine.Dispose2();
|
||||
}
|
||||
});
|
||||
}
|
||||
//private void ImageSaveHelper_OnImageSaveExceptionRaised(DateTime dt, string msg)
|
||||
//{
|
||||
// LogAsync(new LogMsg(dt, LogLevel.Error, msg));
|
||||
@ -57,16 +74,30 @@ namespace DH.Devices.Vision
|
||||
|
||||
if (detectConfig == null)
|
||||
{
|
||||
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"异常:未能获取检测配置");
|
||||
//未能获得检测配置
|
||||
return detectResult;
|
||||
}
|
||||
detectResult.DetectName = detectConfig.Name;
|
||||
detectResult.ImageSaveDirectory=detectConfig.ImageSaveDirectory;
|
||||
detectResult.SaveNGDetect=detectConfig.SaveNGDetect;
|
||||
detectResult.SaveNGOriginal=detectConfig.SaveNGOriginal;
|
||||
detectResult.SaveOKDetect=detectConfig.SaveOKDetect;
|
||||
detectResult.SaveOKOriginal=detectConfig.SaveOKOriginal;
|
||||
Mat OriginImage = originImgSet.Clone();
|
||||
detectResult.DetectionOriginImage = CopyBitmapWithLockBits(OriginImage.ToBitmap());
|
||||
//detectResult.DetectionOriginImage = originImgSet.Clone().ToBitmap();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
#region 1.预处理
|
||||
|
||||
sw.Start();
|
||||
using (Mat PreTMat = originImgSet.Clone())
|
||||
{
|
||||
PreTreated(detectConfig, detectResult, PreTMat);
|
||||
PreTreated2(detectConfig, detectResult, PreTMat);
|
||||
}
|
||||
sw.Stop();
|
||||
LogAsync(DateTime.Now, LogLevel.Information, $"产品:{detectResult.Pid} {detectConfig.Name}预处理耗时:{sw.ElapsedMilliseconds}ms。SpecsResults:{string.Join(";", detectResult.realSpecs.Select(u => $"{u.Code} {u.ActualValue}"))}");
|
||||
// 工位2尺寸测量
|
||||
|
||||
|
||||
|
||||
@ -98,7 +129,7 @@ namespace DH.Devices.Vision
|
||||
}
|
||||
|
||||
#region 2.深度学习推理
|
||||
//LogAsync(DateTime.Now, LogLevel.Information, $"{detectConfig.Name} 产品{detectResult.TempPid} 模型检测执行");
|
||||
LogAsync(DateTime.Now, LogLevel.Information, $"{detectConfig.Name} 产品{detectResult.TempPid} 模型检测执行");
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(detectConfig.ModelPath))
|
||||
{
|
||||
@ -140,8 +171,8 @@ namespace DH.Devices.Vision
|
||||
// LogAsync(DateTime.Now, LogLevel.Information, $"{detectConfig.Name} 产品{detectResult.TempPid} RunInference BEGIN");
|
||||
mlWatch.Start();
|
||||
//20230802改成多线程推理 RunInferenceFixed
|
||||
|
||||
var result = mlSet.StationMLEngine.RunInference(req);
|
||||
// MLResult result = new MLResult();
|
||||
var result = mlSet.StationMLEngine.RunInference(req);
|
||||
// var result = mlSet.StationMLEngine.RunInferenceFixed(req);
|
||||
mlWatch.Stop();
|
||||
// LogAsync(DateTime.Now, LogLevel.Information, $"{detectConfig.Name} 产品{detectResult.TempPid} RunInference END");
|
||||
@ -180,6 +211,8 @@ namespace DH.Devices.Vision
|
||||
|
||||
if (result == null || (result != null && !result.IsSuccess))
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"CoreInx:{mlSet.GPUNo} 产品:{detectResult.Pid} {detectConfig.Name} 模型检测异常,{result?.ResultMessage}");
|
||||
|
||||
detectResult.IsMLDetectDone = false;
|
||||
}
|
||||
if (result != null && result.IsSuccess)
|
||||
@ -187,9 +220,13 @@ namespace DH.Devices.Vision
|
||||
detectResult.DetectDetails = result.ResultDetails;
|
||||
if (detectResult.DetectDetails != null)
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Information, $"CoreInx:{mlSet.GPUNo} 产品:{detectResult.Pid} {detectResult.DetectName} 模型检测总耗时:{mlWatch.ElapsedMilliseconds} ms {result.ResultMessage},{string.Join(";", detectResult.DetectDetails.Select(u => $"{u.LabelName} X:{u.Rect.X} Y:{u.Rect.Y} Area:{u.Area.ToString("f2")} W:{u.Rect.Width} H:{u.Rect.Height}"))}");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"CoreInx:{mlSet.GPUNo} 产品:{detectResult.Pid} {detectConfig.Name} 模型检测异常返回 null");
|
||||
|
||||
detectResult.IsMLDetectDone = false;
|
||||
}
|
||||
}
|
||||
@ -231,22 +268,22 @@ namespace DH.Devices.Vision
|
||||
}
|
||||
|
||||
|
||||
foreach (IGrouping<ResultState, DetectionFilter> group in conditionList)
|
||||
{
|
||||
bool b = group.ToList().Any(f =>
|
||||
{
|
||||
return f.FilterOperation(d);
|
||||
});
|
||||
//foreach (IGrouping<ResultState, DetectionFilter> group in conditionList)
|
||||
//{
|
||||
// bool b = group.ToList().Any(f =>
|
||||
// {
|
||||
// return f.FilterOperation(d);
|
||||
// });
|
||||
|
||||
|
||||
if (b)
|
||||
{
|
||||
d.FinalResult = group.Key;
|
||||
break;
|
||||
}
|
||||
// if (b)
|
||||
// {
|
||||
// d.FinalResult = group.Key;
|
||||
// break;
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
//}
|
||||
});
|
||||
#endregion
|
||||
#region 5.统计缺陷过滤结果或预处理直接NG
|
||||
@ -267,6 +304,7 @@ namespace DH.Devices.Vision
|
||||
#endregion
|
||||
|
||||
|
||||
LogAsync(DateTime.Now, LogLevel.Information, $"{detectConfig.Name} 检测结果:{detectResult.ResultState.GetEnumDescription()}");
|
||||
|
||||
|
||||
|
||||
@ -417,12 +455,14 @@ namespace DH.Devices.Vision
|
||||
{
|
||||
// throw new ProcessException("异常:模型加载异常", null);
|
||||
}
|
||||
//LogAsync(DateTime.Now, LogLevel.Information, $"模型加载成功;是否GPU:{isGPU} CoreInx:{coreInx} - {dc.Name}" + $" {dc.ModelType.GetEnumDescription()}:{dc.ModelPath}");
|
||||
LogAsync(DateTime.Now, LogLevel.Information, $"模型加载成功;是否GPU:{isGPU} CoreInx:{coreInx} - {dc.Name}" + $" {dc.ModelType.GetEnumDescription()}:{dc.ModelPath}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//throw new ProcessException($"异常:是否GPU:{isGPU} CoreInx:{coreInx} - {dc.Name}模型加载异常:{ex.GetExceptionMessage()}");
|
||||
// LogAsync(DateTime.Now, LogLevel.Error, $"模型加载成功;是否GPU:{isGPU} CoreInx:{coreInx} - {dc.Name}" + $" {dc.ModelType.GetEnumDescription()}:{dc.ModelPath}");
|
||||
|
||||
throw new ProcessException($"异常:是否GPU:{isGPU} CoreInx:{coreInx} - {dc.Name}模型加载异常:{ex.GetExceptionMessage()}");
|
||||
}
|
||||
return mLEngineSet;
|
||||
}
|
||||
@ -506,7 +546,7 @@ namespace DH.Devices.Vision
|
||||
if (!tool.RunProcedure(out string errorMsg, out _))
|
||||
{
|
||||
// detectResult.PreTreatedFlag = false;
|
||||
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"{detectConfig.Name}预处理异常,{errorMsg}");
|
||||
detectResult.IsPreTreatDone = false;
|
||||
|
||||
|
||||
@ -521,12 +561,82 @@ namespace DH.Devices.Vision
|
||||
// detectResult.IsPreTreatDone = detectResult.VisionImageSet.PreTreatedFlag = preTreatRet == 1;
|
||||
//detectResult.IsPreTreatDone = detectResult.VisionImageSet.PreTreatedFlag = true;
|
||||
// detectResult.VisionImageSet.PreTreatedTime = DateTime.Now;
|
||||
|
||||
for (int i = 0; i < detectConfig.OUTPreTreatParams.Count; i++)
|
||||
switch (preTreatRet)
|
||||
{
|
||||
var param = detectConfig.OUTPreTreatParams[i];
|
||||
tool.InputTupleDic[param.Name] = double.Parse(param.Value);
|
||||
case 0: // 预处理算法无异常
|
||||
{
|
||||
|
||||
for (int i = 0; i < detectConfig.OUTPreTreatParams.Count; i++)
|
||||
{
|
||||
|
||||
var param = detectConfig.OUTPreTreatParams[i];
|
||||
|
||||
var Value = tool.GetResultTuple(param.Name);
|
||||
|
||||
// 显示结果
|
||||
IndexedSpec specRCricularity = new()
|
||||
{
|
||||
Code = param.Name,
|
||||
ActualValue = Value
|
||||
};
|
||||
detectResult.realSpecs.Add(specRCricularity);
|
||||
}
|
||||
detectResult.IsPreTreatNG = false;
|
||||
detectResult.IsPreTreatDone = true;
|
||||
}
|
||||
break;
|
||||
case -111: // 检测结果为NG
|
||||
{
|
||||
/// detectResult.VisionImageSet.DetectionResultImage =
|
||||
// tool.GetResultObject("OUTPUT_PreTreatedImage").ConvertHImageToBitmap();
|
||||
for (int i = 0; i < detectConfig.OUTPreTreatParams.Count; i++)
|
||||
{
|
||||
|
||||
var param = detectConfig.OUTPreTreatParams[i];
|
||||
|
||||
var Value = tool.GetResultTuple(param.Name);
|
||||
|
||||
// 显示结果
|
||||
IndexedSpec specRCricularity = new()
|
||||
{
|
||||
Code = param.Name,
|
||||
ActualValue = Value
|
||||
};
|
||||
detectResult.realSpecs.Add(specRCricularity);
|
||||
}
|
||||
// 结果为NG
|
||||
detectResult.ResultState = ResultState.DetectNG;
|
||||
detectResult.IsPreTreatNG = true;
|
||||
detectResult.IsPreTreatDone = true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
case -999: // 算法异常
|
||||
{
|
||||
// 算法异常时,结果图
|
||||
// detectResult.VisionImageSet.DetectionResultImage =
|
||||
// tool.GetResultObject("OUTPUT_PreTreatedImage").ConvertHImageToBitmap();
|
||||
|
||||
for (int i = 0; i < detectConfig.OUTPreTreatParams.Count; i++)
|
||||
{
|
||||
|
||||
|
||||
var param = detectConfig.OUTPreTreatParams[i];
|
||||
// 显示结果
|
||||
IndexedSpec specRCricularity = new()
|
||||
{
|
||||
Code = param.Name,
|
||||
ActualValue = -1,
|
||||
};
|
||||
detectResult.realSpecs.Add(specRCricularity);
|
||||
}
|
||||
|
||||
// 结果保持TBD
|
||||
detectResult.IsPreTreatDone = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -558,7 +668,7 @@ namespace DH.Devices.Vision
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"{detectConfig.Name}预处理异常:{ex.GetExceptionMessage()}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
@ -569,6 +679,266 @@ namespace DH.Devices.Vision
|
||||
}
|
||||
|
||||
}
|
||||
public void PreTreated2(DetectionConfig detectConfig, DetectStationResult detectResult,Mat MhImage)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
if (detectConfig.SizeTreatParamList != null && detectConfig.SizeTreatParamList.Count > 0)
|
||||
{
|
||||
foreach (var preTreat in detectConfig.SizeTreatParamList)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(preTreat.PrePath))
|
||||
{
|
||||
string toolKey = preTreat.PrePath;
|
||||
if (!HalconToolDict.ContainsKey(toolKey))
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"{detectConfig.Name}未获取预处理{preTreat.PreName}算法");
|
||||
return;
|
||||
}
|
||||
//Mean_Thre Deviation_Thre Mean_standard Deviation_standard
|
||||
var tool = HalconToolDict[toolKey];
|
||||
|
||||
//tool.InputTupleDic["Mean_Thre"] = 123;
|
||||
List<PreTreatParam> PreParams = new List<PreTreatParam>();
|
||||
preoutparms(PreParams, preTreat.ResultShow);
|
||||
for (int i = 0; i < PreParams.Count(); i++)
|
||||
{
|
||||
var param = PreParams[i];
|
||||
if (param.Value.Contains(","))
|
||||
{
|
||||
string[] strings = param.Value.Split(",");
|
||||
float[] array = strings.Select(s => float.Parse(s)).ToArray();
|
||||
HTuple hTupleArray = new HTuple(array);
|
||||
|
||||
tool.InputTupleDic[param.Name] = hTupleArray;
|
||||
}
|
||||
else
|
||||
{
|
||||
tool.InputTupleDic[param.Name] = double.Parse(param.Value);// param.Value.ToInt();
|
||||
}
|
||||
|
||||
IndexedSpec spec1 = new IndexedSpec();
|
||||
|
||||
switch (preTreat.PreType)
|
||||
{
|
||||
case SizeEnum.线线测量:
|
||||
|
||||
break;
|
||||
case SizeEnum.线圆测量:
|
||||
|
||||
break;
|
||||
case SizeEnum.圆形测量:
|
||||
break;
|
||||
case SizeEnum.高度测量:
|
||||
spec1.Code = $"in-{param.Name}";
|
||||
spec1.ActualValue = double.Parse(param.Value);
|
||||
break;
|
||||
case SizeEnum.直线测量:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
detectResult.realSpecs.Add(spec1);
|
||||
}
|
||||
//// 指定保存路径
|
||||
//string filePath = @"D:\saved_image.jpg"; // 你可以根据需要更改路径和文件名
|
||||
|
||||
//// 使用WriteImage保存图像
|
||||
//detectResult.VisionImageSet.HImage.WriteImage("jpeg", 0, filePath); // "jpeg" 表示图像格式,0表示不使用压缩
|
||||
HObject obj = OpenCVHelper.MatToHImage(MhImage);
|
||||
HImage hImage = HalconHelper.ConvertHObjectToHImage(obj);
|
||||
tool.InputImageDic["INPUT_Image"] = hImage;
|
||||
if (!tool.RunProcedure(out string errorMsg, out _))
|
||||
{
|
||||
// detectResult.VisionImageSet.PreTreatedFlag = false;
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"{detectConfig.Name}预处理异常,{errorMsg}");
|
||||
detectResult.IsPreTreatDone = false;
|
||||
|
||||
// HandleDetectDone(detectResult, detectConfig);
|
||||
return;
|
||||
}
|
||||
|
||||
var preTreatRet = tool.GetResultTuple("OUTPUT_Flag").I;
|
||||
//double MatchScore = 1;
|
||||
//MatchScore = tool.GetResultTuple("MatchScore");
|
||||
|
||||
|
||||
detectResult.IsPreTreatDone = preTreatRet == 1;
|
||||
// detectResult.IsPreTreatDone = detectResult.VisionImageSet.PreTreatedFlag = true;
|
||||
// detectResult.VisionImageSet.PreTreatedTime = DateTime.Now;
|
||||
|
||||
|
||||
//IndexedSpec spec1 = new IndexedSpec();
|
||||
//spec1.Code = "score";
|
||||
//spec1.ActualValue = MatchScore;
|
||||
|
||||
|
||||
//detectResult.realSpecs.Add(spec1);
|
||||
;
|
||||
|
||||
|
||||
// 2023/10/16 新增预处理结果反馈,如果预处理结果为NG,直接返回
|
||||
if (preTreatRet != 0)
|
||||
{
|
||||
detectResult.ResultState = ResultState.DetectNG;
|
||||
|
||||
detectResult.IsPreTreatNG = true;
|
||||
// detectResult.VisionImageSet.DetectionResultImage = detectResult.VisionImageSet.MLImage.ConvertHImageToBitmap();
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
switch (preTreat.PreType)
|
||||
{
|
||||
case SizeEnum.线线测量:
|
||||
isPreOutparams(ref detectResult, preTreat, tool, ref preTreatRet);
|
||||
break;
|
||||
case SizeEnum.线圆测量:
|
||||
isPreOutparams(ref detectResult, preTreat, tool, ref preTreatRet);
|
||||
break;
|
||||
case SizeEnum.圆形测量:
|
||||
break;
|
||||
case SizeEnum.高度测量:
|
||||
{
|
||||
|
||||
isPreOutparams(ref detectResult, preTreat, tool, ref preTreatRet);
|
||||
}
|
||||
break;
|
||||
case SizeEnum.直线测量:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"{detectConfig.Name}尺寸预处理异常:{ex.GetExceptionMessage()}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
//detectResult.VisionImageSet.HImage?.Dispose();
|
||||
//detectResult.VisionImageSet.HImage = null;
|
||||
}
|
||||
}
|
||||
public void isPreOutparams(ref DetectStationResult detectResult, SizeTreatParam preTreat, HDevEngineTool tool, ref int preTreatRet)
|
||||
{
|
||||
List<PreTreatParam> PreParams = new List<PreTreatParam>();
|
||||
preoutparms(PreParams, preTreat.OutResultShow);
|
||||
|
||||
for (int i = 0; i < PreParams.Count; i++)
|
||||
{
|
||||
var param = PreParams[i];
|
||||
double dParam = double.Parse(param.Value);
|
||||
double heights = tool.GetResultTuple(param.Name).D;
|
||||
switch (preTreat.PreType)
|
||||
{
|
||||
case SizeEnum.高度测量:
|
||||
|
||||
|
||||
IndexedSpec spec2 = new IndexedSpec();
|
||||
spec2.Code = $"out-{param.Name}";
|
||||
spec2.ActualValue = Convert.ToDouble(param.Value);
|
||||
|
||||
|
||||
detectResult.realSpecs.Add(spec2);
|
||||
|
||||
|
||||
IndexedSpec spec1 = new IndexedSpec();
|
||||
spec1.Code = $"actual-{param.Name}";
|
||||
spec1.ActualValue = heights;
|
||||
|
||||
|
||||
detectResult.realSpecs.Add(spec1);
|
||||
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ((heights > dParam - preTreat.PrePix) && (heights < dParam + preTreat.PrePix))
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
preTreatRet = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (preTreatRet != 0)
|
||||
{
|
||||
detectResult.ResultState = ResultState.DetectNG;
|
||||
|
||||
detectResult.IsPreTreatNG = true;
|
||||
//detectResult.VisionImageSet.DetectionResultImage = detectResult.VisionImageSet.MLImage.ConvertHImageToBitmap();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// detectResult.VisionImageSet.DetectionResultImage = detectResult.VisionImageSet.MLImage.ConvertHImageToBitmap();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void preoutparms(List<PreTreatParam> preTreatParams, string defectRows)
|
||||
{
|
||||
// 解析 ReslutShow 字符串,构建 PreTreatParam 列表
|
||||
if (!string.IsNullOrEmpty(defectRows))
|
||||
{
|
||||
var keyValuePairs = defectRows.Split(';');
|
||||
|
||||
foreach (var pair in keyValuePairs)
|
||||
{
|
||||
var parts = pair.Split(':');
|
||||
if (parts.Length == 2)
|
||||
{
|
||||
PreTreatParam param;
|
||||
if (parts[1].Trim().Contains(","))
|
||||
{
|
||||
param = new PreTreatParam
|
||||
{
|
||||
Name = parts[0].Trim(), // 去除多余的空格
|
||||
Value = parts[1].Trim() // 转换为 double,失败则为0
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
double dvalue = double.TryParse(parts[1].Trim(), out double value) ? value : 0;
|
||||
|
||||
param = new PreTreatParam
|
||||
{
|
||||
Name = parts[0].Trim(), // 去除多余的空格
|
||||
Value = dvalue.ToString() // 转换为 double,失败则为0
|
||||
};
|
||||
}
|
||||
|
||||
preTreatParams.Add(param);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 显示检测结果
|
||||
@ -593,15 +963,15 @@ namespace DH.Devices.Vision
|
||||
});
|
||||
}
|
||||
|
||||
//if (detectResult.realSpecs != null && detectResult.realSpecs?.Count > 0)
|
||||
//{
|
||||
// detectResult.realSpecs.ForEach(d =>
|
||||
// {
|
||||
// displayTxt +=
|
||||
// $"{d.Code} :{d.ActualValue} \r\n";
|
||||
// });
|
||||
//}
|
||||
Bitmap resultMask=result.ToBitmap();
|
||||
if (detectResult.realSpecs != null && detectResult.realSpecs?.Count > 0)
|
||||
{
|
||||
detectResult.realSpecs.ForEach(d =>
|
||||
{
|
||||
displayTxt +=
|
||||
$"{d.Code} :{d.ActualValue} \r\n";
|
||||
});
|
||||
}
|
||||
Bitmap resultMask =result.ToBitmap();
|
||||
//if (detectResult.VisionImageSet.DetectionResultImage == null && detectResult.VisionImageSet.SizeResultImage == null)
|
||||
//{
|
||||
// return;
|
||||
@ -635,14 +1005,14 @@ namespace DH.Devices.Vision
|
||||
List<IShapeElement> detectionResultShapesClone = new List<IShapeElement>(detectionResultShapes);
|
||||
|
||||
DetectionDone(DetectionId, resultMask, detectionResultShapes);
|
||||
|
||||
//SaveDetectResultImageAsync(detectResult);
|
||||
//detectResult.DetectionOriginImage = CopyBitmapWithLockBits(resultMask);
|
||||
SaveDetectResultImageAsync(detectResult);
|
||||
// SaveDetectResultCSVAsync(detectResult);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// LogAsync(DateTime.Now, LogLevel.Exception,
|
||||
// $"{Name}显示{detectResult.DetectName}检测结果异常,{ex.GetExceptionMessage()}");
|
||||
//LogAsync(DateTime.Now, LogLevel.Exception,
|
||||
// $"{Name}显示{detectResult.DetectName}检测结果异常,{ex.GetExceptionMessage()}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
@ -651,6 +1021,343 @@ namespace DH.Devices.Vision
|
||||
}
|
||||
});
|
||||
}
|
||||
public static Bitmap CopyBitmapWithLockBits(Bitmap original)
|
||||
{
|
||||
Bitmap copy = new Bitmap(original.Width, original.Height, original.PixelFormat);
|
||||
BitmapData originalData = original.LockBits(
|
||||
new Rectangle(0, 0, original.Width, original.Height),
|
||||
ImageLockMode.ReadOnly,
|
||||
original.PixelFormat
|
||||
);
|
||||
BitmapData copyData = copy.LockBits(
|
||||
new Rectangle(0, 0, copy.Width, copy.Height),
|
||||
ImageLockMode.WriteOnly,
|
||||
copy.PixelFormat
|
||||
);
|
||||
int bytesPerPixel = Image.GetPixelFormatSize(original.PixelFormat) / 8;
|
||||
int byteCount = originalData.Stride * original.Height;
|
||||
byte[] buffer = new byte[byteCount];
|
||||
System.Runtime.InteropServices.Marshal.Copy(originalData.Scan0, buffer, 0, byteCount);
|
||||
System.Runtime.InteropServices.Marshal.Copy(buffer, 0, copyData.Scan0, byteCount);
|
||||
original.UnlockBits(originalData);
|
||||
copy.UnlockBits(copyData);
|
||||
return copy;
|
||||
}
|
||||
/// <summary>
|
||||
///图片异步保存
|
||||
/// </summary>
|
||||
public void SaveDetectResultImageAsync1(DetectStationResult detectResult)
|
||||
{
|
||||
string format = detectResult.ImageFormat.ToString().ToLower();
|
||||
|
||||
if(detectResult.ImageSaveDirectory!=null)
|
||||
{
|
||||
if (!Directory.Exists(detectResult.ImageSaveDirectory))
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}else
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//根目录
|
||||
string rootPath = Path.Combine(detectResult.ImageSaveDirectory,
|
||||
DateTime.Now.ToString("yyyyMMdd"), detectResult.DetectName);
|
||||
|
||||
if (detectResult.ResultState != ResultState.OK)
|
||||
{
|
||||
|
||||
// NG原图
|
||||
if (detectResult.SaveNGOriginal && detectResult.DetectionOriginImage != null)
|
||||
{
|
||||
string prefix = Path.Combine(rootPath, "NGRawImages", detectResult.ResultLabel);
|
||||
string fullname = Path.Combine(prefix, $"{detectResult.Pid}_NGRawImage_{detectResult.DetectName}_{detectResult.Id}.{format}");
|
||||
SaveImageAsync(fullname, detectResult.DetectionOriginImage, detectResult.ImageFormat);
|
||||
}
|
||||
|
||||
|
||||
//NG结果图
|
||||
if (detectResult.SaveOKDetect && detectResult.DetectionOriginImage != null)
|
||||
{
|
||||
// 没有预处理,则保存原始图+检测结果图
|
||||
// if (detectResult.VisionImageSet.PreTreatedBitmap == null)
|
||||
{
|
||||
//string displayTxt = detectResult.ResultState.ToString() + "\r\n";
|
||||
string displayTxt = "";
|
||||
detectResult.DetectDetails.ForEach(d =>
|
||||
{
|
||||
displayTxt += $"{d.LabelName} score:{d.Score.ToString("f2")} area:{d.Area.ToString("f2")}\r\n";
|
||||
});
|
||||
if (detectResult.realSpecs != null && detectResult.realSpecs?.Count > 0)
|
||||
{
|
||||
detectResult.realSpecs.ForEach(d =>
|
||||
{
|
||||
displayTxt +=
|
||||
$"{d.Code} score:{d.ActualValue} \r\n";
|
||||
});
|
||||
}
|
||||
Bitmap resultMask = detectResult.DetectionOriginImage.CopyBitmap();
|
||||
|
||||
Bitmap preTreatedBitmap = detectResult.DetectionOriginImage.CopyBitmap();
|
||||
|
||||
//List<IShapeElement> detectionResultShapes = new List<IShapeElement>(detectResult.DetectionResultShapes);
|
||||
//DetectResultDisplay resultDisplay = new DetectResultDisplay(detectResult, resultMask, displayTxt);
|
||||
//detectionResultShapes.Add(resultDisplay);
|
||||
|
||||
Bitmap resultMap = GetResultImage(resultMask, detectResult.DetectionResultShapes);
|
||||
|
||||
|
||||
// resultDisplay.Dispose();
|
||||
//detectionResultShapes.Clear();
|
||||
|
||||
|
||||
Bitmap detectionFitImage = StaticHelper.HConnectBitmap(preTreatedBitmap, resultMap);
|
||||
|
||||
string prefix = Path.Combine(rootPath, "NGFitImages", detectResult.ResultLabel);
|
||||
Directory.CreateDirectory(prefix); // 自动创建所有缺失的目录
|
||||
string fullname = Path.Combine(prefix, $"{detectResult.Pid}_NGFitImage_{detectResult.DetectName}_{detectResult.Id}.{format}");
|
||||
|
||||
|
||||
|
||||
// SaveImageAsync(fullname, detectionFitImage, detectResult.ImageFormat);
|
||||
// 使用回调或 Task.ContinueWith 确保保存完成后再释放资源
|
||||
//SaveImageAsync(fullname, detectionFitImage, detectResult.ImageFormat)
|
||||
// .ContinueWith(t =>
|
||||
// {
|
||||
// resultMask?.Dispose();
|
||||
// preTreatedBitmap?.Dispose();
|
||||
// resultMap?.Dispose();
|
||||
// detectionFitImage?.Dispose();
|
||||
// }, TaskScheduler.Default);
|
||||
|
||||
resultMask?.Dispose();
|
||||
preTreatedBitmap?.Dispose();
|
||||
resultMap?.Dispose();
|
||||
detectionFitImage?.Dispose();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // OK原图
|
||||
if (detectResult.SaveOKOriginal && detectResult.DetectionOriginImage != null)
|
||||
{
|
||||
string prefix = Path.Combine(rootPath, "OKRawImages", detectResult.ResultLabel);
|
||||
string fullname = Path.Combine(prefix, $"{detectResult.Pid}_OKRawImage_{detectResult.DetectName}_{detectResult.Id}.{format}");
|
||||
SaveImageAsync(fullname, detectResult.DetectionOriginImage, detectResult.ImageFormat);
|
||||
}
|
||||
|
||||
//ok结果图
|
||||
if (detectResult.SaveOKDetect && detectResult.DetectionOriginImage != null)
|
||||
{
|
||||
// 没有预处理,则保存原始图+检测结果图
|
||||
// if (detectResult.VisionImageSet.PreTreatedBitmap == null)
|
||||
{
|
||||
//string displayTxt = detectResult.ResultState.ToString() + "\r\n";
|
||||
string displayTxt = "";
|
||||
detectResult.DetectDetails.ForEach(d =>
|
||||
{
|
||||
displayTxt += $"{d.LabelName} score:{d.Score.ToString("f2")} area:{d.Area.ToString("f2")}\r\n";
|
||||
});
|
||||
if (detectResult.realSpecs != null && detectResult.realSpecs?.Count > 0)
|
||||
{
|
||||
detectResult.realSpecs.ForEach(d =>
|
||||
{
|
||||
displayTxt +=
|
||||
$"{d.Code} score:{d.ActualValue} \r\n";
|
||||
});
|
||||
}
|
||||
Bitmap resultMask = detectResult.DetectionOriginImage.CopyBitmap();
|
||||
|
||||
Bitmap preTreatedBitmap = detectResult.DetectionOriginImage.CopyBitmap();
|
||||
|
||||
List<IShapeElement> detectionResultShapes = new List<IShapeElement>(detectResult.DetectionResultShapes);
|
||||
DetectResultDisplay resultDisplay = new DetectResultDisplay(detectResult, resultMask, displayTxt);
|
||||
detectionResultShapes.Add(resultDisplay);
|
||||
|
||||
Bitmap resultMap = GetResultImage(resultMask, detectionResultShapes);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bitmap detectionFitImage = StaticHelper.HConnectBitmap(preTreatedBitmap, resultMap);
|
||||
|
||||
string prefix = Path.Combine(rootPath, "OKFitImages", detectResult.ResultLabel);
|
||||
string fullname = Path.Combine(prefix, $"{detectResult.Pid}_" +
|
||||
$"OKFitImage_{detectResult.DetectName}_{detectResult.Id}.{format}");
|
||||
|
||||
|
||||
|
||||
SaveImageAsync(fullname, detectionFitImage, detectResult.ImageFormat);
|
||||
|
||||
//resultDisplay.Dispose();
|
||||
//detectionResultShapes.Clear();
|
||||
//resultMask?.Dispose();
|
||||
//preTreatedBitmap?.Dispose();
|
||||
//resultMap?.Dispose();
|
||||
//detectionFitImage?.Dispose();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public virtual Bitmap GetResultImage(Bitmap baseImage, List<IShapeElement> eleList)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 重新生成画布 避免 无法从带有索引像素格式的图像创建graphics对象
|
||||
Bitmap image = new Bitmap(baseImage.Width, baseImage.Height);
|
||||
|
||||
using (Graphics g = Graphics.FromImage(image))
|
||||
{
|
||||
g.DrawImage(baseImage, 0, 0);
|
||||
|
||||
// 创建临时拷贝避免共享状态
|
||||
// var tempElements = eleList.Select(e => e.Clone()).Cast<IShapeElement>().ToList();
|
||||
|
||||
eleList.ForEach(e =>
|
||||
{
|
||||
e.State = ElementState.Normal;
|
||||
e.Draw(g);
|
||||
});
|
||||
}
|
||||
return image;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogAsync(DateTime.Now, LogLevel.Exception, $"获取叠加结果图片异常:{ex.GetExceptionMessage()}");
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void SaveDetectResultImageAsync(DetectStationResult detectResult)
|
||||
{
|
||||
if (detectResult.ImageSaveDirectory == null) return;
|
||||
|
||||
string format = detectResult.ImageFormat.ToString().ToLower();
|
||||
string rootPath = Path.Combine(detectResult.ImageSaveDirectory,
|
||||
DateTime.Now.ToString("yyyyMMdd"), detectResult.DetectName);
|
||||
|
||||
try
|
||||
{
|
||||
if (detectResult.ResultState != ResultState.OK)
|
||||
{
|
||||
SaveNGImages(detectResult, rootPath, format);
|
||||
}
|
||||
else
|
||||
{
|
||||
SaveOKImages(detectResult, rootPath, format);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Logger.Error($"保存检测结果失败: {ex.Message}");
|
||||
}
|
||||
finally {
|
||||
GC.Collect();
|
||||
GC.WaitForPendingFinalizers();
|
||||
}
|
||||
}
|
||||
private void SaveNGImages(DetectStationResult result, string rootPath, string format)
|
||||
{
|
||||
// NG 原图
|
||||
if (result.SaveNGOriginal && result.DetectionOriginImage != null)
|
||||
{
|
||||
string prefix = Path.Combine(rootPath, "NGRawImages", result.ResultLabel);
|
||||
Directory.CreateDirectory(prefix);
|
||||
string fullname = Path.Combine(prefix, $"{result.Pid}_NGRawImage_{result.DetectName}_{result.Id}.{format}");
|
||||
SaveImageAsync(fullname, result.DetectionOriginImage, result.ImageFormat);
|
||||
}
|
||||
|
||||
// NG 结果图
|
||||
if (result.SaveOKDetect && result.DetectionOriginImage != null)
|
||||
{
|
||||
string displayTxt = BuildDisplayText(result);
|
||||
using (Bitmap resultMask = result.DetectionOriginImage.CopyBitmap())
|
||||
using (Bitmap preTreatedBitmap = result.DetectionOriginImage.CopyBitmap())
|
||||
{
|
||||
var detectionResultShapes = new List<IShapeElement>()
|
||||
{
|
||||
new DetectResultDisplay(result, resultMask, displayTxt)
|
||||
};
|
||||
|
||||
using (Bitmap resultMap = GetResultImage(resultMask, detectionResultShapes))
|
||||
using (Bitmap detectionFitImage = StaticHelper.HConnectBitmap(preTreatedBitmap, resultMap))
|
||||
{
|
||||
string prefix = Path.Combine(rootPath, "NGFitImages", result.ResultLabel);
|
||||
Directory.CreateDirectory(prefix);
|
||||
string fullname = Path.Combine(prefix, $"{result.Pid}_NGFitImage_{result.DetectName}_{result.Id}.{format}");
|
||||
SaveImageAsync(fullname, detectionFitImage, result.ImageFormat);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void SaveOKImages(DetectStationResult result, string rootPath, string format)
|
||||
{
|
||||
// OK 原图
|
||||
if (result.SaveOKOriginal && result.DetectionOriginImage != null)
|
||||
{
|
||||
string prefix = Path.Combine(rootPath, "OKRawImages", result.ResultLabel);
|
||||
Directory.CreateDirectory(prefix);
|
||||
string fullname = Path.Combine(prefix, $"{result.Pid}_OKRawImage_{result.DetectName}_{result.Id}.{format}");
|
||||
SaveImageAsync(fullname, result.DetectionOriginImage, result.ImageFormat);
|
||||
}
|
||||
|
||||
// OK 结果图
|
||||
if (result.SaveOKDetect && result.DetectionOriginImage != null)
|
||||
{
|
||||
string displayTxt = BuildDisplayText(result);
|
||||
using (Bitmap resultMask = result.DetectionOriginImage.CopyBitmap())
|
||||
using (Bitmap preTreatedBitmap = result.DetectionOriginImage.CopyBitmap())
|
||||
{
|
||||
var detectionResultShapes = new List<IShapeElement>()
|
||||
{
|
||||
new DetectResultDisplay(result, resultMask, displayTxt)
|
||||
};
|
||||
|
||||
using (Bitmap resultMap = GetResultImage(resultMask, detectionResultShapes))
|
||||
using (Bitmap detectionFitImage = StaticHelper.HConnectBitmap(preTreatedBitmap, resultMap))
|
||||
{
|
||||
string prefix = Path.Combine(rootPath, "OKFitImages", result.ResultLabel);
|
||||
Directory.CreateDirectory(prefix);
|
||||
string fullname = Path.Combine(prefix, $"{result.Pid}_OKFitImage_{result.DetectName}_{result.Id}.{format}");
|
||||
SaveImageAsync(fullname, detectionFitImage, result.ImageFormat);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private string BuildDisplayText(DetectStationResult result)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
result.DetectDetails.ForEach(d => sb.AppendLine($"{d.LabelName} score:{d.Score:f2} area:{d.Area:f2}"));
|
||||
if (result.realSpecs?.Count > 0)
|
||||
{
|
||||
result.realSpecs.ForEach(d => sb.AppendLine($"{d.Code} score:{d.ActualValue}"));
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
879
DH.RBAC/AccountForm.Designer.cs
generated
Normal file
@ -0,0 +1,879 @@
|
||||
namespace DH.RBAC
|
||||
{
|
||||
partial class AccountForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AccountForm));
|
||||
this.uiPanel1 = new Sunny.UI.UIPanel();
|
||||
this.titlePanel = new System.Windows.Forms.Panel();
|
||||
this.uiLabel15 = new Sunny.UI.UILabel();
|
||||
this.btnClose = new Sunny.UI.UISymbolLabel();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.lblCurrentUser = new System.Windows.Forms.Label();
|
||||
this.imageAvator = new System.Windows.Forms.PictureBox();
|
||||
this.uiTabControl1 = new Sunny.UI.UITabControl();
|
||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||
this.txtBirthday = new Sunny.UI.UIDatePicker();
|
||||
this.btnSave = new Sunny.UI.UIButton();
|
||||
this.txtSignature = new Sunny.UI.UITextBox();
|
||||
this.lblSignature = new Sunny.UI.UILabel();
|
||||
this.txtAddress = new Sunny.UI.UITextBox();
|
||||
this.lblAddress = new Sunny.UI.UILabel();
|
||||
this.txtTel = new Sunny.UI.UITextBox();
|
||||
this.lblTel = new Sunny.UI.UILabel();
|
||||
this.txtEmail = new Sunny.UI.UITextBox();
|
||||
this.lblEmail = new Sunny.UI.UILabel();
|
||||
this.lblBirthday = new Sunny.UI.UILabel();
|
||||
this.rdFemale = new Sunny.UI.UIRadioButton();
|
||||
this.rdMale = new Sunny.UI.UIRadioButton();
|
||||
this.txtNickName = new Sunny.UI.UITextBox();
|
||||
this.lblGender = new Sunny.UI.UILabel();
|
||||
this.lblNickName = new Sunny.UI.UILabel();
|
||||
this.txtName = new Sunny.UI.UITextBox();
|
||||
this.lblName = new Sunny.UI.UILabel();
|
||||
this.txtAccount = new Sunny.UI.UITextBox();
|
||||
this.lblAccount = new Sunny.UI.UILabel();
|
||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||
this.btnSelectAvator = new Sunny.UI.UIButton();
|
||||
this.uiLabel10 = new Sunny.UI.UILabel();
|
||||
this.tabPage3 = new System.Windows.Forms.TabPage();
|
||||
this.btnReset = new Sunny.UI.UIButton();
|
||||
this.btnChangePassword = new Sunny.UI.UIButton();
|
||||
this.txtComfirmPassword = new Sunny.UI.UITextBox();
|
||||
this.txtNewPassword = new Sunny.UI.UITextBox();
|
||||
this.lblComfirmPassword = new Sunny.UI.UILabel();
|
||||
this.lblNewPassword = new Sunny.UI.UILabel();
|
||||
this.txtOldPassword = new Sunny.UI.UITextBox();
|
||||
this.lblOldPassword = new Sunny.UI.UILabel();
|
||||
this.uiLabel11 = new Sunny.UI.UILabel();
|
||||
this.uiPanel1.SuspendLayout();
|
||||
this.titlePanel.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.imageAvator)).BeginInit();
|
||||
this.uiTabControl1.SuspendLayout();
|
||||
this.tabPage1.SuspendLayout();
|
||||
this.tabPage2.SuspendLayout();
|
||||
this.tabPage3.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// uiPanel1
|
||||
//
|
||||
this.uiPanel1.Controls.Add(this.titlePanel);
|
||||
this.uiPanel1.Controls.Add(this.panel1);
|
||||
this.uiPanel1.Controls.Add(this.uiTabControl1);
|
||||
this.uiPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.uiPanel1.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(241)))), ((int)(((byte)(243)))));
|
||||
this.uiPanel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.uiPanel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.uiPanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.uiPanel1.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.uiPanel1.Name = "uiPanel1";
|
||||
this.uiPanel1.RectColor = System.Drawing.Color.Silver;
|
||||
this.uiPanel1.Size = new System.Drawing.Size(1031, 558);
|
||||
this.uiPanel1.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.uiPanel1.StyleCustomMode = true;
|
||||
this.uiPanel1.TabIndex = 6;
|
||||
this.uiPanel1.Text = null;
|
||||
this.uiPanel1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// titlePanel
|
||||
//
|
||||
this.titlePanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.titlePanel.Controls.Add(this.uiLabel15);
|
||||
this.titlePanel.Controls.Add(this.btnClose);
|
||||
this.titlePanel.Location = new System.Drawing.Point(0, -1);
|
||||
this.titlePanel.Name = "titlePanel";
|
||||
this.titlePanel.Size = new System.Drawing.Size(1031, 43);
|
||||
this.titlePanel.TabIndex = 7;
|
||||
this.titlePanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.titlePanel_MouseDown);
|
||||
this.titlePanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.titlePanel_MouseMove);
|
||||
//
|
||||
// uiLabel15
|
||||
//
|
||||
this.uiLabel15.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.uiLabel15.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.uiLabel15.Location = new System.Drawing.Point(0, 0);
|
||||
this.uiLabel15.Name = "uiLabel15";
|
||||
this.uiLabel15.Size = new System.Drawing.Size(986, 43);
|
||||
this.uiLabel15.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.uiLabel15.TabIndex = 1;
|
||||
this.uiLabel15.Text = "用户账号管理";
|
||||
this.uiLabel15.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.uiLabel15.MouseDown += new System.Windows.Forms.MouseEventHandler(this.titlePanel_MouseDown);
|
||||
this.uiLabel15.MouseMove += new System.Windows.Forms.MouseEventHandler(this.titlePanel_MouseMove);
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.Dock = System.Windows.Forms.DockStyle.Right;
|
||||
this.btnClose.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.btnClose.Location = new System.Drawing.Point(986, 0);
|
||||
this.btnClose.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.Padding = new System.Windows.Forms.Padding(64, 0, 0, 0);
|
||||
this.btnClose.Size = new System.Drawing.Size(45, 43);
|
||||
this.btnClose.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.btnClose.Symbol = 77;
|
||||
this.btnClose.SymbolSize = 60;
|
||||
this.btnClose.TabIndex = 0;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
this.btnClose.MouseEnter += new System.EventHandler(this.btnClose_MouseEnter);
|
||||
this.btnClose.MouseLeave += new System.EventHandler(this.btnClose_MouseLeave);
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.BackColor = System.Drawing.Color.White;
|
||||
this.panel1.Controls.Add(this.lblCurrentUser);
|
||||
this.panel1.Controls.Add(this.imageAvator);
|
||||
this.panel1.Location = new System.Drawing.Point(12, 56);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(241, 218);
|
||||
this.panel1.TabIndex = 6;
|
||||
//
|
||||
// lblCurrentUser
|
||||
//
|
||||
this.lblCurrentUser.Location = new System.Drawing.Point(3, 176);
|
||||
this.lblCurrentUser.Name = "lblCurrentUser";
|
||||
this.lblCurrentUser.Size = new System.Drawing.Size(235, 27);
|
||||
this.lblCurrentUser.TabIndex = 4;
|
||||
this.lblCurrentUser.Text = "admin@管理员";
|
||||
this.lblCurrentUser.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// imageAvator
|
||||
//
|
||||
this.imageAvator.Image = global:: DH.RBAC.Properties.Resources.avatar;
|
||||
this.imageAvator.Location = new System.Drawing.Point(49, 27);
|
||||
this.imageAvator.Name = "imageAvator";
|
||||
this.imageAvator.Size = new System.Drawing.Size(139, 136);
|
||||
this.imageAvator.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||
this.imageAvator.TabIndex = 3;
|
||||
this.imageAvator.TabStop = false;
|
||||
//
|
||||
// uiTabControl1
|
||||
//
|
||||
this.uiTabControl1.Controls.Add(this.tabPage1);
|
||||
this.uiTabControl1.Controls.Add(this.tabPage2);
|
||||
this.uiTabControl1.Controls.Add(this.tabPage3);
|
||||
this.uiTabControl1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
|
||||
this.uiTabControl1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.uiTabControl1.ItemSize = new System.Drawing.Size(150, 40);
|
||||
this.uiTabControl1.Location = new System.Drawing.Point(275, 56);
|
||||
this.uiTabControl1.MainPage = "";
|
||||
this.uiTabControl1.MenuStyle = Sunny.UI.UIMenuStyle.Custom;
|
||||
this.uiTabControl1.Name = "uiTabControl1";
|
||||
this.uiTabControl1.SelectedIndex = 0;
|
||||
this.uiTabControl1.Size = new System.Drawing.Size(734, 490);
|
||||
this.uiTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
|
||||
this.uiTabControl1.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.uiTabControl1.TabBackColor = System.Drawing.Color.White;
|
||||
this.uiTabControl1.TabIndex = 5;
|
||||
this.uiTabControl1.TabSelectedColor = System.Drawing.Color.White;
|
||||
this.uiTabControl1.TabUnSelectedForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(73)))), ((int)(((byte)(82)))), ((int)(((byte)(91)))));
|
||||
//
|
||||
// tabPage1
|
||||
//
|
||||
this.tabPage1.BackColor = System.Drawing.Color.White;
|
||||
this.tabPage1.Controls.Add(this.txtBirthday);
|
||||
this.tabPage1.Controls.Add(this.btnSave);
|
||||
this.tabPage1.Controls.Add(this.txtSignature);
|
||||
this.tabPage1.Controls.Add(this.lblSignature);
|
||||
this.tabPage1.Controls.Add(this.txtAddress);
|
||||
this.tabPage1.Controls.Add(this.lblAddress);
|
||||
this.tabPage1.Controls.Add(this.txtTel);
|
||||
this.tabPage1.Controls.Add(this.lblTel);
|
||||
this.tabPage1.Controls.Add(this.txtEmail);
|
||||
this.tabPage1.Controls.Add(this.lblEmail);
|
||||
this.tabPage1.Controls.Add(this.lblBirthday);
|
||||
this.tabPage1.Controls.Add(this.rdFemale);
|
||||
this.tabPage1.Controls.Add(this.rdMale);
|
||||
this.tabPage1.Controls.Add(this.txtNickName);
|
||||
this.tabPage1.Controls.Add(this.lblGender);
|
||||
this.tabPage1.Controls.Add(this.lblNickName);
|
||||
this.tabPage1.Controls.Add(this.txtName);
|
||||
this.tabPage1.Controls.Add(this.lblName);
|
||||
this.tabPage1.Controls.Add(this.txtAccount);
|
||||
this.tabPage1.Controls.Add(this.lblAccount);
|
||||
this.tabPage1.Location = new System.Drawing.Point(0, 40);
|
||||
this.tabPage1.Name = "tabPage1";
|
||||
this.tabPage1.Size = new System.Drawing.Size(734, 450);
|
||||
this.tabPage1.TabIndex = 0;
|
||||
this.tabPage1.Text = "资料";
|
||||
//
|
||||
// txtBirthday
|
||||
//
|
||||
this.txtBirthday.FillColor = System.Drawing.Color.White;
|
||||
this.txtBirthday.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtBirthday.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtBirthday.Location = new System.Drawing.Point(117, 139);
|
||||
this.txtBirthday.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtBirthday.MaxLength = 10;
|
||||
this.txtBirthday.MinimumSize = new System.Drawing.Size(63, 0);
|
||||
this.txtBirthday.Name = "txtBirthday";
|
||||
this.txtBirthday.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
|
||||
this.txtBirthday.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtBirthday.Size = new System.Drawing.Size(188, 36);
|
||||
|
||||
this.txtBirthday.StyleCustomMode = true;
|
||||
this.txtBirthday.SymbolDropDown = 61555;
|
||||
this.txtBirthday.SymbolNormal = 61555;
|
||||
this.txtBirthday.TabIndex = 20;
|
||||
this.txtBirthday.Text = "2021-12-29";
|
||||
this.txtBirthday.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.txtBirthday.Value = new System.DateTime(2021, 12, 29, 0, 0, 0, 0);
|
||||
//
|
||||
// btnSave
|
||||
//
|
||||
this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnSave.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.btnSave.Location = new System.Drawing.Point(117, 379);
|
||||
this.btnSave.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.btnSave.Name = "btnSave";
|
||||
this.btnSave.Size = new System.Drawing.Size(125, 44);
|
||||
this.btnSave.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.btnSave.TabIndex = 19;
|
||||
this.btnSave.Text = "保存";
|
||||
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
|
||||
//
|
||||
// txtSignature
|
||||
//
|
||||
this.txtSignature.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtSignature.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtSignature.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtSignature.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtSignature.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtSignature.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtSignature.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtSignature.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtSignature.ButtonSymbol = 61761;
|
||||
this.txtSignature.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtSignature.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtSignature.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtSignature.Location = new System.Drawing.Point(117, 252);
|
||||
this.txtSignature.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtSignature.Maximum = 2147483647D;
|
||||
this.txtSignature.MaxLength = 128;
|
||||
this.txtSignature.Minimum = -2147483648D;
|
||||
this.txtSignature.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtSignature.Multiline = true;
|
||||
this.txtSignature.Name = "txtSignature";
|
||||
this.txtSignature.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtSignature.Size = new System.Drawing.Size(581, 103);
|
||||
|
||||
this.txtSignature.StyleCustomMode = true;
|
||||
this.txtSignature.TabIndex = 18;
|
||||
this.txtSignature.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblSignature
|
||||
//
|
||||
this.lblSignature.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblSignature.Location = new System.Drawing.Point(3, 252);
|
||||
this.lblSignature.Name = "lblSignature";
|
||||
this.lblSignature.Size = new System.Drawing.Size(107, 29);
|
||||
this.lblSignature.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblSignature.TabIndex = 17;
|
||||
this.lblSignature.Text = "个性签名";
|
||||
this.lblSignature.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// txtAddress
|
||||
//
|
||||
this.txtAddress.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtAddress.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtAddress.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtAddress.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtAddress.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtAddress.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtAddress.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtAddress.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtAddress.ButtonSymbol = 61761;
|
||||
this.txtAddress.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtAddress.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtAddress.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtAddress.Location = new System.Drawing.Point(429, 191);
|
||||
this.txtAddress.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtAddress.Maximum = 2147483647D;
|
||||
this.txtAddress.MaxLength = 128;
|
||||
this.txtAddress.Minimum = -2147483648D;
|
||||
this.txtAddress.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtAddress.Name = "txtAddress";
|
||||
this.txtAddress.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtAddress.Size = new System.Drawing.Size(269, 42);
|
||||
|
||||
this.txtAddress.StyleCustomMode = true;
|
||||
this.txtAddress.TabIndex = 16;
|
||||
this.txtAddress.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblAddress
|
||||
//
|
||||
this.lblAddress.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblAddress.Location = new System.Drawing.Point(312, 198);
|
||||
this.lblAddress.Name = "lblAddress";
|
||||
this.lblAddress.Size = new System.Drawing.Size(110, 29);
|
||||
this.lblAddress.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblAddress.TabIndex = 15;
|
||||
this.lblAddress.Text = "联系地址";
|
||||
this.lblAddress.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// txtTel
|
||||
//
|
||||
this.txtTel.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtTel.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtTel.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtTel.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtTel.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtTel.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtTel.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtTel.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtTel.ButtonSymbol = 61761;
|
||||
this.txtTel.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtTel.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtTel.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtTel.Location = new System.Drawing.Point(117, 191);
|
||||
this.txtTel.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtTel.Maximum = 2147483647D;
|
||||
this.txtTel.MaxLength = 20;
|
||||
this.txtTel.Minimum = -2147483648D;
|
||||
this.txtTel.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtTel.Name = "txtTel";
|
||||
this.txtTel.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtTel.Size = new System.Drawing.Size(188, 42);
|
||||
|
||||
this.txtTel.StyleCustomMode = true;
|
||||
this.txtTel.TabIndex = 14;
|
||||
this.txtTel.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblTel
|
||||
//
|
||||
this.lblTel.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblTel.Location = new System.Drawing.Point(3, 198);
|
||||
this.lblTel.Name = "lblTel";
|
||||
this.lblTel.Size = new System.Drawing.Size(107, 29);
|
||||
this.lblTel.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblTel.TabIndex = 13;
|
||||
this.lblTel.Text = "移动电话";
|
||||
this.lblTel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// txtEmail
|
||||
//
|
||||
this.txtEmail.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtEmail.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtEmail.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtEmail.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtEmail.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtEmail.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtEmail.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtEmail.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtEmail.ButtonSymbol = 61761;
|
||||
this.txtEmail.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtEmail.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtEmail.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtEmail.Location = new System.Drawing.Point(429, 136);
|
||||
this.txtEmail.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtEmail.Maximum = 2147483647D;
|
||||
this.txtEmail.MaxLength = 60;
|
||||
this.txtEmail.Minimum = -2147483648D;
|
||||
this.txtEmail.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtEmail.Name = "txtEmail";
|
||||
this.txtEmail.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtEmail.Size = new System.Drawing.Size(269, 42);
|
||||
|
||||
this.txtEmail.StyleCustomMode = true;
|
||||
this.txtEmail.TabIndex = 12;
|
||||
this.txtEmail.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblEmail
|
||||
//
|
||||
this.lblEmail.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblEmail.Location = new System.Drawing.Point(357, 143);
|
||||
this.lblEmail.Name = "lblEmail";
|
||||
this.lblEmail.Size = new System.Drawing.Size(65, 29);
|
||||
this.lblEmail.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblEmail.TabIndex = 11;
|
||||
this.lblEmail.Text = "邮箱";
|
||||
this.lblEmail.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// lblBirthday
|
||||
//
|
||||
this.lblBirthday.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblBirthday.Location = new System.Drawing.Point(3, 143);
|
||||
this.lblBirthday.Name = "lblBirthday";
|
||||
this.lblBirthday.Size = new System.Drawing.Size(107, 29);
|
||||
this.lblBirthday.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblBirthday.TabIndex = 9;
|
||||
this.lblBirthday.Text = "出生日期";
|
||||
this.lblBirthday.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// rdFemale
|
||||
//
|
||||
this.rdFemale.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.rdFemale.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.rdFemale.Location = new System.Drawing.Point(501, 88);
|
||||
this.rdFemale.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.rdFemale.Name = "rdFemale";
|
||||
this.rdFemale.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
|
||||
this.rdFemale.Size = new System.Drawing.Size(57, 36);
|
||||
this.rdFemale.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.rdFemale.TabIndex = 8;
|
||||
this.rdFemale.Text = "女";
|
||||
//
|
||||
// rdMale
|
||||
//
|
||||
this.rdMale.Checked = true;
|
||||
this.rdMale.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.rdMale.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.rdMale.Location = new System.Drawing.Point(433, 88);
|
||||
this.rdMale.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.rdMale.Name = "rdMale";
|
||||
this.rdMale.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
|
||||
this.rdMale.Size = new System.Drawing.Size(57, 36);
|
||||
this.rdMale.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.rdMale.TabIndex = 7;
|
||||
this.rdMale.Text = "男";
|
||||
//
|
||||
// txtNickName
|
||||
//
|
||||
this.txtNickName.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtNickName.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtNickName.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtNickName.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtNickName.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtNickName.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtNickName.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtNickName.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtNickName.ButtonSymbol = 61761;
|
||||
this.txtNickName.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtNickName.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtNickName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtNickName.Location = new System.Drawing.Point(429, 32);
|
||||
this.txtNickName.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtNickName.Maximum = 2147483647D;
|
||||
this.txtNickName.MaxLength = 20;
|
||||
this.txtNickName.Minimum = -2147483648D;
|
||||
this.txtNickName.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtNickName.Name = "txtNickName";
|
||||
this.txtNickName.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtNickName.Size = new System.Drawing.Size(269, 42);
|
||||
|
||||
this.txtNickName.StyleCustomMode = true;
|
||||
this.txtNickName.TabIndex = 3;
|
||||
this.txtNickName.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblGender
|
||||
//
|
||||
this.lblGender.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblGender.Location = new System.Drawing.Point(357, 91);
|
||||
this.lblGender.Name = "lblGender";
|
||||
this.lblGender.Size = new System.Drawing.Size(65, 29);
|
||||
this.lblGender.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblGender.TabIndex = 6;
|
||||
this.lblGender.Text = "性别";
|
||||
this.lblGender.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// lblNickName
|
||||
//
|
||||
this.lblNickName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblNickName.Location = new System.Drawing.Point(357, 39);
|
||||
this.lblNickName.Name = "lblNickName";
|
||||
this.lblNickName.Size = new System.Drawing.Size(65, 29);
|
||||
this.lblNickName.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblNickName.TabIndex = 2;
|
||||
this.lblNickName.Text = "昵称";
|
||||
this.lblNickName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// txtName
|
||||
//
|
||||
this.txtName.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtName.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtName.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtName.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtName.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtName.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtName.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtName.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtName.ButtonSymbol = 61761;
|
||||
this.txtName.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtName.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtName.Location = new System.Drawing.Point(117, 84);
|
||||
this.txtName.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtName.Maximum = 2147483647D;
|
||||
this.txtName.MaxLength = 20;
|
||||
this.txtName.Minimum = -2147483648D;
|
||||
this.txtName.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtName.Name = "txtName";
|
||||
this.txtName.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtName.Size = new System.Drawing.Size(188, 42);
|
||||
|
||||
this.txtName.StyleCustomMode = true;
|
||||
this.txtName.TabIndex = 5;
|
||||
this.txtName.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblName
|
||||
//
|
||||
this.lblName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblName.Location = new System.Drawing.Point(45, 91);
|
||||
this.lblName.Name = "lblName";
|
||||
this.lblName.Size = new System.Drawing.Size(65, 29);
|
||||
this.lblName.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblName.TabIndex = 4;
|
||||
this.lblName.Text = "姓名";
|
||||
this.lblName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// txtAccount
|
||||
//
|
||||
this.txtAccount.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtAccount.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtAccount.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtAccount.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtAccount.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtAccount.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtAccount.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtAccount.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtAccount.ButtonSymbol = 61761;
|
||||
this.txtAccount.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtAccount.Enabled = false;
|
||||
this.txtAccount.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtAccount.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtAccount.Location = new System.Drawing.Point(117, 32);
|
||||
this.txtAccount.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtAccount.Maximum = 2147483647D;
|
||||
this.txtAccount.MaxLength = 20;
|
||||
this.txtAccount.Minimum = -2147483648D;
|
||||
this.txtAccount.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtAccount.Name = "txtAccount";
|
||||
this.txtAccount.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtAccount.Size = new System.Drawing.Size(188, 42);
|
||||
|
||||
this.txtAccount.StyleCustomMode = true;
|
||||
this.txtAccount.TabIndex = 1;
|
||||
this.txtAccount.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblAccount
|
||||
//
|
||||
this.lblAccount.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblAccount.Location = new System.Drawing.Point(45, 39);
|
||||
this.lblAccount.Name = "lblAccount";
|
||||
this.lblAccount.Size = new System.Drawing.Size(65, 29);
|
||||
this.lblAccount.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblAccount.TabIndex = 0;
|
||||
this.lblAccount.Text = "账号";
|
||||
this.lblAccount.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// tabPage2
|
||||
//
|
||||
this.tabPage2.BackColor = System.Drawing.Color.White;
|
||||
this.tabPage2.Controls.Add(this.btnSelectAvator);
|
||||
this.tabPage2.Controls.Add(this.uiLabel10);
|
||||
this.tabPage2.Location = new System.Drawing.Point(0, 40);
|
||||
this.tabPage2.Name = "tabPage2";
|
||||
this.tabPage2.Size = new System.Drawing.Size(200, 60);
|
||||
this.tabPage2.TabIndex = 1;
|
||||
this.tabPage2.Text = "头像";
|
||||
//
|
||||
// btnSelectAvator
|
||||
//
|
||||
this.btnSelectAvator.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnSelectAvator.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.btnSelectAvator.Location = new System.Drawing.Point(258, 127);
|
||||
this.btnSelectAvator.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.btnSelectAvator.Name = "btnSelectAvator";
|
||||
this.btnSelectAvator.Size = new System.Drawing.Size(137, 48);
|
||||
this.btnSelectAvator.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.btnSelectAvator.TabIndex = 1;
|
||||
this.btnSelectAvator.Text = "上传头像";
|
||||
this.btnSelectAvator.Click += new System.EventHandler(this.btnSelectAvator_Click);
|
||||
//
|
||||
// uiLabel10
|
||||
//
|
||||
this.uiLabel10.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.uiLabel10.Location = new System.Drawing.Point(111, 47);
|
||||
this.uiLabel10.Name = "uiLabel10";
|
||||
this.uiLabel10.Size = new System.Drawing.Size(538, 29);
|
||||
this.uiLabel10.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.uiLabel10.TabIndex = 0;
|
||||
this.uiLabel10.Text = "建议尺寸168*168,支持jpg,bmp,png,不能超过200kb";
|
||||
this.uiLabel10.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// tabPage3
|
||||
//
|
||||
this.tabPage3.BackColor = System.Drawing.Color.White;
|
||||
this.tabPage3.Controls.Add(this.btnReset);
|
||||
this.tabPage3.Controls.Add(this.btnChangePassword);
|
||||
this.tabPage3.Controls.Add(this.txtComfirmPassword);
|
||||
this.tabPage3.Controls.Add(this.txtNewPassword);
|
||||
this.tabPage3.Controls.Add(this.lblComfirmPassword);
|
||||
this.tabPage3.Controls.Add(this.lblNewPassword);
|
||||
this.tabPage3.Controls.Add(this.txtOldPassword);
|
||||
this.tabPage3.Controls.Add(this.lblOldPassword);
|
||||
this.tabPage3.Controls.Add(this.uiLabel11);
|
||||
this.tabPage3.Location = new System.Drawing.Point(0, 40);
|
||||
this.tabPage3.Name = "tabPage3";
|
||||
this.tabPage3.Size = new System.Drawing.Size(200, 60);
|
||||
this.tabPage3.TabIndex = 2;
|
||||
this.tabPage3.Text = "账号";
|
||||
//
|
||||
// btnReset
|
||||
//
|
||||
this.btnReset.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnReset.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
|
||||
this.btnReset.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
|
||||
this.btnReset.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
|
||||
this.btnReset.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
|
||||
this.btnReset.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
|
||||
this.btnReset.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.btnReset.Location = new System.Drawing.Point(268, 261);
|
||||
this.btnReset.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.btnReset.Name = "btnReset";
|
||||
this.btnReset.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
|
||||
this.btnReset.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
|
||||
this.btnReset.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
|
||||
this.btnReset.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
|
||||
this.btnReset.Size = new System.Drawing.Size(125, 44);
|
||||
this.btnReset.Style = Sunny.UI.UIStyle.Orange;
|
||||
this.btnReset.StyleCustomMode = true;
|
||||
this.btnReset.TabIndex = 21;
|
||||
this.btnReset.Text = "重置";
|
||||
this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
|
||||
//
|
||||
// btnChangePassword
|
||||
//
|
||||
this.btnChangePassword.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnChangePassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.btnChangePassword.Location = new System.Drawing.Point(114, 261);
|
||||
this.btnChangePassword.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.btnChangePassword.Name = "btnChangePassword";
|
||||
this.btnChangePassword.Size = new System.Drawing.Size(125, 44);
|
||||
this.btnChangePassword.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.btnChangePassword.TabIndex = 20;
|
||||
this.btnChangePassword.Text = "保存";
|
||||
this.btnChangePassword.Click += new System.EventHandler(this.btnChangePassword_Click);
|
||||
//
|
||||
// txtComfirmPassword
|
||||
//
|
||||
this.txtComfirmPassword.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtComfirmPassword.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtComfirmPassword.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtComfirmPassword.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtComfirmPassword.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtComfirmPassword.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtComfirmPassword.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtComfirmPassword.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtComfirmPassword.ButtonSymbol = 61761;
|
||||
this.txtComfirmPassword.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtComfirmPassword.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtComfirmPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtComfirmPassword.Location = new System.Drawing.Point(205, 178);
|
||||
this.txtComfirmPassword.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtComfirmPassword.Maximum = 2147483647D;
|
||||
this.txtComfirmPassword.Minimum = -2147483648D;
|
||||
this.txtComfirmPassword.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtComfirmPassword.Name = "txtComfirmPassword";
|
||||
this.txtComfirmPassword.PasswordChar = '*';
|
||||
this.txtComfirmPassword.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtComfirmPassword.Size = new System.Drawing.Size(188, 42);
|
||||
|
||||
this.txtComfirmPassword.StyleCustomMode = true;
|
||||
this.txtComfirmPassword.TabIndex = 11;
|
||||
this.txtComfirmPassword.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// txtNewPassword
|
||||
//
|
||||
this.txtNewPassword.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtNewPassword.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtNewPassword.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtNewPassword.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtNewPassword.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtNewPassword.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtNewPassword.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtNewPassword.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtNewPassword.ButtonSymbol = 61761;
|
||||
this.txtNewPassword.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtNewPassword.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtNewPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtNewPassword.Location = new System.Drawing.Point(205, 123);
|
||||
this.txtNewPassword.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtNewPassword.Maximum = 2147483647D;
|
||||
this.txtNewPassword.Minimum = -2147483648D;
|
||||
this.txtNewPassword.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtNewPassword.Name = "txtNewPassword";
|
||||
this.txtNewPassword.PasswordChar = '*';
|
||||
this.txtNewPassword.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtNewPassword.Size = new System.Drawing.Size(188, 42);
|
||||
|
||||
this.txtNewPassword.StyleCustomMode = true;
|
||||
this.txtNewPassword.TabIndex = 9;
|
||||
this.txtNewPassword.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblComfirmPassword
|
||||
//
|
||||
this.lblComfirmPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblComfirmPassword.Location = new System.Drawing.Point(88, 185);
|
||||
this.lblComfirmPassword.Name = "lblComfirmPassword";
|
||||
this.lblComfirmPassword.Size = new System.Drawing.Size(110, 29);
|
||||
this.lblComfirmPassword.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblComfirmPassword.TabIndex = 10;
|
||||
this.lblComfirmPassword.Text = "确认密码";
|
||||
this.lblComfirmPassword.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// lblNewPassword
|
||||
//
|
||||
this.lblNewPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblNewPassword.Location = new System.Drawing.Point(114, 130);
|
||||
this.lblNewPassword.Name = "lblNewPassword";
|
||||
this.lblNewPassword.Size = new System.Drawing.Size(84, 29);
|
||||
this.lblNewPassword.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblNewPassword.TabIndex = 8;
|
||||
this.lblNewPassword.Text = "新密码";
|
||||
this.lblNewPassword.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// txtOldPassword
|
||||
//
|
||||
this.txtOldPassword.ButtonFillColor = System.Drawing.Color.White;
|
||||
this.txtOldPassword.ButtonFillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtOldPassword.ButtonFillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.txtOldPassword.ButtonForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
|
||||
this.txtOldPassword.ButtonForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.txtOldPassword.ButtonForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
|
||||
this.txtOldPassword.ButtonRectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtOldPassword.ButtonRectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
|
||||
this.txtOldPassword.ButtonSymbol = 61761;
|
||||
this.txtOldPassword.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||
this.txtOldPassword.FillColor2 = System.Drawing.Color.White;
|
||||
this.txtOldPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.txtOldPassword.Location = new System.Drawing.Point(205, 71);
|
||||
this.txtOldPassword.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.txtOldPassword.Maximum = 2147483647D;
|
||||
this.txtOldPassword.Minimum = -2147483648D;
|
||||
this.txtOldPassword.MinimumSize = new System.Drawing.Size(1, 16);
|
||||
this.txtOldPassword.Name = "txtOldPassword";
|
||||
this.txtOldPassword.PasswordChar = '*';
|
||||
this.txtOldPassword.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
|
||||
this.txtOldPassword.Size = new System.Drawing.Size(188, 42);
|
||||
|
||||
this.txtOldPassword.StyleCustomMode = true;
|
||||
this.txtOldPassword.TabIndex = 7;
|
||||
this.txtOldPassword.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblOldPassword
|
||||
//
|
||||
this.lblOldPassword.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblOldPassword.Location = new System.Drawing.Point(114, 78);
|
||||
this.lblOldPassword.Name = "lblOldPassword";
|
||||
this.lblOldPassword.Size = new System.Drawing.Size(84, 29);
|
||||
this.lblOldPassword.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblOldPassword.TabIndex = 6;
|
||||
this.lblOldPassword.Text = "旧密码";
|
||||
this.lblOldPassword.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// uiLabel11
|
||||
//
|
||||
this.uiLabel11.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.uiLabel11.Location = new System.Drawing.Point(45, 23);
|
||||
this.uiLabel11.Name = "uiLabel11";
|
||||
this.uiLabel11.Size = new System.Drawing.Size(125, 29);
|
||||
this.uiLabel11.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.uiLabel11.TabIndex = 0;
|
||||
this.uiLabel11.Text = "修改密码";
|
||||
this.uiLabel11.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// AccountForm
|
||||
//
|
||||
this.AllowShowTitle = false;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 27F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1031, 558);
|
||||
this.Controls.Add(this.uiPanel1);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "AccountForm";
|
||||
this.Padding = new System.Windows.Forms.Padding(0);
|
||||
this.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
|
||||
this.ShowTitle = false;
|
||||
this.ShowTitleIcon = true;
|
||||
this.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.Text = "账户管理";
|
||||
this.TitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
|
||||
this.TitleForeColor = System.Drawing.Color.DimGray;
|
||||
this.TopMost = true;
|
||||
this.Load += new System.EventHandler(this.AccountForm_Load);
|
||||
this.uiPanel1.ResumeLayout(false);
|
||||
this.titlePanel.ResumeLayout(false);
|
||||
this.panel1.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.imageAvator)).EndInit();
|
||||
this.uiTabControl1.ResumeLayout(false);
|
||||
this.tabPage1.ResumeLayout(false);
|
||||
this.tabPage2.ResumeLayout(false);
|
||||
this.tabPage3.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private Sunny.UI.UIPanel uiPanel1;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.Label lblCurrentUser;
|
||||
private System.Windows.Forms.PictureBox imageAvator;
|
||||
private Sunny.UI.UITabControl uiTabControl1;
|
||||
private System.Windows.Forms.TabPage tabPage1;
|
||||
private Sunny.UI.UIButton btnSave;
|
||||
private Sunny.UI.UITextBox txtSignature;
|
||||
private Sunny.UI.UILabel lblSignature;
|
||||
private Sunny.UI.UITextBox txtAddress;
|
||||
private Sunny.UI.UILabel lblAddress;
|
||||
private Sunny.UI.UITextBox txtTel;
|
||||
private Sunny.UI.UILabel lblTel;
|
||||
private Sunny.UI.UITextBox txtEmail;
|
||||
private Sunny.UI.UILabel lblEmail;
|
||||
private Sunny.UI.UILabel lblBirthday;
|
||||
private Sunny.UI.UIRadioButton rdFemale;
|
||||
private Sunny.UI.UIRadioButton rdMale;
|
||||
private Sunny.UI.UILabel lblGender;
|
||||
private Sunny.UI.UILabel lblNickName;
|
||||
private Sunny.UI.UITextBox txtName;
|
||||
private Sunny.UI.UILabel lblName;
|
||||
private Sunny.UI.UITextBox txtAccount;
|
||||
private Sunny.UI.UILabel lblAccount;
|
||||
private System.Windows.Forms.TabPage tabPage2;
|
||||
private Sunny.UI.UIButton btnSelectAvator;
|
||||
private Sunny.UI.UILabel uiLabel10;
|
||||
private System.Windows.Forms.TabPage tabPage3;
|
||||
private Sunny.UI.UIButton btnReset;
|
||||
private Sunny.UI.UIButton btnChangePassword;
|
||||
private Sunny.UI.UITextBox txtComfirmPassword;
|
||||
private Sunny.UI.UITextBox txtNewPassword;
|
||||
private Sunny.UI.UILabel lblComfirmPassword;
|
||||
private Sunny.UI.UILabel lblNewPassword;
|
||||
private Sunny.UI.UITextBox txtOldPassword;
|
||||
private Sunny.UI.UILabel lblOldPassword;
|
||||
private Sunny.UI.UILabel uiLabel11;
|
||||
private System.Windows.Forms.Panel titlePanel;
|
||||
private Sunny.UI.UILabel uiLabel15;
|
||||
private Sunny.UI.UISymbolLabel btnClose;
|
||||
private Sunny.UI.UITextBox txtNickName;
|
||||
private Sunny.UI.UIDatePicker txtBirthday;
|
||||
}
|
||||
}
|
304
DH.RBAC/AccountForm.cs
Normal file
@ -0,0 +1,304 @@
|
||||
using Sunny.UI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Common;
|
||||
using DH.RBAC.Properties;
|
||||
using DH.RBAC.Logic.Sys;
|
||||
using DH.RBAC.Utility.Other;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
|
||||
namespace DH.RBAC
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户账户界面
|
||||
/// </summary>
|
||||
public partial class AccountForm : UIForm
|
||||
{
|
||||
private SysUserLogic userlogic;
|
||||
private SysUserLogOnLogic userLogOnLogic;
|
||||
/// <summary>
|
||||
/// 构造方法
|
||||
/// </summary>
|
||||
public AccountForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
userlogic = new SysUserLogic();
|
||||
userLogOnLogic = new SysUserLogOnLogic();
|
||||
}
|
||||
|
||||
#region 标题栏 处理
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
FormHelper.subForm = null;
|
||||
this.Close();
|
||||
}
|
||||
private Point mPoint;
|
||||
private void titlePanel_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
mPoint = new Point(e.X, e.Y);
|
||||
}
|
||||
|
||||
private void titlePanel_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_MouseEnter(object sender, EventArgs e)
|
||||
{
|
||||
btnClose.BackColor = Color.FromArgb(231, 231, 231);
|
||||
}
|
||||
|
||||
private void btnClose_MouseLeave(object sender, EventArgs e)
|
||||
{
|
||||
btnClose.BackColor = Color.Transparent;
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
private string Avatar;
|
||||
/// <summary>
|
||||
/// 画面加载,读取用户信息,显示在界面上
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void AccountForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
SysUser user = userlogic.Get(GlobalConfig.CurrentUser.Id);
|
||||
if (user == null)
|
||||
{
|
||||
AntdUI.Message.warn(this, "网络或服务器异常,请稍后重试!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
Avatar = user.Avatar;
|
||||
txtAccount.Text = user.Account;
|
||||
txtNickName.Text = user.NickName;
|
||||
txtName.Text = user.RealName;
|
||||
if (user.Gender == "1")
|
||||
rdMale.Checked = true;
|
||||
else
|
||||
rdFemale.Checked = true;
|
||||
txtBirthday.Value = user.Birthday.Value;
|
||||
txtEmail.Text = user.Email;
|
||||
txtTel.Text = user.MobilePhone;
|
||||
txtAddress.Text = user.Address;
|
||||
txtSignature.Text = user.Signature;
|
||||
|
||||
//头像显示
|
||||
if (StringHelper.IsNullOrEmpty(user.AvatarBase64))
|
||||
{
|
||||
imageAvator.Image = Resources.avatar;
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
MemoryStream ms = new MemoryStream(Convert.FromBase64String(user.AvatarBase64));
|
||||
imageAvator.Image = Image.FromStream(ms);
|
||||
}
|
||||
catch
|
||||
{
|
||||
imageAvator.Image = Resources.avatar;
|
||||
}
|
||||
}
|
||||
|
||||
lblCurrentUser.Text = $"{user.Account}@{user.NickName}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存修改
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void btnSave_Click(object sender, EventArgs e)
|
||||
{
|
||||
//非空检测
|
||||
if (StringHelper.IsNullOrEmpty(txtNickName.Text))
|
||||
{
|
||||
AntdUI.Message.warn(this, "昵称不能为空!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
if (StringHelper.IsNullOrEmpty(txtName.Text))
|
||||
{
|
||||
AntdUI.Message.warn(this, "姓名不能为空!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
if (StringHelper.IsNullOrEmpty(txtBirthday.Text))
|
||||
{
|
||||
AntdUI.Message.warn(this, "请选择生日!", autoClose: 3);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
if (StringHelper.IsNullOrEmpty(txtEmail.Text))
|
||||
{
|
||||
AntdUI.Message.warn(this, "邮箱不能为空!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
if (StringHelper.IsNullOrEmpty(txtTel.Text))
|
||||
{
|
||||
AntdUI.Message.warn(this, "手机不能为空!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//获得目前信息,提交给服务端处理,返回结果
|
||||
SysUser model = new SysUser();
|
||||
model.Id = GlobalConfig.CurrentUser.Id;
|
||||
model.Account = txtAccount.Text;
|
||||
model.NickName = txtNickName.Text;
|
||||
model.RealName = txtName.Text;
|
||||
model.Avatar = Avatar;
|
||||
model.Gender = rdMale.Checked ? "1" : "0";
|
||||
model.StrBirthday = txtBirthday.Text;
|
||||
model.Email = txtEmail.Text;
|
||||
model.MobilePhone = txtTel.Text;
|
||||
model.Address = txtAddress.Text;
|
||||
model.Signature = txtSignature.Text;
|
||||
|
||||
DateTime defaultDt = DateTime.Today;
|
||||
DateTime.TryParse(model.StrBirthday, out defaultDt);
|
||||
model.Birthday = defaultDt;
|
||||
int row = userlogic.AppUpdateBasicInfo(model);
|
||||
|
||||
if (row == 0)
|
||||
{
|
||||
AntdUI.Message.warn(this, "对不起,操作失败!", autoClose: 3);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
AntdUI.Message.success(this, "恭喜你,操作成功!", autoClose: 3);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 选择图片上传
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void btnSelectAvator_Click(object sender, EventArgs e)
|
||||
{
|
||||
//OpenFileDialog dialog = new OpenFileDialog();
|
||||
//dialog.Filter = "Image Files(*.BMP;*.JPG;*.png)|*.BMP;*.JPG;*.png";
|
||||
//if (dialog.ShowDialog() == DialogResult.OK)
|
||||
//{
|
||||
// string fileName = dialog.FileName;
|
||||
// Image image = Image.FromFile(fileName);
|
||||
// //上传到服务器
|
||||
// AjaxResult result = null;
|
||||
|
||||
// string url = GlobalConfig.Config.Url + "account/uploadImage";
|
||||
// string str = HttpUtils.PostFile(url, fileName, 2000);
|
||||
// try
|
||||
// {
|
||||
// result = str.ToObject<AjaxResult>();
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
// result = null;
|
||||
// }
|
||||
|
||||
|
||||
// if (result == null)
|
||||
// {
|
||||
// this.ShowWarningDialog("网络或服务器异常,请稍后重试", UIStyle.White);
|
||||
// return;
|
||||
// }
|
||||
// if (result.state != ResultType.Success)
|
||||
// {
|
||||
// this.ShowWarningDialog(result.message, UIStyle.White);
|
||||
// return;
|
||||
// }
|
||||
// //上传成功,修改界面头像,以及服务器头像地址
|
||||
// Avatar = result.data.ToString();
|
||||
// imageAvator.Image = image;
|
||||
// this.ShowSuccessDialog("上传成功,点击保存后生效", UIStyle.White);
|
||||
//}
|
||||
}
|
||||
|
||||
private void btnReset_Click(object sender, EventArgs e)
|
||||
{
|
||||
txtOldPassword.Text = string.Empty;
|
||||
txtNewPassword.Text = string.Empty;
|
||||
txtComfirmPassword.Text = string.Empty;
|
||||
}
|
||||
|
||||
private void btnChangePassword_Click(object sender, EventArgs e)
|
||||
{
|
||||
//非空检测
|
||||
if (StringHelper.IsNullOrEmpty(txtOldPassword.Text))
|
||||
{
|
||||
AntdUI.Message.warn(this, "旧密码不能为空!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
if (StringHelper.IsNullOrEmpty(txtNewPassword.Text))
|
||||
{
|
||||
AntdUI.Message.warn(this, "新密码不能为空!", autoClose: 3);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
if (StringHelper.IsNullOrEmpty(txtComfirmPassword.Text))
|
||||
{
|
||||
AntdUI.Message.warn(this, "确认密码不能为空!", autoClose: 3);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
if (txtNewPassword.Text != txtComfirmPassword.Text)
|
||||
{
|
||||
AntdUI.Message.warn(this, "两次密码不一致!", autoClose: 3);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Dictionary<string, string> parm = new Dictionary<string, string>();
|
||||
string userId = GlobalConfig.CurrentUser.Id;
|
||||
string oldPassword = txtOldPassword.Text;
|
||||
string newPassword = txtNewPassword.Text;
|
||||
string confirmPassword = txtComfirmPassword.Text;
|
||||
|
||||
|
||||
if (!newPassword.Equals(confirmPassword))
|
||||
{
|
||||
AntdUI.Message.warn(this, "两次密码输入不一致,请重新确认!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
oldPassword = oldPassword.MD5Encrypt();
|
||||
newPassword = newPassword.MD5Encrypt();
|
||||
confirmPassword = confirmPassword.MD5Encrypt();
|
||||
|
||||
var userLoginEntity = userLogOnLogic.GetByAccount(userId);
|
||||
if (oldPassword.DESEncrypt(userLoginEntity.SecretKey).MD5Encrypt() != userLoginEntity.Password)
|
||||
{
|
||||
AntdUI.Message.warn(this, "旧密码验证失败!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
userLoginEntity.Password = newPassword.DESEncrypt(userLoginEntity.SecretKey).MD5Encrypt();
|
||||
int isSuccess = userLogOnLogic.ModifyPwd(userLoginEntity);
|
||||
if (isSuccess == 0)
|
||||
{
|
||||
AntdUI.Message.warn(this, "对不起,操作失败!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
AntdUI.Message.success(this, "修改成功!", autoClose: 3);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
1161
DH.RBAC/AccountForm.resx
Normal file
35
DH.RBAC/Common/GlobalConfig.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using DH.RBAC.Model.Sys;
|
||||
|
||||
namespace DH.RBAC.Common
|
||||
{
|
||||
/// <summary>
|
||||
/// 全局数据存放
|
||||
/// </summary>
|
||||
public class GlobalConfig
|
||||
{
|
||||
public static MyConfig Config { get; set; }
|
||||
/// <summary>
|
||||
/// 当前登录的用户
|
||||
/// </summary>
|
||||
public static SysUser CurrentUser;
|
||||
|
||||
/// <summary>
|
||||
/// 当前用户头像
|
||||
/// </summary>
|
||||
public static Image Avatar;
|
||||
|
||||
/// <summary>
|
||||
/// 当前选的哪个菜单
|
||||
/// </summary>
|
||||
public static string CurrentMenuText;
|
||||
|
||||
/// <summary>
|
||||
/// 当前用户权限
|
||||
/// </summary>
|
||||
public static List<SysPermission> PermissionList;
|
||||
|
||||
|
||||
}
|
||||
}
|
719
DH.RBAC/Common/IconDict.cs
Normal file
@ -0,0 +1,719 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace DH.RBAC.Common
|
||||
{
|
||||
/// <summary>
|
||||
/// 图标字典
|
||||
/// </summary>
|
||||
public class IconDict
|
||||
{
|
||||
/// <summary>
|
||||
/// 全局存放图标字典
|
||||
/// </summary>
|
||||
public static Dictionary<string, int> MyIconDict = Init();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 初始化字典
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private static Dictionary<string, int> Init()
|
||||
{
|
||||
Dictionary<string, int> dict = new Dictionary<string, int>();
|
||||
dict.Add("fa fa-bluetooth", 62099);
|
||||
dict.Add("fa fa-bluetooth-b", 62100);
|
||||
dict.Add("fa fa-codiepie", 62084);
|
||||
dict.Add("fa fa-credit-card-alt", 62083);
|
||||
dict.Add("fa fa-edge", 62082);
|
||||
dict.Add("fa fa-fort-awesome", 62086);
|
||||
dict.Add("fa fa-hashtag", 62098);
|
||||
dict.Add("fa fa-mixcloud", 62089);
|
||||
dict.Add("fa fa-modx", 62085);
|
||||
dict.Add("fa fa-pause-circle", 62091);
|
||||
dict.Add("fa fa-pause-circle-o", 62092);
|
||||
dict.Add("fa fa-percent", 62101);
|
||||
dict.Add("fa fa-product-hunt", 62088);
|
||||
dict.Add("fa fa-reddit-alien", 62081);
|
||||
dict.Add("fa fa-scribd", 62090);
|
||||
dict.Add("fa fa-shopping-bag", 62096);
|
||||
dict.Add("fa fa-shopping-basket", 62097);
|
||||
dict.Add("fa fa-stop-circle", 62093);
|
||||
dict.Add("fa fa-stop-circle-o", 62094);
|
||||
dict.Add("fa fa-usb", 62087);
|
||||
dict.Add("fa fa-adjust", 61506);
|
||||
dict.Add("fa fa-anchor", 61757);
|
||||
dict.Add("fa fa-archive", 61831);
|
||||
dict.Add("fa fa-area-chart", 61950);
|
||||
dict.Add("fa fa-arrows", 61511);
|
||||
dict.Add("fa fa-arrows-h", 61566);
|
||||
dict.Add("fa fa-arrows-v", 61565);
|
||||
dict.Add("fa fa-asterisk", 61545);
|
||||
dict.Add("fa fa-at", 61946);
|
||||
dict.Add("fa fa-automobile", 61881);
|
||||
dict.Add("fa fa-balance-scale", 62030);
|
||||
dict.Add("fa fa-ban", 61534);
|
||||
dict.Add("fa fa-bank", 61852);
|
||||
dict.Add("fa fa-bar-chart", 61568);
|
||||
dict.Add("fa fa-bar-chart-o", 61568);
|
||||
dict.Add("fa fa-barcode", 61482);
|
||||
dict.Add("fa fa-bars", 61641);
|
||||
dict.Add("fa fa-battery-0", 62020);
|
||||
dict.Add("fa fa-battery-1", 62019);
|
||||
dict.Add("fa fa-battery-2", 62018);
|
||||
dict.Add("fa fa-battery-3", 62017);
|
||||
dict.Add("fa fa-battery-4", 62016);
|
||||
dict.Add("fa fa-battery-empty", 62020);
|
||||
dict.Add("fa fa-battery-full", 62016);
|
||||
dict.Add("fa fa-battery-half", 62018);
|
||||
dict.Add("fa fa-battery-quarter", 62019);
|
||||
dict.Add("fa fa-battery-three-quarters", 62017);
|
||||
dict.Add("fa fa-bed", 62006);
|
||||
dict.Add("fa fa-beer", 61692);
|
||||
dict.Add("fa fa-bell", 61683);
|
||||
dict.Add("fa fa-bell-o", 61602);
|
||||
dict.Add("fa fa-bell-slash", 61942);
|
||||
dict.Add("fa fa-bell-slash-o", 61943);
|
||||
dict.Add("fa fa-bicycle", 61958);
|
||||
dict.Add("fa fa-binoculars", 61925);
|
||||
dict.Add("fa fa-birthday-cake", 61949);
|
||||
dict.Add("fa fa-bolt", 61671);
|
||||
dict.Add("fa fa-bomb", 61922);
|
||||
dict.Add("fa fa-book", 61485);
|
||||
dict.Add("fa fa-bookmark", 61486);
|
||||
dict.Add("fa fa-bookmark-o", 61591);
|
||||
dict.Add("fa fa-briefcase", 61617);
|
||||
dict.Add("fa fa-bug", 61832);
|
||||
dict.Add("fa fa-building", 61869);
|
||||
dict.Add("fa fa-building-o", 61687);
|
||||
dict.Add("fa fa-bullhorn", 61601);
|
||||
dict.Add("fa fa-bullseye", 61760);
|
||||
dict.Add("fa fa-bus", 61959);
|
||||
dict.Add("fa fa-cab", 61882);
|
||||
dict.Add("fa fa-calculator", 61932);
|
||||
dict.Add("fa fa-calendar", 61555);
|
||||
dict.Add("fa fa-calendar-check-o", 62068);
|
||||
dict.Add("fa fa-calendar-minus-o", 62066);
|
||||
dict.Add("fa fa-calendar-o", 61747);
|
||||
dict.Add("fa fa-calendar-plus-o", 62065);
|
||||
dict.Add("fa fa-calendar-times-o", 62067);
|
||||
dict.Add("fa fa-camera", 61488);
|
||||
dict.Add("fa fa-camera-retro", 61571);
|
||||
dict.Add("fa fa-car", 61881);
|
||||
dict.Add("fa fa-caret-square-o-down", 61776);
|
||||
dict.Add("fa fa-caret-square-o-left", 61841);
|
||||
dict.Add("fa fa-caret-square-o-right", 61778);
|
||||
dict.Add("fa fa-caret-square-o-up", 61777);
|
||||
dict.Add("fa fa-cart-arrow-down", 61976);
|
||||
dict.Add("fa fa-cart-plus", 61975);
|
||||
dict.Add("fa fa-cc", 61962);
|
||||
dict.Add("fa fa-certificate", 61603);
|
||||
dict.Add("fa fa-check", 61452);
|
||||
dict.Add("fa fa-check-circle", 61528);
|
||||
dict.Add("fa fa-check-circle-o", 61533);
|
||||
dict.Add("fa fa-check-square", 61770);
|
||||
dict.Add("fa fa-check-square-o", 61510);
|
||||
dict.Add("fa fa-child", 61870);
|
||||
dict.Add("fa fa-circle", 61713);
|
||||
dict.Add("fa fa-circle-o", 61708);
|
||||
dict.Add("fa fa-circle-o-notch", 61902);
|
||||
dict.Add("fa fa-circle-thin", 61915);
|
||||
dict.Add("fa fa-clock-o", 61463);
|
||||
dict.Add("fa fa-clone", 62029);
|
||||
dict.Add("fa fa-close", 61453);
|
||||
dict.Add("fa fa-cloud", 61634);
|
||||
dict.Add("fa fa-cloud-download", 61677);
|
||||
dict.Add("fa fa-cloud-upload", 61678);
|
||||
dict.Add("fa fa-code", 61729);
|
||||
dict.Add("fa fa-code-fork", 61734);
|
||||
dict.Add("fa fa-coffee", 61684);
|
||||
dict.Add("fa fa-cog", 61459);
|
||||
dict.Add("fa fa-cogs", 61573);
|
||||
dict.Add("fa fa-comment", 61557);
|
||||
dict.Add("fa fa-comment-o", 61669);
|
||||
dict.Add("fa fa-commenting", 62074);
|
||||
dict.Add("fa fa-commenting-o", 62075);
|
||||
dict.Add("fa fa-comments", 61574);
|
||||
dict.Add("fa fa-comments-o", 61670);
|
||||
dict.Add("fa fa-compass", 61774);
|
||||
dict.Add("fa fa-copyright", 61945);
|
||||
dict.Add("fa fa-creative-commons", 62046);
|
||||
dict.Add("fa fa-credit-card", 61597);
|
||||
dict.Add("fa fa-crop", 61733);
|
||||
dict.Add("fa fa-crosshairs", 61531);
|
||||
dict.Add("fa fa-cube", 61874);
|
||||
dict.Add("fa fa-cubes", 61875);
|
||||
dict.Add("fa fa-cutlery", 61685);
|
||||
dict.Add("fa fa-dashboard", 61668);
|
||||
dict.Add("fa fa-database", 61888);
|
||||
dict.Add("fa fa-desktop", 61704);
|
||||
dict.Add("fa fa-diamond", 61977);
|
||||
dict.Add("fa fa-dot-circle-o", 61842);
|
||||
dict.Add("fa fa-download", 61465);
|
||||
dict.Add("fa fa-edit", 61508);
|
||||
dict.Add("fa fa-ellipsis-h", 61761);
|
||||
dict.Add("fa fa-ellipsis-v", 61762);
|
||||
dict.Add("fa fa-envelope", 61664);
|
||||
dict.Add("fa fa-envelope-o", 61443);
|
||||
dict.Add("fa fa-envelope-square", 61849);
|
||||
dict.Add("fa fa-eraser", 61741);
|
||||
dict.Add("fa fa-exchange", 61676);
|
||||
dict.Add("fa fa-exclamation", 61738);
|
||||
dict.Add("fa fa-exclamation-circle", 61546);
|
||||
dict.Add("fa fa-exclamation-triangle", 61553);
|
||||
dict.Add("fa fa-external-link", 61582);
|
||||
dict.Add("fa fa-external-link-square", 61772);
|
||||
dict.Add("fa fa-eye", 61550);
|
||||
dict.Add("fa fa-eye-slash", 61552);
|
||||
dict.Add("fa fa-eyedropper", 61947);
|
||||
dict.Add("fa fa-fax", 61868);
|
||||
dict.Add("fa fa-feed", 61598);
|
||||
dict.Add("fa fa-female", 61826);
|
||||
dict.Add("fa fa-fighter-jet", 61691);
|
||||
dict.Add("fa fa-file-archive-o", 61894);
|
||||
dict.Add("fa fa-file-audio-o", 61895);
|
||||
dict.Add("fa fa-file-code-o", 61897);
|
||||
dict.Add("fa fa-file-excel-o", 61891);
|
||||
dict.Add("fa fa-file-image-o", 61893);
|
||||
dict.Add("fa fa-file-movie-o", 61896);
|
||||
dict.Add("fa fa-file-pdf-o", 61889);
|
||||
dict.Add("fa fa-file-photo-o", 61893);
|
||||
dict.Add("fa fa-file-picture-o", 61893);
|
||||
dict.Add("fa fa-file-powerpoint-o", 61892);
|
||||
dict.Add("fa fa-file-sound-o", 61895);
|
||||
dict.Add("fa fa-file-video-o", 61896);
|
||||
dict.Add("fa fa-file-word-o", 61890);
|
||||
dict.Add("fa fa-file-zip-o", 61894);
|
||||
dict.Add("fa fa-film", 61448);
|
||||
dict.Add("fa fa-filter", 61616);
|
||||
dict.Add("fa fa-fire", 61549);
|
||||
dict.Add("fa fa-fire-extinguisher", 61748);
|
||||
dict.Add("fa fa-flag", 61476);
|
||||
dict.Add("fa fa-flag-checkered", 61726);
|
||||
dict.Add("fa fa-flag-o", 61725);
|
||||
dict.Add("fa fa-flash", 61671);
|
||||
dict.Add("fa fa-flask", 61635);
|
||||
dict.Add("fa fa-folder", 61563);
|
||||
dict.Add("fa fa-folder-o", 61716);
|
||||
dict.Add("fa fa-folder-open", 61564);
|
||||
dict.Add("fa fa-folder-open-o", 61717);
|
||||
dict.Add("fa fa-frown-o", 61721);
|
||||
dict.Add("fa fa-futbol-o", 61923);
|
||||
dict.Add("fa fa-gamepad", 61723);
|
||||
dict.Add("fa fa-gavel", 61667);
|
||||
dict.Add("fa fa-gear", 61459);
|
||||
dict.Add("fa fa-gears", 61573);
|
||||
dict.Add("fa fa-gift", 61547);
|
||||
dict.Add("fa fa-glass", 61440);
|
||||
dict.Add("fa fa-globe", 61612);
|
||||
dict.Add("fa fa-graduation-cap", 61853);
|
||||
dict.Add("fa fa-group", 61632);
|
||||
dict.Add("fa fa-hand-grab-o", 62037);
|
||||
dict.Add("fa fa-hand-lizard-o", 62040);
|
||||
dict.Add("fa fa-hand-paper-o", 62038);
|
||||
dict.Add("fa fa-hand-peace-o", 62043);
|
||||
dict.Add("fa fa-hand-pointer-o", 62042);
|
||||
dict.Add("fa fa-hand-rock-o", 62037);
|
||||
dict.Add("fa fa-hand-scissors-o", 62039);
|
||||
dict.Add("fa fa-hand-spock-o", 62041);
|
||||
dict.Add("fa fa-hand-stop-o", 62038);
|
||||
dict.Add("fa fa-hdd-o", 61600);
|
||||
dict.Add("fa fa-headphones", 61477);
|
||||
dict.Add("fa fa-heart", 61444);
|
||||
dict.Add("fa fa-heart-o", 61578);
|
||||
dict.Add("fa fa-heartbeat", 61982);
|
||||
dict.Add("fa fa-history", 61914);
|
||||
dict.Add("fa fa-home", 61461);
|
||||
dict.Add("fa fa-hotel", 62006);
|
||||
dict.Add("fa fa-hourglass", 62036);
|
||||
dict.Add("fa fa-hourglass-1", 62033);
|
||||
dict.Add("fa fa-hourglass-2", 62034);
|
||||
dict.Add("fa fa-hourglass-3", 62035);
|
||||
dict.Add("fa fa-hourglass-end", 62035);
|
||||
dict.Add("fa fa-hourglass-half", 62034);
|
||||
dict.Add("fa fa-hourglass-o", 62032);
|
||||
dict.Add("fa fa-hourglass-start", 62033);
|
||||
dict.Add("fa fa-i-cursor", 62022);
|
||||
dict.Add("fa fa-image", 61502);
|
||||
dict.Add("fa fa-inbox", 61468);
|
||||
dict.Add("fa fa-industry", 62069);
|
||||
dict.Add("fa fa-info", 61737);
|
||||
dict.Add("fa fa-info-circle", 61530);
|
||||
dict.Add("fa fa-institution", 61852);
|
||||
dict.Add("fa fa-key", 61572);
|
||||
dict.Add("fa fa-keyboard-o", 61724);
|
||||
dict.Add("fa fa-language", 61867);
|
||||
dict.Add("fa fa-laptop", 61705);
|
||||
dict.Add("fa fa-leaf", 61548);
|
||||
dict.Add("fa fa-legal", 61667);
|
||||
dict.Add("fa fa-lemon-o", 61588);
|
||||
dict.Add("fa fa-level-down", 61769);
|
||||
dict.Add("fa fa-level-up", 61768);
|
||||
dict.Add("fa fa-life-bouy", 61901);
|
||||
dict.Add("fa fa-life-buoy", 61901);
|
||||
dict.Add("fa fa-life-ring", 61901);
|
||||
dict.Add("fa fa-life-saver", 61901);
|
||||
dict.Add("fa fa-lightbulb-o", 61675);
|
||||
dict.Add("fa fa-line-chart", 61953);
|
||||
dict.Add("fa fa-location-arrow", 61732);
|
||||
dict.Add("fa fa-lock", 61475);
|
||||
dict.Add("fa fa-magic", 61648);
|
||||
dict.Add("fa fa-magnet", 61558);
|
||||
dict.Add("fa fa-mail-forward", 61540);
|
||||
dict.Add("fa fa-mail-reply", 61714);
|
||||
dict.Add("fa fa-mail-reply-all", 61730);
|
||||
dict.Add("fa fa-male", 61827);
|
||||
dict.Add("fa fa-map", 62073);
|
||||
dict.Add("fa fa-map-marker", 61505);
|
||||
dict.Add("fa fa-map-o", 62072);
|
||||
dict.Add("fa fa-map-pin", 62070);
|
||||
dict.Add("fa fa-map-signs", 62071);
|
||||
dict.Add("fa fa-meh-o", 61722);
|
||||
dict.Add("fa fa-microphone", 61744);
|
||||
dict.Add("fa fa-microphone-slash", 61745);
|
||||
dict.Add("fa fa-minus", 61544);
|
||||
dict.Add("fa fa-minus-circle", 61526);
|
||||
dict.Add("fa fa-minus-square", 61766);
|
||||
dict.Add("fa fa-minus-square-o", 61767);
|
||||
dict.Add("fa fa-mobile", 61707);
|
||||
dict.Add("fa fa-mobile-phone", 61707);
|
||||
dict.Add("fa fa-money", 61654);
|
||||
dict.Add("fa fa-moon-o", 61830);
|
||||
dict.Add("fa fa-mortar-board", 61853);
|
||||
dict.Add("fa fa-motorcycle", 61980);
|
||||
dict.Add("fa fa-mouse-pointer", 62021);
|
||||
dict.Add("fa fa-music", 61441);
|
||||
dict.Add("fa fa-navicon", 61641);
|
||||
dict.Add("fa fa-newspaper-o", 61930);
|
||||
dict.Add("fa fa-object-group", 62023);
|
||||
dict.Add("fa fa-object-ungroup", 62024);
|
||||
dict.Add("fa fa-paint-brush", 61948);
|
||||
dict.Add("fa fa-paper-plane", 61912);
|
||||
dict.Add("fa fa-paper-plane-o", 61913);
|
||||
dict.Add("fa fa-paw", 61872);
|
||||
dict.Add("fa fa-pencil", 61504);
|
||||
dict.Add("fa fa-pencil-square", 61771);
|
||||
dict.Add("fa fa-pencil-square-o", 61508);
|
||||
dict.Add("fa fa-phone", 61589);
|
||||
dict.Add("fa fa-phone-square", 61592);
|
||||
dict.Add("fa fa-photo", 61502);
|
||||
dict.Add("fa fa-picture-o", 61502);
|
||||
dict.Add("fa fa-pie-chart", 61952);
|
||||
dict.Add("fa fa-plane", 61554);
|
||||
dict.Add("fa fa-plug", 61926);
|
||||
dict.Add("fa fa-plus", 61543);
|
||||
dict.Add("fa fa-plus-circle", 61525);
|
||||
dict.Add("fa fa-plus-square", 61694);
|
||||
dict.Add("fa fa-plus-square-o", 61846);
|
||||
dict.Add("fa fa-power-off", 61457);
|
||||
dict.Add("fa fa-print", 61487);
|
||||
dict.Add("fa fa-puzzle-piece", 61742);
|
||||
dict.Add("fa fa-qrcode", 61481);
|
||||
dict.Add("fa fa-question", 61736);
|
||||
dict.Add("fa fa-question-circle", 61529);
|
||||
dict.Add("fa fa-quote-left", 61709);
|
||||
dict.Add("fa fa-quote-right", 61710);
|
||||
dict.Add("fa fa-random", 61556);
|
||||
dict.Add("fa fa-recycle", 61880);
|
||||
dict.Add("fa fa-refresh", 61473);
|
||||
dict.Add("fa fa-registered", 62045);
|
||||
dict.Add("fa fa-remove", 61453);
|
||||
dict.Add("fa fa-reorder", 61641);
|
||||
dict.Add("fa fa-reply", 61714);
|
||||
dict.Add("fa fa-reply-all", 61730);
|
||||
dict.Add("fa fa-retweet", 61561);
|
||||
dict.Add("fa fa-road", 61464);
|
||||
dict.Add("fa fa-rocket", 61749);
|
||||
dict.Add("fa fa-rss", 61598);
|
||||
dict.Add("fa fa-rss-square", 61763);
|
||||
dict.Add("fa fa-search", 61442);
|
||||
dict.Add("fa fa-search-minus", 61456);
|
||||
dict.Add("fa fa-search-plus", 61454);
|
||||
dict.Add("fa fa-send", 61912);
|
||||
dict.Add("fa fa-send-o", 61913);
|
||||
dict.Add("fa fa-server", 62003);
|
||||
dict.Add("fa fa-share", 61540);
|
||||
dict.Add("fa fa-share-alt", 61920);
|
||||
dict.Add("fa fa-share-alt-square", 61921);
|
||||
dict.Add("fa fa-share-square", 61773);
|
||||
dict.Add("fa fa-share-square-o", 61509);
|
||||
dict.Add("fa fa-shield", 61746);
|
||||
dict.Add("fa fa-ship", 61978);
|
||||
dict.Add("fa fa-shopping-cart", 61562);
|
||||
dict.Add("fa fa-sign-in", 61584);
|
||||
dict.Add("fa fa-sign-out", 61579);
|
||||
dict.Add("fa fa-signal", 61458);
|
||||
dict.Add("fa fa-sitemap", 61672);
|
||||
dict.Add("fa fa-sliders", 61918);
|
||||
dict.Add("fa fa-smile-o", 61720);
|
||||
dict.Add("fa fa-soccer-ball-o", 61923);
|
||||
dict.Add("fa fa-sort", 61660);
|
||||
dict.Add("fa fa-sort-alpha-asc", 61789);
|
||||
dict.Add("fa fa-sort-alpha-desc", 61790);
|
||||
dict.Add("fa fa-sort-amount-asc", 61792);
|
||||
dict.Add("fa fa-sort-amount-desc", 61793);
|
||||
dict.Add("fa fa-sort-asc", 61662);
|
||||
dict.Add("fa fa-sort-desc", 61661);
|
||||
dict.Add("fa fa-sort-down", 61661);
|
||||
dict.Add("fa fa-sort-numeric-asc", 61794);
|
||||
dict.Add("fa fa-sort-numeric-desc", 61795);
|
||||
dict.Add("fa fa-sort-up", 61662);
|
||||
dict.Add("fa fa-space-shuttle", 61847);
|
||||
dict.Add("fa fa-spoon", 61873);
|
||||
dict.Add("fa fa-square", 61640);
|
||||
dict.Add("fa fa-square-o", 61590);
|
||||
dict.Add("fa fa-star", 61445);
|
||||
dict.Add("fa fa-star-half", 61577);
|
||||
dict.Add("fa fa-star-half-empty", 61731);
|
||||
dict.Add("fa fa-star-half-full", 61731);
|
||||
dict.Add("fa fa-star-half-o", 61731);
|
||||
dict.Add("fa fa-star-o", 61446);
|
||||
dict.Add("fa fa-sticky-note", 62025);
|
||||
dict.Add("fa fa-sticky-note-o", 62026);
|
||||
dict.Add("fa fa-street-view", 61981);
|
||||
dict.Add("fa fa-suitcase", 61682);
|
||||
dict.Add("fa fa-sun-o", 61829);
|
||||
dict.Add("fa fa-support", 61901);
|
||||
dict.Add("fa fa-tablet", 61706);
|
||||
dict.Add("fa fa-tachometer", 61668);
|
||||
dict.Add("fa fa-tag", 61483);
|
||||
dict.Add("fa fa-tags", 61484);
|
||||
dict.Add("fa fa-tasks", 61614);
|
||||
dict.Add("fa fa-taxi", 61882);
|
||||
dict.Add("fa fa-television", 62060);
|
||||
dict.Add("fa fa-terminal", 61728);
|
||||
dict.Add("fa fa-thumb-tack", 61581);
|
||||
dict.Add("fa fa-thumbs-down", 61797);
|
||||
dict.Add("fa fa-thumbs-o-down", 61576);
|
||||
dict.Add("fa fa-thumbs-o-up", 61575);
|
||||
dict.Add("fa fa-thumbs-up", 61796);
|
||||
dict.Add("fa fa-ticket", 61765);
|
||||
dict.Add("fa fa-times", 61453);
|
||||
dict.Add("fa fa-times-circle", 61527);
|
||||
dict.Add("fa fa-times-circle-o", 61532);
|
||||
dict.Add("fa fa-tint", 61507);
|
||||
dict.Add("fa fa-toggle-down", 61776);
|
||||
dict.Add("fa fa-toggle-left", 61841);
|
||||
dict.Add("fa fa-toggle-off", 61956);
|
||||
dict.Add("fa fa-toggle-on", 61957);
|
||||
dict.Add("fa fa-toggle-right", 61778);
|
||||
dict.Add("fa fa-toggle-up", 61777);
|
||||
dict.Add("fa fa-trademark", 62044);
|
||||
dict.Add("fa fa-trash", 61944);
|
||||
dict.Add("fa fa-trash-o", 61460);
|
||||
dict.Add("fa fa-tree", 61883);
|
||||
dict.Add("fa fa-trophy", 61585);
|
||||
dict.Add("fa fa-truck", 61649);
|
||||
dict.Add("fa fa-tty", 61924);
|
||||
dict.Add("fa fa-tv", 62060);
|
||||
dict.Add("fa fa-umbrella", 61673);
|
||||
dict.Add("fa fa-university", 61852);
|
||||
dict.Add("fa fa-unlock", 61596);
|
||||
dict.Add("fa fa-unlock-alt", 61758);
|
||||
dict.Add("fa fa-unsorted", 61660);
|
||||
dict.Add("fa fa-upload", 61587);
|
||||
dict.Add("fa fa-user", 61447);
|
||||
dict.Add("fa fa-user-plus", 62004);
|
||||
dict.Add("fa fa-user-secret", 61979);
|
||||
dict.Add("fa fa-user-times", 62005);
|
||||
dict.Add("fa fa-users", 61632);
|
||||
dict.Add("fa fa-video-camera", 61501);
|
||||
dict.Add("fa fa-volume-down", 61479);
|
||||
dict.Add("fa fa-volume-off", 61478);
|
||||
dict.Add("fa fa-volume-up", 61480);
|
||||
dict.Add("fa fa-warning", 61553);
|
||||
dict.Add("fa fa-wheelchair", 61843);
|
||||
dict.Add("fa fa-wifi", 61931);
|
||||
dict.Add("fa fa-wrench", 61613);
|
||||
dict.Add("fa fa-hand-o-down", 61607);
|
||||
dict.Add("fa fa-hand-o-left", 61605);
|
||||
dict.Add("fa fa-hand-o-right", 61604);
|
||||
dict.Add("fa fa-hand-o-up", 61606);
|
||||
dict.Add("fa fa-ambulance", 61689);
|
||||
dict.Add("fa fa-subway", 62009);
|
||||
dict.Add("fa fa-train", 62008);
|
||||
dict.Add("fa fa-genderless", 61997);
|
||||
dict.Add("fa fa-intersex", 61988);
|
||||
dict.Add("fa fa-mars", 61986);
|
||||
dict.Add("fa fa-mars-double", 61991);
|
||||
dict.Add("fa fa-mars-stroke", 61993);
|
||||
dict.Add("fa fa-mars-stroke-h", 61995);
|
||||
dict.Add("fa fa-mars-stroke-v", 61994);
|
||||
dict.Add("fa fa-mercury", 61987);
|
||||
dict.Add("fa fa-neuter", 61996);
|
||||
dict.Add("fa fa-transgender", 61988);
|
||||
dict.Add("fa fa-transgender-alt", 61989);
|
||||
dict.Add("fa fa-venus", 61985);
|
||||
dict.Add("fa fa-venus-double", 61990);
|
||||
dict.Add("fa fa-venus-mars", 61992);
|
||||
dict.Add("fa fa-file", 61787);
|
||||
dict.Add("fa fa-file-o", 61462);
|
||||
dict.Add("fa fa-file-text", 61788);
|
||||
dict.Add("fa fa-file-text-o", 61686);
|
||||
dict.Add("fa fa-cc-amex", 61939);
|
||||
dict.Add("fa fa-cc-diners-club", 62028);
|
||||
dict.Add("fa fa-cc-discover", 61938);
|
||||
dict.Add("fa fa-cc-jcb", 62027);
|
||||
dict.Add("fa fa-cc-mastercard", 61937);
|
||||
dict.Add("fa fa-cc-paypal", 61940);
|
||||
dict.Add("fa fa-cc-stripe", 61941);
|
||||
dict.Add("fa fa-cc-visa", 61936);
|
||||
dict.Add("fa fa-google-wallet", 61934);
|
||||
dict.Add("fa fa-paypal", 61933);
|
||||
dict.Add("fa fa-bitcoin", 61786);
|
||||
dict.Add("fa fa-btc", 61786);
|
||||
dict.Add("fa fa-cny", 61783);
|
||||
dict.Add("fa fa-dollar", 61781);
|
||||
dict.Add("fa fa-eur", 61779);
|
||||
dict.Add("fa fa-euro", 61779);
|
||||
dict.Add("fa fa-gbp", 61780);
|
||||
dict.Add("fa fa-gg", 62048);
|
||||
dict.Add("fa fa-gg-circle", 62049);
|
||||
dict.Add("fa fa-ils", 61963);
|
||||
dict.Add("fa fa-inr", 61782);
|
||||
dict.Add("fa fa-jpy", 61783);
|
||||
dict.Add("fa fa-krw", 61785);
|
||||
dict.Add("fa fa-rmb", 61783);
|
||||
dict.Add("fa fa-rouble", 61784);
|
||||
dict.Add("fa fa-rub", 61784);
|
||||
dict.Add("fa fa-ruble", 61784);
|
||||
dict.Add("fa fa-rupee", 61782);
|
||||
dict.Add("fa fa-shekel", 61963);
|
||||
dict.Add("fa fa-sheqel", 61963);
|
||||
dict.Add("fa fa-try", 61845);
|
||||
dict.Add("fa fa-turkish-lira", 61845);
|
||||
dict.Add("fa fa-usd", 61781);
|
||||
dict.Add("fa fa-won", 61785);
|
||||
dict.Add("fa fa-yen", 61783);
|
||||
dict.Add("fa fa-align-center", 61495);
|
||||
dict.Add("fa fa-align-justify", 61497);
|
||||
dict.Add("fa fa-align-left", 61494);
|
||||
dict.Add("fa fa-align-right", 61496);
|
||||
dict.Add("fa fa-bold", 61490);
|
||||
dict.Add("fa fa-chain", 61633);
|
||||
dict.Add("fa fa-chain-broken", 61735);
|
||||
dict.Add("fa fa-clipboard", 61674);
|
||||
dict.Add("fa fa-columns", 61659);
|
||||
dict.Add("fa fa-copy", 61637);
|
||||
dict.Add("fa fa-cut", 61636);
|
||||
dict.Add("fa fa-dedent", 61499);
|
||||
dict.Add("fa fa-files-o", 61637);
|
||||
dict.Add("fa fa-floppy-o", 61639);
|
||||
dict.Add("fa fa-font", 61489);
|
||||
dict.Add("fa fa-header", 61916);
|
||||
dict.Add("fa fa-indent", 61500);
|
||||
dict.Add("fa fa-italic", 61491);
|
||||
dict.Add("fa fa-link", 61633);
|
||||
dict.Add("fa fa-list", 61498);
|
||||
dict.Add("fa fa-list-alt", 61474);
|
||||
dict.Add("fa fa-list-ol", 61643);
|
||||
dict.Add("fa fa-list-ul", 61642);
|
||||
dict.Add("fa fa-outdent", 61499);
|
||||
dict.Add("fa fa-paperclip", 61638);
|
||||
dict.Add("fa fa-paragraph", 61917);
|
||||
dict.Add("fa fa-paste", 61674);
|
||||
dict.Add("fa fa-repeat", 61470);
|
||||
dict.Add("fa fa-rotate-left", 61666);
|
||||
dict.Add("fa fa-rotate-right", 61470);
|
||||
dict.Add("fa fa-save", 61639);
|
||||
dict.Add("fa fa-scissors", 61636);
|
||||
dict.Add("fa fa-strikethrough", 61644);
|
||||
dict.Add("fa fa-subscript", 61740);
|
||||
dict.Add("fa fa-superscript", 61739);
|
||||
dict.Add("fa fa-table", 61646);
|
||||
dict.Add("fa fa-text-height", 61492);
|
||||
dict.Add("fa fa-text-width", 61493);
|
||||
dict.Add("fa fa-th", 61450);
|
||||
dict.Add("fa fa-th-large", 61449);
|
||||
dict.Add("fa fa-th-list", 61451);
|
||||
dict.Add("fa fa-underline", 61645);
|
||||
dict.Add("fa fa-undo", 61666);
|
||||
dict.Add("fa fa-unlink", 61735);
|
||||
dict.Add("fa fa-angle-double-down", 61699);
|
||||
dict.Add("fa fa-angle-double-left", 61696);
|
||||
dict.Add("fa fa-angle-double-right", 61697);
|
||||
dict.Add("fa fa-angle-double-up", 61698);
|
||||
dict.Add("fa fa-angle-down", 61703);
|
||||
dict.Add("fa fa-angle-left", 61700);
|
||||
dict.Add("fa fa-angle-right", 61701);
|
||||
dict.Add("fa fa-angle-up", 61702);
|
||||
dict.Add("fa fa-arrow-circle-down", 61611);
|
||||
dict.Add("fa fa-arrow-circle-left", 61608);
|
||||
dict.Add("fa fa-arrow-circle-o-down", 61466);
|
||||
dict.Add("fa fa-arrow-circle-o-left", 61840);
|
||||
dict.Add("fa fa-arrow-circle-o-right", 61838);
|
||||
dict.Add("fa fa-arrow-circle-o-up", 61467);
|
||||
dict.Add("fa fa-arrow-circle-right", 61609);
|
||||
dict.Add("fa fa-arrow-circle-up", 61610);
|
||||
dict.Add("fa fa-arrow-down", 61539);
|
||||
dict.Add("fa fa-arrow-left", 61536);
|
||||
dict.Add("fa fa-arrow-right", 61537);
|
||||
dict.Add("fa fa-arrow-up", 61538);
|
||||
dict.Add("fa fa-arrows-alt", 61618);
|
||||
dict.Add("fa fa-caret-down", 61655);
|
||||
dict.Add("fa fa-caret-left", 61657);
|
||||
dict.Add("fa fa-caret-right", 61658);
|
||||
dict.Add("fa fa-caret-up", 61656);
|
||||
dict.Add("fa fa-chevron-circle-down", 61754);
|
||||
dict.Add("fa fa-chevron-circle-left", 61751);
|
||||
dict.Add("fa fa-chevron-circle-right", 61752);
|
||||
dict.Add("fa fa-chevron-circle-up", 61753);
|
||||
dict.Add("fa fa-chevron-down", 61560);
|
||||
dict.Add("fa fa-chevron-left", 61523);
|
||||
dict.Add("fa fa-chevron-right", 61524);
|
||||
dict.Add("fa fa-chevron-up", 61559);
|
||||
dict.Add("fa fa-long-arrow-down", 61813);
|
||||
dict.Add("fa fa-long-arrow-left", 61815);
|
||||
dict.Add("fa fa-long-arrow-right", 61816);
|
||||
dict.Add("fa fa-long-arrow-up", 61814);
|
||||
dict.Add("fa fa-backward", 61514);
|
||||
dict.Add("fa fa-compress", 61542);
|
||||
dict.Add("fa fa-eject", 61522);
|
||||
dict.Add("fa fa-expand", 61541);
|
||||
dict.Add("fa fa-fast-backward", 61513);
|
||||
dict.Add("fa fa-fast-forward", 61520);
|
||||
dict.Add("fa fa-forward", 61518);
|
||||
dict.Add("fa fa-pause", 61516);
|
||||
dict.Add("fa fa-play", 61515);
|
||||
dict.Add("fa fa-play-circle", 61764);
|
||||
dict.Add("fa fa-play-circle-o", 61469);
|
||||
dict.Add("fa fa-step-backward", 61512);
|
||||
dict.Add("fa fa-step-forward", 61521);
|
||||
dict.Add("fa fa-stop", 61517);
|
||||
dict.Add("fa fa-youtube-play", 61802);
|
||||
dict.Add("fa fa-500px", 62062);
|
||||
dict.Add("fa fa-adn", 61808);
|
||||
dict.Add("fa fa-amazon", 62064);
|
||||
dict.Add("fa fa-android", 61819);
|
||||
dict.Add("fa fa-angellist", 61961);
|
||||
dict.Add("fa fa-apple", 61817);
|
||||
dict.Add("fa fa-behance", 61876);
|
||||
dict.Add("fa fa-behance-square", 61877);
|
||||
dict.Add("fa fa-bitbucket", 61809);
|
||||
dict.Add("fa fa-bitbucket-square", 61810);
|
||||
dict.Add("fa fa-black-tie", 62078);
|
||||
dict.Add("fa fa-buysellads", 61965);
|
||||
dict.Add("fa fa-chrome", 62056);
|
||||
dict.Add("fa fa-codepen", 61899);
|
||||
dict.Add("fa fa-connectdevelop", 61966);
|
||||
dict.Add("fa fa-contao", 62061);
|
||||
dict.Add("fa fa-css3", 61756);
|
||||
dict.Add("fa fa-dashcube", 61968);
|
||||
dict.Add("fa fa-delicious", 61861);
|
||||
dict.Add("fa fa-deviantart", 61885);
|
||||
dict.Add("fa fa-digg", 61862);
|
||||
dict.Add("fa fa-dribbble", 61821);
|
||||
dict.Add("fa fa-dropbox", 61803);
|
||||
dict.Add("fa fa-drupal", 61865);
|
||||
dict.Add("fa fa-empire", 61905);
|
||||
dict.Add("fa fa-expeditedssl", 62014);
|
||||
dict.Add("fa fa-facebook", 61594);
|
||||
dict.Add("fa fa-facebook-f", 61594);
|
||||
dict.Add("fa fa-facebook-official", 62000);
|
||||
dict.Add("fa fa-facebook-square", 61570);
|
||||
dict.Add("fa fa-firefox", 62057);
|
||||
dict.Add("fa fa-flickr", 61806);
|
||||
dict.Add("fa fa-fonticons", 62080);
|
||||
dict.Add("fa fa-forumbee", 61969);
|
||||
dict.Add("fa fa-foursquare", 61824);
|
||||
dict.Add("fa fa-ge", 61905);
|
||||
dict.Add("fa fa-get-pocket", 62053);
|
||||
dict.Add("fa fa-git", 61907);
|
||||
dict.Add("fa fa-git-square", 61906);
|
||||
dict.Add("fa fa-github", 61595);
|
||||
dict.Add("fa fa-github-alt", 61715);
|
||||
dict.Add("fa fa-github-square", 61586);
|
||||
dict.Add("fa fa-gittip", 61828);
|
||||
dict.Add("fa fa-google", 61856);
|
||||
dict.Add("fa fa-google-plus", 61653);
|
||||
dict.Add("fa fa-google-plus-square", 61652);
|
||||
dict.Add("fa fa-gratipay", 61828);
|
||||
dict.Add("fa fa-hacker-news", 61908);
|
||||
dict.Add("fa fa-houzz", 62076);
|
||||
dict.Add("fa fa-html5", 61755);
|
||||
dict.Add("fa fa-instagram", 61805);
|
||||
dict.Add("fa fa-internet-explorer", 62059);
|
||||
dict.Add("fa fa-ioxhost", 61960);
|
||||
dict.Add("fa fa-joomla", 61866);
|
||||
dict.Add("fa fa-jsfiddle", 61900);
|
||||
dict.Add("fa fa-lastfm", 61954);
|
||||
dict.Add("fa fa-lastfm-square", 61955);
|
||||
dict.Add("fa fa-leanpub", 61970);
|
||||
dict.Add("fa fa-linkedin", 61665);
|
||||
dict.Add("fa fa-linkedin-square", 61580);
|
||||
dict.Add("fa fa-linux", 61820);
|
||||
dict.Add("fa fa-maxcdn", 61750);
|
||||
dict.Add("fa fa-meanpath", 61964);
|
||||
dict.Add("fa fa-medium", 62010);
|
||||
dict.Add("fa fa-odnoklassniki", 62051);
|
||||
dict.Add("fa fa-odnoklassniki-square", 62052);
|
||||
dict.Add("fa fa-opencart", 62013);
|
||||
dict.Add("fa fa-openid", 61851);
|
||||
dict.Add("fa fa-opera", 62058);
|
||||
dict.Add("fa fa-optin-monster", 62012);
|
||||
dict.Add("fa fa-pagelines", 61836);
|
||||
dict.Add("fa fa-pied-piper", 62126);
|
||||
dict.Add("fa fa-pied-piper-alt", 61864);
|
||||
dict.Add("fa fa-pinterest", 61650);
|
||||
dict.Add("fa fa-pinterest-p", 62001);
|
||||
dict.Add("fa fa-pinterest-square", 61651);
|
||||
dict.Add("fa fa-qq", 61910);
|
||||
dict.Add("fa fa-ra", 61904);
|
||||
dict.Add("fa fa-rebel", 61904);
|
||||
dict.Add("fa fa-reddit", 61857);
|
||||
dict.Add("fa fa-reddit-square", 61858);
|
||||
dict.Add("fa fa-renren", 61835);
|
||||
dict.Add("fa fa-safari", 62055);
|
||||
dict.Add("fa fa-sellsy", 61971);
|
||||
dict.Add("fa fa-shirtsinbulk", 61972);
|
||||
dict.Add("fa fa-simplybuilt", 61973);
|
||||
dict.Add("fa fa-skyatlas", 61974);
|
||||
dict.Add("fa fa-skype", 61822);
|
||||
dict.Add("fa fa-slack", 61848);
|
||||
dict.Add("fa fa-slideshare", 61927);
|
||||
dict.Add("fa fa-soundcloud", 61886);
|
||||
dict.Add("fa fa-spotify", 61884);
|
||||
dict.Add("fa fa-stack-exchange", 61837);
|
||||
dict.Add("fa fa-stack-overflow", 61804);
|
||||
dict.Add("fa fa-steam", 61878);
|
||||
dict.Add("fa fa-steam-square", 61879);
|
||||
dict.Add("fa fa-stumbleupon", 61860);
|
||||
dict.Add("fa fa-stumbleupon-circle", 61859);
|
||||
dict.Add("fa fa-tencent-weibo", 61909);
|
||||
dict.Add("fa fa-trello", 61825);
|
||||
dict.Add("fa fa-tripadvisor", 62050);
|
||||
dict.Add("fa fa-tumblr", 61811);
|
||||
dict.Add("fa fa-tumblr-square", 61812);
|
||||
dict.Add("fa fa-twitch", 61928);
|
||||
dict.Add("fa fa-twitter", 61593);
|
||||
dict.Add("fa fa-twitter-square", 61569);
|
||||
dict.Add("fa fa-viacoin", 62007);
|
||||
dict.Add("fa fa-vimeo", 62077);
|
||||
dict.Add("fa fa-vimeo-square", 61844);
|
||||
dict.Add("fa fa-vine", 61898);
|
||||
dict.Add("fa fa-vk", 61833);
|
||||
dict.Add("fa fa-wechat", 61911);
|
||||
dict.Add("fa fa-weibo", 61834);
|
||||
dict.Add("fa fa-weixin", 61911);
|
||||
dict.Add("fa fa-whatsapp", 62002);
|
||||
dict.Add("fa fa-wikipedia-w", 62054);
|
||||
dict.Add("fa fa-windows", 61818);
|
||||
dict.Add("fa fa-wordpress", 61850);
|
||||
dict.Add("fa fa-xing", 61800);
|
||||
dict.Add("fa fa-xing-square", 61801);
|
||||
dict.Add("fa fa-y-combinator", 62011);
|
||||
dict.Add("fa fa-y-combinator-square", 61908);
|
||||
dict.Add("fa fa-yahoo", 61854);
|
||||
dict.Add("fa fa-yc", 62011);
|
||||
dict.Add("fa fa-yc-square", 61908);
|
||||
dict.Add("fa fa-yelp", 61929);
|
||||
dict.Add("fa fa-youtube", 61799);
|
||||
dict.Add("fa fa-youtube-square", 61798);
|
||||
dict.Add("fa fa-h-square", 61693);
|
||||
dict.Add("fa fa-hospital-o", 61688);
|
||||
dict.Add("fa fa-medkit", 61690);
|
||||
dict.Add("fa fa-stethoscope", 61681);
|
||||
dict.Add("fa fa-user-md", 61680);
|
||||
return dict;
|
||||
}
|
||||
}
|
||||
}
|
45
DH.RBAC/Common/MyConfig.cs
Normal file
@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Common
|
||||
{
|
||||
public class MyConfig
|
||||
{
|
||||
public int EveryPageDataCount { get; set; }
|
||||
/// <summary>
|
||||
/// 数据库类型
|
||||
/// </summary>
|
||||
public string DbType { get; set; }
|
||||
/// <summary>
|
||||
/// 数据库主机IP
|
||||
/// </summary>
|
||||
public string DbHost { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据库名
|
||||
/// </summary>
|
||||
public string DbName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据库用户名
|
||||
/// </summary>
|
||||
public string DbUserName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据库密码
|
||||
/// </summary>
|
||||
public string DbPassword { get; set; }
|
||||
|
||||
|
||||
private bool _debug = false;
|
||||
/// <summary>
|
||||
/// 是否调试模式,调试模式将会输出日志
|
||||
/// </summary>
|
||||
public bool Debug { get { return _debug; } set { _debug = value; } }
|
||||
|
||||
|
||||
}
|
||||
}
|
148
DH.RBAC/DH.RBAC.csproj
Normal file
@ -0,0 +1,148 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0-windows</TargetFramework>
|
||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<BaseOutputPath>..\</BaseOutputPath>
|
||||
<AppendTargetFrameworkToOutputPath>output</AppendTargetFrameworkToOutputPath>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AccountForm.cs" />
|
||||
<Compile Include="AccountForm.Designer.cs" />
|
||||
<Compile Include="Common\GlobalConfig.cs" />
|
||||
<Compile Include="Common\IconDict.cs" />
|
||||
<Compile Include="Common\MyConfig.cs" />
|
||||
<Compile Include="Logic\BaseLogic.cs" />
|
||||
<Compile Include="Logic\Logger.cs" />
|
||||
<Compile Include="Logic\Sys\SysItemLogic.cs" />
|
||||
<Compile Include="Logic\Sys\SysItemsDetailLogic.cs" />
|
||||
<Compile Include="Logic\Sys\SysLogLogic.cs" />
|
||||
<Compile Include="Logic\Sys\SysOrganizeLogic.cs" />
|
||||
<Compile Include="Logic\Sys\SysPermissionLogic.cs" />
|
||||
<Compile Include="Logic\Sys\SysRoleAuthorizeLogic.cs" />
|
||||
<Compile Include="Logic\Sys\SysRoleLogic.cs" />
|
||||
<Compile Include="Logic\Sys\SysUserLogic.cs" />
|
||||
<Compile Include="Logic\Sys\SysUserLogOnLogic.cs" />
|
||||
<Compile Include="Logic\Sys\SysUserRoleRelationLogic.cs" />
|
||||
<Compile Include="Models\Base\BaseModelEntity.cs" />
|
||||
<Compile Include="Models\Base\CodeGenerator.cs" />
|
||||
<Compile Include="Models\Base\MenuControlAttribute.cs" />
|
||||
<Compile Include="Models\DTO\Parms\AuthorParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\FileUploadParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\ItemDetailIndexParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\KeyValue.cs" />
|
||||
<Compile Include="Models\DTO\Parms\LogDeleteParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\LogIndexParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\LongPrimaryKeyParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\ModifyPasswordParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\RoleDeleteParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\SearchParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\StrPrimaryKeyParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\UserDeleteParms.cs" />
|
||||
<Compile Include="Models\DTO\Parms\UserLoginParms.cs" />
|
||||
<Compile Include="Models\Enum\ModuleType.cs" />
|
||||
<Compile Include="Models\Sys\SysItem.cs" />
|
||||
<Compile Include="Models\Sys\SysItemDetail.cs" />
|
||||
<Compile Include="Models\Sys\SysLog.cs" />
|
||||
<Compile Include="Models\Sys\SysOrganize.cs" />
|
||||
<Compile Include="Models\Sys\SysPermission.cs" />
|
||||
<Compile Include="Models\Sys\SysRole.cs" />
|
||||
<Compile Include="Models\Sys\SysRoleAuthorize.cs" />
|
||||
<Compile Include="Models\Sys\SysUser.cs" />
|
||||
<Compile Include="Models\Sys\SysUserLogOn.cs" />
|
||||
<Compile Include="Models\Sys\SysUserRoleRelation.cs" />
|
||||
<Compile Include="Properties\Resources.Designer.cs" />
|
||||
<Compile Include="RBACWindow.cs" />
|
||||
<Compile Include="RBACWindow.Designer.cs" />
|
||||
<Compile Include="UserControls\AccountControl.cs" />
|
||||
<Compile Include="UserControls\AccountControl.Designer.cs" />
|
||||
<Compile Include="UserControls\Menus\UserMenuPanel.cs" />
|
||||
<Compile Include="UserControls\ProgressForm.cs" />
|
||||
<Compile Include="UserControls\ProgressForm.Designer.cs" />
|
||||
<Compile Include="Utility\Extension\ExtMethods.cs" />
|
||||
<Compile Include="Utility\Extension\MyEnvironment.cs" />
|
||||
<Compile Include="Utility\Other\DESHelper.cs" />
|
||||
<Compile Include="Utility\Other\FormHelper.cs" />
|
||||
<Compile Include="Utility\Other\JsonHelper.cs" />
|
||||
<Compile Include="Utility\Other\MD5Helper.cs" />
|
||||
<Compile Include="Utility\Other\PanelScrollHelper.cs" />
|
||||
<Compile Include="Utility\Other\ScreenUtils.cs" />
|
||||
<Compile Include="Utility\Other\SnowFlakeHelper.cs" />
|
||||
<Compile Include="Utility\Other\StringHelper.cs" />
|
||||
<Compile Include="Utility\Other\TreeSelect.cs" />
|
||||
<Compile Include="Utility\Other\UIUtils.cs" />
|
||||
<Compile Include="Utility\Other\UUID.cs" />
|
||||
<Compile Include="Utility\Other\ZTreeNode.cs" />
|
||||
<Compile Include="Utility\PopupTool\GripBounds.cs" />
|
||||
<Compile Include="Utility\PopupTool\Popup.cs" />
|
||||
<Compile Include="Utility\PopupTool\UnsafeMethods.cs" />
|
||||
<Compile Include="Views\DefaultPage.cs" />
|
||||
<Compile Include="Views\DefaultPage.Designer.cs" />
|
||||
<Compile Include="Views\EmptyPage.cs" />
|
||||
<Compile Include="Views\EmptyPage.Designer.cs" />
|
||||
<Compile Include="Views\MyPage.cs" />
|
||||
<Compile Include="Views\Sys\BaseSubForm.cs" />
|
||||
<Compile Include="Views\Sys\BaseSubForm.Designer.cs" />
|
||||
<Compile Include="Views\Sys\Organize\AddOrganizeForm.cs" />
|
||||
<Compile Include="Views\Sys\Organize\AddOrganizeForm.Designer.cs" />
|
||||
<Compile Include="Views\Sys\Organize\OrganizePage.cs" />
|
||||
<Compile Include="Views\Sys\Organize\OrganizePage.Designer.cs" />
|
||||
<Compile Include="Views\Sys\Permission\AddPermissionForm.cs" />
|
||||
<Compile Include="Views\Sys\Permission\AddPermissionForm.Designer.cs" />
|
||||
<Compile Include="Views\Sys\Permission\IconForm.cs" />
|
||||
<Compile Include="Views\Sys\Permission\IconForm.Designer.cs" />
|
||||
<Compile Include="Views\Sys\Permission\PermissionPage.cs" />
|
||||
<Compile Include="Views\Sys\Permission\PermissionPage.Designer.cs" />
|
||||
<Compile Include="Views\Sys\Role\AddRoleForm.cs" />
|
||||
<Compile Include="Views\Sys\Role\AddRoleForm.Designer.cs" />
|
||||
<Compile Include="Views\Sys\Role\RoleAuthorizeForm.cs" />
|
||||
<Compile Include="Views\Sys\Role\RoleAuthorizeForm.Designer.cs" />
|
||||
<Compile Include="Views\Sys\Role\RolePage.cs" />
|
||||
<Compile Include="Views\Sys\Role\RolePage.Designer.cs" />
|
||||
<Compile Include="Views\Sys\User\AddUserForm.cs" />
|
||||
<Compile Include="Views\Sys\User\AddUserForm.Designer.cs" />
|
||||
<Compile Include="Views\Sys\User\UserPage.cs" />
|
||||
<Compile Include="Views\Sys\User\UserPage.Designer.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="favicon.ico" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AntdUI" Version="1.8.9" />
|
||||
<PackageReference Include="JinianNet.JNTemplate" Version="2.4.2" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="SqlSugarCore" Version="5.1.4.185" />
|
||||
<PackageReference Include="SunnyUI" Version="3.8.2" />
|
||||
<PackageReference Include="System.Data.SqlClient" Version="4.9.0" />
|
||||
<PackageReference Include="System.Data.SQLite" Version="1.0.119" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="9.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<!-- 自动生成 -->
|
||||
<ItemGroup>
|
||||
<Compile Update="Page\DefaultPage.cs" />
|
||||
<Compile Update="Properties\Resources.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<UserProperties configs_4config_1json__JsonSchema="" />
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
303
DH.RBAC/Logic/BaseLogic.cs
Normal file
@ -0,0 +1,303 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using System.Data;
|
||||
|
||||
using DH.RBAC.Model.Base;
|
||||
using JinianNet.JNTemplate;
|
||||
using DH.RBAC.Utility.Other;
|
||||
using DH.RBAC.Utility.Extension;
|
||||
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Base
|
||||
{
|
||||
public class BaseLogic
|
||||
{
|
||||
private static string ConnectionString;
|
||||
private static SqlSugar.DbType DbType;
|
||||
private static string DbName;
|
||||
private static bool DebugMode;
|
||||
|
||||
public static bool InitDB(string dbType, string host, string dbName, string userName, string pasword, ref string message, bool debug = false)
|
||||
{
|
||||
DebugMode = debug;
|
||||
DbName = dbName;
|
||||
if (dbType.ToLower() == "SqlServer".ToLower())
|
||||
{
|
||||
DbType = SqlSugar.DbType.SqlServer;
|
||||
ConnectionString = $"Data Source={host};Initial Catalog={dbName};User ID={userName};Password={pasword};";
|
||||
return true;
|
||||
}
|
||||
else if (dbType.ToLower() == "MySql".ToLower())
|
||||
{
|
||||
DbType = SqlSugar.DbType.MySql;
|
||||
ConnectionString = $"server={host};Database={dbName};Uid={userName};Pwd={pasword};";
|
||||
return true;
|
||||
}
|
||||
else if (dbType.ToLower() == "Oracle".ToLower())
|
||||
{
|
||||
DbType = SqlSugar.DbType.Oracle;
|
||||
ConnectionString = $"Data Source={host}/{dbName};User ID={userName};Password={pasword};";
|
||||
return true;
|
||||
}
|
||||
else if (dbType.ToLower() == "PostgreSql".ToLower())
|
||||
{
|
||||
DbType = SqlSugar.DbType.PostgreSQL;
|
||||
ConnectionString = $"Server={host};Port=5432;Database={dbName};User Id={userName};Password={pasword};";
|
||||
return true;
|
||||
}
|
||||
else if (dbType.ToLower() == "Sqlite".ToLower())
|
||||
{
|
||||
DbType = SqlSugar.DbType.Sqlite;
|
||||
|
||||
var template = Engine.CreateTemplate(dbName);
|
||||
template.Set("BaseDirectory", MyEnvironment.RootPath(""));
|
||||
var result = template.Render();
|
||||
|
||||
ConnectionString = $"DataSource={result};";
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
message = "不支持的数据库";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static SqlSugarClient GetInstance()
|
||||
{
|
||||
#if !NETFRAMEWORK && !WINDOWS
|
||||
SqlSugarScope client = (SqlSugar.SqlSugarScope)Utility.MiddleWare.AutofacContainerModule.GetService<ISqlSugarClient>();
|
||||
if (client != null)
|
||||
return client.ScopedContext;
|
||||
#endif
|
||||
|
||||
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
|
||||
{
|
||||
ConnectionString = ConnectionString,
|
||||
DbType = DbType,
|
||||
IsAutoCloseConnection = true,
|
||||
ConfigureExternalServices = new ConfigureExternalServices()
|
||||
{
|
||||
SqlFuncServices = ExtMethods.GetExpMethods
|
||||
|
||||
}
|
||||
});
|
||||
//用来打印Sql方便你调式
|
||||
db.Aop.OnLogExecuting = (sql, pars) =>
|
||||
{
|
||||
if (DebugMode)
|
||||
{
|
||||
Console.WriteLine(sql + "\r\n" +
|
||||
db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
|
||||
Console.WriteLine();
|
||||
}
|
||||
};
|
||||
return db;
|
||||
}
|
||||
|
||||
public DataTable GetTableColumnInfo(string tableName)
|
||||
{
|
||||
if (DbType == SqlSugar.DbType.SqlServer)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
StringBuilder strSql = new StringBuilder();
|
||||
strSql.Append(" SELECT ").AppendLine();
|
||||
strSql.Append(" A.Name AS TableName, ").AppendLine();
|
||||
strSql.Append(" B.Name AS ColumnName, ").AppendLine();
|
||||
strSql.Append(" D.Name AS TypeName, ").AppendLine();
|
||||
strSql.Append(" B.Max_Length AS TypeLength, ").AppendLine();
|
||||
strSql.Append(" CASE WHEN ").AppendLine();
|
||||
strSql.Append(" ( ").AppendLine();
|
||||
strSql.Append(" SELECT ").AppendLine();
|
||||
strSql.Append(" F.Name ").AppendLine();
|
||||
strSql.Append(" FROM ").AppendLine();
|
||||
strSql.Append(" information_schema.key_column_usage E,sys.indexes F ").AppendLine();
|
||||
strSql.Append(" WHERE ").AppendLine();
|
||||
strSql.Append(" F.object_id=B.object_id ").AppendLine();
|
||||
strSql.Append(" AND F.name=E.constraint_name ").AppendLine();
|
||||
strSql.Append(" AND F.is_primary_key=1 ").AppendLine();
|
||||
strSql.Append(" AND E.table_name=A.Name ").AppendLine();
|
||||
strSql.Append(" AND E.column_name =B.Name ").AppendLine();
|
||||
strSql.Append(" ) IS NULL THEN 0 ELSE 1 END AS IsPrimaryKey, ").AppendLine();
|
||||
strSql.Append(" '' AS ClassName, ").AppendLine();
|
||||
strSql.Append(" '' AS PropertyName, ").AppendLine();
|
||||
strSql.Append(" '' AS CSType, ").AppendLine();
|
||||
strSql.Append(" C.VALUE AS Other ").AppendLine();
|
||||
strSql.Append(" FROM sys.tables A ").AppendLine();
|
||||
strSql.Append(" LEFT JOIN sys.columns B ").AppendLine();
|
||||
strSql.Append(" ON B.object_id = A.object_id ").AppendLine();
|
||||
strSql.Append(" LEFT JOIN sys.extended_properties C ").AppendLine();
|
||||
strSql.Append(" ON C.major_id = B.object_id AND C.minor_id = B.column_id ").AppendLine();
|
||||
strSql.Append(" LEFT JOIN sys.types D ON D.system_type_id=B.system_type_id ").AppendLine();
|
||||
strSql.Append(" WHERE A.Name = '" + tableName + "' ").AppendLine();
|
||||
DataTable dt = db.Ado.GetDataTable(strSql.ToString());
|
||||
return dt;
|
||||
}
|
||||
}
|
||||
else if (DbType == SqlSugar.DbType.MySql)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
StringBuilder strSql = new StringBuilder();
|
||||
strSql.Append(" SELECT ").AppendLine();
|
||||
strSql.Append(" '" + tableName + "' AS TableName, ").AppendLine();
|
||||
strSql.Append(" COLUMN_NAME AS ColumnName, ").AppendLine();
|
||||
strSql.Append(" DATA_TYPE AS TypeName, ").AppendLine();
|
||||
strSql.Append(" CHARACTER_MAXIMUM_LENGTH AS TypeLength, ").AppendLine();
|
||||
strSql.Append(" case when COLUMN_KEY = 'PRI' THEN 1 ELSE 0 END AS IsPrimaryKey, ").AppendLine();
|
||||
strSql.Append(" '' AS ClassName, ").AppendLine();
|
||||
strSql.Append(" '' PropertyName, ").AppendLine();
|
||||
strSql.Append(" '' CSType , ").AppendLine();
|
||||
strSql.Append(" COLUMN_COMMENT AS Other ").AppendLine();
|
||||
strSql.Append(" FROM ").AppendLine();
|
||||
strSql.Append(" INFORMATION_SCHEMA.COLUMNS ").AppendLine();
|
||||
strSql.Append(" WHERE ").AppendLine();
|
||||
strSql.Append(" table_schema ='" + DbName + "' AND table_name = '" + tableName + "' ").AppendLine();
|
||||
strSql.Append(" ORDER BY ORDINAL_POSITION ").AppendLine();
|
||||
DataTable dt = db.Ado.GetDataTable(strSql.ToString());
|
||||
return dt;
|
||||
}
|
||||
}
|
||||
else if (DbType == SqlSugar.DbType.Sqlite)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
|
||||
string sql = "SELECT * from sqlite_master where type = 'table' AND tbl_name='" + tableName + "'";
|
||||
DataTable dt = db.Ado.GetDataTable(sql);
|
||||
//创建个新的DataTable,把dt中的数据放进去
|
||||
DataTable newDt = new DataTable();
|
||||
newDt.Columns.Add("TableName");
|
||||
newDt.Columns.Add("ColumnName");
|
||||
newDt.Columns.Add("TypeName");
|
||||
newDt.Columns.Add("TypeLength");
|
||||
newDt.Columns.Add("IsPrimaryKey");
|
||||
newDt.Columns.Add("ClassName");
|
||||
newDt.Columns.Add("PropertyName");
|
||||
newDt.Columns.Add("CSType");
|
||||
newDt.Columns.Add("Other");
|
||||
if (dt == null || dt.Rows.Count == 0)
|
||||
return newDt;
|
||||
string sql1 = dt.Rows[0]["sql"].ToString().Replace("\"", "");
|
||||
|
||||
List<CodeGenerator> list = new List<CodeGenerator>();
|
||||
//第一个(
|
||||
int index1 = sql1.IndexOf("(");
|
||||
int index2 = sql1.LastIndexOf(")");
|
||||
string content = sql1.Substring(index1 + 1, index2 - index1 - 1);
|
||||
List<string> array = content.Split('\n').Select(it => it.Trim()).ToList();
|
||||
List<string> primaryKey = new List<string>();
|
||||
foreach (string item in array)
|
||||
{
|
||||
if (item.Trim() == "")
|
||||
continue;
|
||||
if (item.ToUpper().StartsWith("PRIMARY KEY"))
|
||||
{
|
||||
int index3 = item.IndexOf("(");
|
||||
int index4 = item.IndexOf(")");
|
||||
string[] keyArray = item.Substring(index3 + 1, index4 - index3 - 1).Split(',');
|
||||
foreach (string key in keyArray)
|
||||
primaryKey.Add(key.Trim());
|
||||
continue;
|
||||
}
|
||||
string[] itemText = item.Trim().Split(' ');
|
||||
CodeGenerator codeGenerator = new CodeGenerator();
|
||||
codeGenerator.TableName = tableName;
|
||||
codeGenerator.ColumnName = itemText[0];
|
||||
string type = itemText[1];
|
||||
int index5 = type.IndexOf("(");
|
||||
int index6 = type.IndexOf(")");
|
||||
codeGenerator.TypeName = index5 == -1 ? type : type.Substring(0, index5);
|
||||
codeGenerator.TypeLength = index5 == -1 ? "0" : type.Substring(index5 + 1, index6 - index5 - 1);
|
||||
codeGenerator.IsPrimaryKey = "0";
|
||||
codeGenerator.ClassName = "";
|
||||
codeGenerator.PropertyName = "";
|
||||
codeGenerator.CSType = "";
|
||||
codeGenerator.Other = "";
|
||||
list.Add(codeGenerator);
|
||||
}
|
||||
foreach (CodeGenerator code in list)
|
||||
{
|
||||
if (primaryKey.Contains(code.ColumnName))
|
||||
code.IsPrimaryKey = "1";
|
||||
}
|
||||
return list.ToJson().ToDataTable();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<string> GetTableList()
|
||||
{
|
||||
if (DbType == SqlSugar.DbType.SqlServer)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
StringBuilder strSql = new StringBuilder();
|
||||
strSql.Append(" SELECT ").AppendLine();
|
||||
strSql.Append(" A.Name ").AppendLine();
|
||||
strSql.Append(" FROM ").AppendLine();
|
||||
strSql.Append(" sysobjects A ").AppendLine();
|
||||
strSql.Append(" WHERE ").AppendLine();
|
||||
strSql.Append(" A.xtype = 'U' ").AppendLine();
|
||||
DataTable dt = db.Ado.GetDataTable(strSql.ToString());
|
||||
if (dt == null)
|
||||
return new List<string>();
|
||||
List<string> list = new List<string>();
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
list.Add(row["Name"].ToString());
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
else if (DbType == SqlSugar.DbType.MySql)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
StringBuilder strSql = new StringBuilder();
|
||||
strSql.Append(" SELECT ").AppendLine();
|
||||
strSql.Append(" TABLE_NAME AS Name ").AppendLine();
|
||||
strSql.Append(" FROM ").AppendLine();
|
||||
strSql.Append(" information_schema.TABLES ").AppendLine();
|
||||
strSql.Append(" WHERE ").AppendLine();
|
||||
strSql.Append(" TABLE_SCHEMA = '" + DbName + "' ").AppendLine();
|
||||
DataTable dt = db.Ado.GetDataTable(strSql.ToString());
|
||||
if (dt == null)
|
||||
return new List<string>();
|
||||
List<string> list = new List<string>();
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
list.Add(row["Name"].ToString());
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
else if (DbType == SqlSugar.DbType.Sqlite)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
string sql = "SELECT name from sqlite_master where type='table'";
|
||||
DataTable dt = db.Ado.GetDataTable(sql);
|
||||
if (dt == null)
|
||||
return new List<string>();
|
||||
List<string> list = new List<string>();
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
list.Add(row["name"].ToString());
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
return new List<string>();
|
||||
}
|
||||
}
|
||||
}
|
80
DH.RBAC/Logic/Logger.cs
Normal file
@ -0,0 +1,80 @@
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using DH.RBAC.Utility.Other;
|
||||
|
||||
namespace DH.RBAC.Logic
|
||||
{
|
||||
/// <summary>
|
||||
/// 日志
|
||||
/// </summary>
|
||||
public class Logger
|
||||
{
|
||||
private static object _lock = new object();
|
||||
private static void Log(string type, string message)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
SimpleClient<SysLog> client = new SimpleClient<SysLog>(BaseLogic.GetInstance());
|
||||
|
||||
|
||||
|
||||
SysLog log = new SysLog();
|
||||
log.Id = UUID.SnowId;
|
||||
log.Type = type;
|
||||
#if !NETFRAMEWORK
|
||||
log.ThreadId = Thread.GetCurrentProcessorId();
|
||||
#else
|
||||
log.ThreadId = Thread.CurrentThread.ManagedThreadId;
|
||||
#endif
|
||||
log.Message = message;
|
||||
log.EnableFlag = "Y";
|
||||
log.DeleteFlag = "N";
|
||||
log.CreateTime = DateTime.Now;
|
||||
log.CreateUserId = "1";
|
||||
log.ModifyUserId = "1";
|
||||
log.ModifyTime = log.CreateTime;
|
||||
client.Insert(log);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 操作日志写入
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
public static void OperateInfo(string message)
|
||||
{
|
||||
Log("Operate", message);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 运行日志写入
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
public static void RunningInfo(string message)
|
||||
{
|
||||
Log("Running", message);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 错误日志写入
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
public static void ErrorInfo(string message)
|
||||
{
|
||||
Log("Error", message);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
167
DH.RBAC/Logic/Sys/SysItemLogic.cs
Normal file
@ -0,0 +1,167 @@
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using SqlSugar;
|
||||
using DH.RBAC.Utility.Other;
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
public class SysItemLogic : BaseLogic
|
||||
{
|
||||
|
||||
public List<SysItem> GetList()
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysItem>().Where(it => it.DeleteFlag == "N")
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.OrderBy(it => it.SortCode)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public List<SysItem> GetAppList(int pageIndex, int pageSize, ref int totalCount)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysItem>().Where(it => it.ParentId != "0" && it.DeleteFlag == "N")
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.OrderBy(it => it.SortCode)
|
||||
.ToPageList(pageIndex, pageSize, ref totalCount);
|
||||
}
|
||||
}
|
||||
public List<SysItem> GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
ISugarQueryable<SysItem> queryable = db.Queryable<SysItem>().Where(it => it.DeleteFlag == "N");
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(keyWord))
|
||||
{
|
||||
queryable = queryable.Where(it => (it.Name.Contains(keyWord) || it.EnCode.Contains(keyWord)));
|
||||
}
|
||||
return queryable
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.OrderBy(it => it.SortCode)
|
||||
.ToPageList(pageIndex, pageSize, ref totalCount);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int GetChildCount(string parentId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysItem>()
|
||||
.Where(it => it.ParentId == parentId && it.DeleteFlag == "N")
|
||||
.ToList().Count();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public SysItem Get(string primaryKey)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysItem>().Where(it => it.DeleteFlag == "N")
|
||||
.Where(it => it.Id == primaryKey)
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.First();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int AppInsert(SysItem model, string operateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
SysItem s = db.Queryable<SysItem>().Where(it => it.ParentId == "0").First();
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.Layer = s.Layer + 1;
|
||||
model.ParentId = s.Id;
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = operateUser;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUser.Id;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysItem>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int Insert(SysItem model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.Layer = Get(model.ParentId).Layer += 1;
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = account;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysItem>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int Delete(string primaryKey)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
SysItem item = db.Queryable<SysItem>().Where(it => it.Id == primaryKey).First();
|
||||
if (item == null)
|
||||
return 0;
|
||||
item.DeleteFlag = "Y";
|
||||
return db.Updateable<SysItem>(item).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
public int Update(SysItem model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Layer = Get(model.ParentId).Layer += 1;
|
||||
model.ModifyUserId = account;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysItem>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.ParentId,
|
||||
it.Layer,
|
||||
it.EnCode,
|
||||
it.Name,
|
||||
it.SortCode,
|
||||
it.EnableFlag,
|
||||
it.Remark,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int AppUpdate(SysItem model, string operateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyUserId = operateUser;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysItem>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.EnCode,
|
||||
it.Name,
|
||||
it.SortCode,
|
||||
it.Remark,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
182
DH.RBAC/Logic/Sys/SysItemsDetailLogic.cs
Normal file
@ -0,0 +1,182 @@
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using DH.RBAC.Utility.Other;
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
public class SysItemsDetailLogic : BaseLogic
|
||||
{
|
||||
public List<SysItemDetail> GetItemDetailList(string strItemCode)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
|
||||
SysItem item = db.Queryable<SysItem>().Where(it => it.EnCode == strItemCode && it.DeleteFlag == "N").First();
|
||||
if (null == item)
|
||||
return null;
|
||||
return db.Queryable<SysItemDetail>().Where(it => it.ItemId == item.Id && it.DeleteFlag == "N")
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.OrderBy(it => it.SortCode)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public List<SysItemDetail> GetList(int pageIndex, int pageSize, string itemId, string keyWord, ref int totalCount)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
ISugarQueryable<SysItemDetail> queryable = db.Queryable<SysItemDetail>().Where(it => it.DeleteFlag == "N" && it.ItemId == itemId);
|
||||
if (!keyWord.IsNullOrEmpty())
|
||||
{
|
||||
queryable = queryable.Where(it => (it.Name.Contains(keyWord) || it.EnCode.Contains(keyWord)));
|
||||
}
|
||||
return queryable
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.OrderBy(it => it.SortCode)
|
||||
.ToPageList(pageIndex, pageSize, ref totalCount);
|
||||
}
|
||||
}
|
||||
|
||||
public List<SysItemDetail> GetListByItemId(string itemId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysItemDetail>()
|
||||
.Where(it => it.ItemId == itemId && it.DeleteFlag == "N")
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public void InsertItemDetail(string itemId, List<SysItemDetail> list)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
try
|
||||
{
|
||||
db.BeginTran();
|
||||
List<SysItemDetail> list2 = db.Queryable<SysItemDetail>().Where(it => it.ItemId == itemId && it.DeleteFlag == "N").ToList();
|
||||
list2.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
db.Updateable<SysItemDetail>(list2).ExecuteCommand();
|
||||
db.Insertable<SysItemDetail>(list).ExecuteCommand();
|
||||
db.CommitTran();
|
||||
}
|
||||
catch
|
||||
{
|
||||
db.RollbackTran();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public SysItemDetail Get(string primaryKey)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysItemDetail>()
|
||||
.Where(it => it.DeleteFlag == "N" && it.Id == primaryKey)
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.First();
|
||||
}
|
||||
}
|
||||
|
||||
public int Insert(SysItemDetail model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.IsDefault = model.IsDefault == null ? "0" : "1";
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = account;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysItemDetail>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int AppInsert(SysItemDetail model, string operateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.IsDefault = "0";
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = operateUser;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysItemDetail>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int AppUpdate(SysItemDetail model, string operateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyUserId = operateUser;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysItemDetail>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.EnCode,
|
||||
it.Name,
|
||||
it.SortCode,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int Delete(string itemId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
SysItemDetail itemDetail = db.Queryable<SysItemDetail>().Where(it => it.Id == itemId).First();
|
||||
if (itemDetail == null)
|
||||
return 0;
|
||||
itemDetail.DeleteFlag = "Y";
|
||||
return db.Updateable<SysItemDetail>(itemDetail).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int Update(SysItemDetail model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.IsDefault = model.IsDefault == null ? "0" : "1";
|
||||
model.ModifyUserId = account;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysItemDetail>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.ItemId,
|
||||
it.EnCode,
|
||||
it.Name,
|
||||
it.IsDefault,
|
||||
it.SortCode,
|
||||
it.EnableFlag,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public SysItemDetail GetSoftwareName()
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysItemDetail>().Where(it => it.EnCode == "SoftwareName").First();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
123
DH.RBAC/Logic/Sys/SysLogLogic.cs
Normal file
@ -0,0 +1,123 @@
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using DH.RBAC.Utility.Other;
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
/// <summary>
|
||||
/// 系统日志表数据访问
|
||||
/// </summary>
|
||||
public class SysLogLogic : BaseLogic
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 根据日志类型获得日志
|
||||
/// </summary>
|
||||
/// <param name="pageIndex"></param>
|
||||
/// <param name="pageSize"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="index"></param>
|
||||
/// <param name="keyWord"></param>
|
||||
/// <param name="totalCount"></param>
|
||||
/// <returns></returns>
|
||||
public List<SysLog> GetList(int pageIndex, int pageSize, string type, string index, string keyWord, ref int totalCount)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
ISugarQueryable<SysLog> query = db.Queryable<SysLog>().Where(it => it.Type == type);
|
||||
if (!keyWord.IsNullOrEmpty())
|
||||
{
|
||||
query = query.Where(it => it.Message.Contains(keyWord));
|
||||
}
|
||||
//查询当日
|
||||
if (index == "1")
|
||||
{
|
||||
DateTime today = DateTime.Today;
|
||||
DateTime startTime = today;
|
||||
DateTime endTime = today.AddDays(1);
|
||||
query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
|
||||
}
|
||||
//近7天
|
||||
else if (index == "2")
|
||||
{
|
||||
DateTime today = DateTime.Today;
|
||||
DateTime startTime = today.AddDays(-6);
|
||||
DateTime endTime = today.AddDays(1);
|
||||
query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
|
||||
}
|
||||
//近1月
|
||||
else if (index == "3")
|
||||
{
|
||||
DateTime today = DateTime.Today;
|
||||
DateTime startTime = today.AddDays(-29);
|
||||
DateTime endTime = today.AddDays(1);
|
||||
query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
|
||||
}
|
||||
//近3月
|
||||
else if (index == "4")
|
||||
{
|
||||
DateTime today = DateTime.Today;
|
||||
DateTime startTime = today.AddDays(-91);
|
||||
DateTime endTime = today.AddDays(1);
|
||||
query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
|
||||
}
|
||||
return query.OrderBy(it => it.Id, OrderByType.Desc).ToPageList(pageIndex, pageSize, ref totalCount);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 删除日志
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="index"></param>
|
||||
/// <returns></returns>
|
||||
public int Delete(string type, string index)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
IDeleteable<SysLog> query = db.Deleteable<SysLog>().Where(it => it.Type == type);
|
||||
//保留一个月
|
||||
if (index == "1")
|
||||
{
|
||||
DateTime today = DateTime.Today;
|
||||
DateTime startTime = today;
|
||||
DateTime endTime = today.AddDays(-29);
|
||||
query = query.Where(it => it.CreateTime < endTime);
|
||||
return query.ExecuteCommand();
|
||||
}
|
||||
//保留7天
|
||||
else if (index == "2")
|
||||
{
|
||||
DateTime today = DateTime.Today;
|
||||
DateTime startTime = today.AddDays(-6);
|
||||
query = query.Where(it => it.CreateTime < startTime);
|
||||
return query.ExecuteCommand();
|
||||
}
|
||||
//保留近3个月
|
||||
else if (index == "3")
|
||||
{
|
||||
DateTime today = DateTime.Today;
|
||||
DateTime startTime = today.AddDays(-92);
|
||||
query = query.Where(it => it.CreateTime < startTime);
|
||||
return query.ExecuteCommand();
|
||||
}
|
||||
//全部
|
||||
else if (index == "4")
|
||||
{
|
||||
return query.ExecuteCommand();
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
157
DH.RBAC/Logic/Sys/SysOrganizeLogic.cs
Normal file
@ -0,0 +1,157 @@
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using DH.RBAC.Utility.Other;
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
public class SysOrganizeLogic : BaseLogic
|
||||
{
|
||||
public List<SysOrganize> GetList()
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysOrganize>().Where(it => it.DeleteFlag == "N").ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public List<SysOrganize> GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
ISugarQueryable<SysOrganize> queryable = db.Queryable<SysOrganize>().Where(it => it.ParentId != "0" && it.DeleteFlag == "N");
|
||||
|
||||
if (!keyWord.IsNullOrEmpty())
|
||||
{
|
||||
queryable = queryable.Where(it => (it.FullName.Contains(keyWord) || it.EnCode.Contains(keyWord)));
|
||||
}
|
||||
return queryable
|
||||
.OrderBy(it => it.SortCode)
|
||||
.ToPageList(pageIndex, pageSize, ref totalCount);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int GetChildCount(string parentId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysOrganize>().Where(it => it.ParentId == parentId && it.DeleteFlag == "N").Count();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int AppUpdate(SysOrganize model, string opreaterUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyUserId = opreaterUser;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysOrganize>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.EnCode,
|
||||
it.FullName,
|
||||
it.Type,
|
||||
it.ManagerId,
|
||||
it.TelePhone,
|
||||
it.WeChat,
|
||||
it.Fax,
|
||||
it.Email,
|
||||
it.Address,
|
||||
it.SortCode,
|
||||
it.Remark,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int AppInsert(SysOrganize model, string opreaterUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
SysOrganize s = db.Queryable<SysOrganize>().Where(it => it.ParentId == "0").First();
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.Layer = s.Layer + 1;
|
||||
model.ParentId = s.Id;
|
||||
|
||||
model.EnableFlag = "Y";
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = opreaterUser;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysOrganize>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
public int Insert(SysOrganize model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.Layer = Get(model.ParentId).Layer += 1;
|
||||
model.EnableFlag = "Y";
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = account;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysOrganize>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int Delete(string primaryKey)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
SysOrganize organize = db.Queryable<SysOrganize>().Where(it => it.Id == primaryKey).First();
|
||||
if (organize == null)
|
||||
return 0;
|
||||
organize.DeleteFlag = "Y";
|
||||
return db.Updateable<SysOrganize>(organize).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
public SysOrganize Get(string primaryKey)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysOrganize>().Where(it => it.Id == primaryKey).Includes(it => it.CreateUser).Includes(it => it.ModifyUser).First();
|
||||
}
|
||||
}
|
||||
public int Update(SysOrganize model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyUserId = account;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysOrganize>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.ParentId,
|
||||
it.Layer,
|
||||
it.EnCode,
|
||||
it.FullName,
|
||||
it.Type,
|
||||
it.ManagerId,
|
||||
it.TelePhone,
|
||||
it.WeChat,
|
||||
it.Fax,
|
||||
it.Email,
|
||||
it.Address,
|
||||
it.SortCode,
|
||||
it.EnableFlag,
|
||||
it.Remark,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
238
DH.RBAC/Logic/Sys/SysPermissionLogic.cs
Normal file
@ -0,0 +1,238 @@
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using DH.RBAC.Utility.Other;
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
public class SysPermissionLogic : BaseLogic
|
||||
{
|
||||
public bool ActionValidate(string userId, string action)
|
||||
{
|
||||
List<SysPermission> authorizeModules;
|
||||
if (new SysUserLogic().ContainsUser("admin", userId))
|
||||
{
|
||||
authorizeModules = GetList();
|
||||
}
|
||||
else
|
||||
{
|
||||
authorizeModules = GetList(userId);
|
||||
}
|
||||
foreach (var item in authorizeModules)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(item.Url))
|
||||
{
|
||||
string[] url = item.Url.Split('?');
|
||||
if (url[0].ToLower() == action.ToLower())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public List<SysPermission> GetList(string userId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
List<string> permissionIdList = db.Queryable<SysUserRoleRelation, SysRoleAuthorize, SysPermission>((A, B, C) => new object[] {
|
||||
JoinType.Left,A.RoleId == B.RoleId,
|
||||
JoinType.Left,C.Id == B.ModuleId,
|
||||
})
|
||||
.Where((A, B, C) => A.UserId == userId && C.EnableFlag == "Y" && B.DeleteFlag == "N")
|
||||
.Select((A, B, C) => C.Id).ToList();
|
||||
return db.Queryable<SysPermission>().Where(it => permissionIdList.Contains(it.Id)).OrderBy(it => it.SortCode).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<SysPermission> GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
if (keyWord.IsNullOrEmpty())
|
||||
{
|
||||
return db.Queryable<SysPermission>().Where(it => it.DeleteFlag == "N").OrderBy(it => it.SortCode).ToPageList(pageIndex, pageSize, ref totalCount);
|
||||
}
|
||||
return db.Queryable<SysPermission>().Where(it => it.DeleteFlag == "N" && (it.Name.Contains(keyWord) || it.EnCode.Contains(keyWord))).OrderBy(it => it.SortCode).ToPageList(pageIndex, pageSize, ref totalCount);
|
||||
}
|
||||
}
|
||||
|
||||
public int Delete(params string[] primaryKeys)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
try
|
||||
{
|
||||
db.BeginTran();
|
||||
//删除权限与角色的对应关系。
|
||||
List<SysPermission> list = db.Queryable<SysPermission>().Where(it => primaryKeys.Contains(it.Id) && it.DeleteFlag == "N").ToList();
|
||||
List<string> ids = list.Select(it => it.Id).ToList();
|
||||
list.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
db.Updateable<SysPermission>(list).ExecuteCommand();
|
||||
List<SysRoleAuthorize> list2 = db.Queryable<SysRoleAuthorize>().Where(it => ids.Contains(it.ModuleId) && it.DeleteFlag == "N").ToList();
|
||||
list2.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
db.Updateable<SysRoleAuthorize>(list2).ExecuteCommand();
|
||||
db.CommitTran();
|
||||
return 1;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public int GetMaxChildMenuOrderCode(string parentId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
//得到当前节点
|
||||
SysPermission permission = db.Queryable<SysPermission>().Where(it => it.Id == parentId && it.DeleteFlag == "N").First();
|
||||
if (permission == null)
|
||||
return 0;
|
||||
//得到子的
|
||||
SysPermission child = db.Queryable<SysPermission>().Where(it => it.ParentId == parentId && it.DeleteFlag == "N").OrderBy(it => it.SortCode, OrderByType.Desc).First();
|
||||
if (child == null)
|
||||
return permission.SortCode.Value + 100;
|
||||
else
|
||||
return child.SortCode.Value + 100;
|
||||
}
|
||||
}
|
||||
public int GetChildCount(string parentId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysPermission>().Where(it => it.ParentId == parentId && it.DeleteFlag == "N").ToList().Count();
|
||||
}
|
||||
}
|
||||
|
||||
public List<SysPermission> GetList()
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysPermission>().Where(it => it.DeleteFlag == "N").OrderBy(it => it.SortCode).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public SysPermission Get(string primaryKey)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysPermission>().Where(it => it.Id == primaryKey).Includes(it => it.CreateUser).Includes(it => it.ModifyUser).First();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int Insert(SysPermission model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.Layer = model.Type == 2 ? 0 : model.Type == 0 ? 1 : 2;
|
||||
model.IsEdit = model.IsEdit == null ? "0" : "1";
|
||||
model.IsPublic = model.IsPublic == null ? "0" : "1";
|
||||
|
||||
model.DeleteFlag = "N";
|
||||
model.EnableFlag = "Y";
|
||||
model.CreateUserId = account;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysPermission>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
public int AppInsert(SysPermission model, string operateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.Layer = model.Type == 2 ? 0 : model.Type == 0 ? 1 : 2;
|
||||
model.IsEdit = "1";
|
||||
model.IsPublic = "0";
|
||||
|
||||
model.DeleteFlag = "N";
|
||||
model.EnableFlag = "Y";
|
||||
model.CreateUserId = operateUser;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysPermission>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int AppUpdate(SysPermission model, string operateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Layer = model.Type == 2 ? 0 : model.Type == 0 ? 1 : 2;
|
||||
model.ModifyUserId = operateUser;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysPermission>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.ParentId,
|
||||
it.Layer,
|
||||
it.EnCode,
|
||||
it.Name,
|
||||
it.JsEvent,
|
||||
it.Icon,
|
||||
it.SymbolIndex,
|
||||
it.Url,
|
||||
it.Remark,
|
||||
it.Type,
|
||||
it.SortCode,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime,
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int Update(SysPermission model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Layer = model.Type == 2 ? 0 : model.Type == 0 ? 1 : 2;
|
||||
model.IsEdit = model.IsEdit == null ? "0" : "1";
|
||||
model.IsPublic = model.IsPublic == null ? "0" : "1";
|
||||
model.ModifyUserId = account;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysPermission>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.ParentId,
|
||||
it.Layer,
|
||||
it.EnCode,
|
||||
it.Name,
|
||||
it.JsEvent,
|
||||
it.Icon,
|
||||
it.SymbolIndex,
|
||||
it.Url,
|
||||
it.Remark,
|
||||
it.Type,
|
||||
it.SortCode,
|
||||
it.IsPublic,
|
||||
it.EnableFlag,
|
||||
it.IsEdit,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime,
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
public int InsertList(List<SysPermission> permissionList)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Insertable<SysPermission>(permissionList).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
170
DH.RBAC/Logic/Sys/SysRoleAuthorizeLogic.cs
Normal file
@ -0,0 +1,170 @@
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using DH.RBAC.Utility.Other;
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
public class SysRoleAuthorizeLogic : BaseLogic
|
||||
{
|
||||
/// <summary>
|
||||
/// 获得角色权限关系
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public List<SysRoleAuthorize> GetList()
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysRoleAuthorize>().ToList();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据角色ID获得角色权限关系
|
||||
/// </summary>
|
||||
/// <param name="roleId"></param>
|
||||
/// <returns></returns>
|
||||
public List<SysRoleAuthorize> GetList(string roleId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysRoleAuthorize>().Where(it => it.RoleId == roleId && it.DeleteFlag == "N").ToList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 给某个角色授权
|
||||
/// </summary>
|
||||
/// <param name="roleId"></param>
|
||||
/// <param name="perIds"></param>
|
||||
public void AppAuthorize(string operate, string roleId, params string[] perIds)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
try
|
||||
{
|
||||
db.BeginTran();
|
||||
//获得所有权限
|
||||
List<SysPermission> permissionList = db.Queryable<SysPermission>().Where(it => it.DeleteFlag == "N").ToList();
|
||||
List<string> perList = new List<string>();
|
||||
foreach (string perId in perIds)
|
||||
{
|
||||
string id = perId;
|
||||
while (!id.IsNullOrEmpty() && id != "0")
|
||||
{
|
||||
if (!perList.Contains(id))
|
||||
{
|
||||
perList.Add(id);
|
||||
}
|
||||
id = permissionList.Where(it => it.Id == id).Select(it => it.ParentId).FirstOrDefault();
|
||||
}
|
||||
}
|
||||
//删除旧的
|
||||
List<SysRoleAuthorize> list2 = db.Queryable<SysRoleAuthorize>().Where(it => it.RoleId == roleId && it.DeleteFlag == "N").ToList();
|
||||
list2.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
db.Updateable<SysRoleAuthorize>(list2).ExecuteCommand();
|
||||
|
||||
|
||||
List<SysRoleAuthorize> newRoleAuthorizeList = perList.Select(it => new SysRoleAuthorize
|
||||
{
|
||||
Id = UUID.StrSnowId,
|
||||
RoleId = roleId,
|
||||
ModuleId = it,
|
||||
DeleteFlag = "N",
|
||||
EnableFlag = "Y",
|
||||
CreateUserId = operate,
|
||||
CreateTime = DateTime.Now,
|
||||
ModifyUserId = operate,
|
||||
ModifyTime = DateTime.Now
|
||||
|
||||
}).ToList();
|
||||
db.Insertable<SysRoleAuthorize>(newRoleAuthorizeList).ExecuteCommand();
|
||||
db.CommitTran();
|
||||
}
|
||||
catch
|
||||
{
|
||||
db.RollbackTran();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 给某个角色授权
|
||||
/// </summary>
|
||||
/// <param name="roleId"></param>
|
||||
/// <param name="perIds"></param>
|
||||
public void Authorize(string roleId, string account, params string[] perIds)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
try
|
||||
{
|
||||
db.BeginTran();
|
||||
//获得所有权限
|
||||
List<SysPermission> permissionList = db.Queryable<SysPermission>().ToList();
|
||||
List<string> perList = new List<string>();
|
||||
foreach (string perId in perIds)
|
||||
{
|
||||
string id = perId;
|
||||
while (!id.IsNullOrEmpty() && id != "0")
|
||||
{
|
||||
if (!perList.Contains(id))
|
||||
{
|
||||
perList.Add(id);
|
||||
}
|
||||
id = permissionList.Where(it => it.Id == id).Select(it => it.ParentId).FirstOrDefault();
|
||||
}
|
||||
}
|
||||
//删除旧的
|
||||
List<SysRoleAuthorize> list2 = db.Queryable<SysRoleAuthorize>().Where(it => it.RoleId == roleId && it.DeleteFlag == "N").ToList();
|
||||
list2.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
db.Updateable<SysRoleAuthorize>(list2).ExecuteCommand();
|
||||
|
||||
|
||||
List<SysRoleAuthorize> newRoleAuthorizeList = perList.Select(it => new SysRoleAuthorize
|
||||
{
|
||||
Id = UUID.StrSnowId,
|
||||
RoleId = roleId,
|
||||
ModuleId = it,
|
||||
DeleteFlag = "N",
|
||||
EnableFlag = "Y",
|
||||
CreateUserId = account,
|
||||
CreateTime = DateTime.Now,
|
||||
ModifyUserId = account,
|
||||
ModifyTime = DateTime.Now
|
||||
}).ToList();
|
||||
db.Insertable<SysRoleAuthorize>(newRoleAuthorizeList).ExecuteCommand();
|
||||
db.CommitTran();
|
||||
}
|
||||
catch
|
||||
{
|
||||
db.RollbackTran();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从角色权限关系中删除某个模块
|
||||
/// </summary>
|
||||
/// <param name="moduleIds"></param>
|
||||
/// <returns></returns>
|
||||
public int Delete(params string[] moduleIds)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
List<SysRoleAuthorize> list = db.Queryable<SysRoleAuthorize>().Where(it => moduleIds.Contains(it.ModuleId)).ToList();
|
||||
list.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
return db.Updateable<SysRoleAuthorize>(list).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
176
DH.RBAC/Logic/Sys/SysRoleLogic.cs
Normal file
@ -0,0 +1,176 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using SqlSugar;
|
||||
using DH.RBAC.Utility.Other;
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
public class SysRoleLogic : BaseLogic
|
||||
{
|
||||
/// <summary>
|
||||
/// 得到角色列表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public List<SysRole> GetList()
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysRole>().Where(it => it.DeleteFlag == "N")
|
||||
.Includes(it => it.Organize)
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得角色列表分页
|
||||
/// </summary>
|
||||
/// <param name="pageIndex"></param>
|
||||
/// <param name="pageSize"></param>
|
||||
/// <param name="keyWord"></param>
|
||||
/// <param name="totalCount"></param>
|
||||
/// <returns></returns>
|
||||
public List<SysRole> GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
|
||||
ISugarQueryable<SysRole> queryable = db.Queryable<SysRole>().Where(it => it.DeleteFlag == "N");
|
||||
|
||||
if (!keyWord.IsNullOrEmpty())
|
||||
{
|
||||
queryable = queryable.Where(it => (it.Name.Contains(keyWord) || it.EnCode.Contains(keyWord)));
|
||||
}
|
||||
|
||||
return queryable.Includes(it => it.Organize)
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.OrderBy(it => it.SortCode)
|
||||
.ToPageList(pageIndex, pageSize, ref totalCount);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增角色
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int Insert(SysRole model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.AllowEdit = model.AllowEdit == null ? "0" : "1";
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = account;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysRole>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int AppInsert(SysRole model, string operateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.AllowEdit = "1";
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = operateUser;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
return db.Insertable<SysRole>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int AppUpdate(SysRole model, string operateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.AllowEdit = model.AllowEdit == null ? "0" : "1";
|
||||
model.ModifyUserId = operateUser;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysRole>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.OrganizeId,
|
||||
it.EnCode,
|
||||
it.Type,
|
||||
it.Name,
|
||||
it.Remark,
|
||||
it.SortCode,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 更新角色信息
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int Update(SysRole model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.AllowEdit = model.AllowEdit == null ? "0" : "1";
|
||||
model.ModifyUserId = account;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysRole>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.OrganizeId,
|
||||
it.EnCode,
|
||||
it.Type,
|
||||
it.Name,
|
||||
it.AllowEdit,
|
||||
it.EnableFlag,
|
||||
it.Remark,
|
||||
it.SortCode,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据主键得到角色信息
|
||||
/// </summary>
|
||||
/// <param name="primaryKey"></param>
|
||||
/// <returns></returns>
|
||||
public SysRole Get(string primaryKey)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysRole>().Where(it => it.Id == primaryKey)
|
||||
.Includes(it => it.Organize)
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.First();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 删除角色信息
|
||||
/// </summary>
|
||||
/// <param name="primaryKeys"></param>
|
||||
/// <returns></returns>
|
||||
public int Delete(List<string> primaryKeys)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
List<SysRole> list = db.Queryable<SysRole>().Where(it => primaryKeys.Contains(it.Id)).ToList();
|
||||
list.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
return db.Updateable<SysRole>(list).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
175
DH.RBAC/Logic/Sys/SysUserLogOnLogic.cs
Normal file
@ -0,0 +1,175 @@
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using DH.RBAC.Utility.Other;
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
public class SysUserLogOnLogic : BaseLogic
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 根据用户Id得到登录账号信息
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public SysUserLogOn GetByAccount(string userId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysUserLogOn>().Where(it => it.UserId == userId).First();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新用户登录账号信息
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int UpdateLogin(SysUserLogOn model)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.IsOnLine = "1";
|
||||
model.LastVisitTime = DateTime.Now;
|
||||
model.PrevVisitTime = model.LastVisitTime;
|
||||
model.LoginCount += 1;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
model.ModifyUserId = model.UserId;
|
||||
return db.Updateable<SysUserLogOn>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.IsOnLine,
|
||||
it.PrevVisitTime,
|
||||
it.LastVisitTime,
|
||||
it.LoginCount,
|
||||
it.ModifyTime,
|
||||
it.ModifyUserId
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改密码
|
||||
/// </summary>
|
||||
/// <param name="userLoginEntity"></param>
|
||||
/// <returns></returns>
|
||||
public int ModifyPwd(SysUserLogOn userLoginEntity)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
userLoginEntity.ChangePwdTime = DateTime.Now;
|
||||
userLoginEntity.ModifyUserId = userLoginEntity.UserId;
|
||||
userLoginEntity.ModifyTime = DateTime.Now;
|
||||
|
||||
return db.Updateable<SysUserLogOn>(userLoginEntity).UpdateColumns(it => new
|
||||
{
|
||||
it.Password,
|
||||
it.ChangePwdTime,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除用户登录信息
|
||||
/// </summary>
|
||||
/// <param name="userIds"></param>
|
||||
/// <returns></returns>
|
||||
public int Delete(List<string> userIds)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
List<SysUserLogOn> list = db.Queryable<SysUserLogOn>().Where(it => userIds.Contains(it.UserId)).ToList();
|
||||
list.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
return db.Updateable<SysUserLogOn>(list).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增用户登录账号
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int Insert(SysUserLogOn model)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.SecretKey = model.Id.DESEncrypt().Substring(0, 8);
|
||||
model.Password = model.Password.MD5Encrypt().DESEncrypt(model.SecretKey).MD5Encrypt();
|
||||
model.LoginCount = 0;
|
||||
model.IsOnLine = "0";
|
||||
model.EnableFlag = "Y";
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
model.ModifyUserId = model.UserId;
|
||||
model.CreateUserId = model.UserId;
|
||||
return db.Insertable<SysUserLogOn>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新用户登录账号信息
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int UpdateInfo(SysUserLogOn model)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyTime = DateTime.Now;
|
||||
model.ModifyUserId = model.UserId;
|
||||
|
||||
return db.Updateable<SysUserLogOn>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.AllowMultiUserOnline,
|
||||
it.Question,
|
||||
it.AnswerQuestion,
|
||||
it.CheckIPAddress,
|
||||
it.Language,
|
||||
it.Theme,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int UpdateTheme(SysUserLogOn model)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyTime = DateTime.Now;
|
||||
model.ModifyUserId = model.UserId;
|
||||
return db.Updateable<SysUserLogOn>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.Theme,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int UpdatePassword(SysUserLogOn model)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyTime = DateTime.Now;
|
||||
model.ModifyUserId = model.UserId;
|
||||
return db.Updateable<SysUserLogOn>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.Password,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
509
DH.RBAC/Logic/Sys/SysUserLogic.cs
Normal file
@ -0,0 +1,509 @@
|
||||
|
||||
using DH.RBAC.Logic.Base;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Security.Principal;
|
||||
using DH.RBAC.Model.Sys;
|
||||
|
||||
using DH.RBAC.Utility.Other;
|
||||
using SqlSugar;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
public class SysUserLogic : BaseLogic
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据账号得到用户信息
|
||||
/// </summary>
|
||||
/// <param name="account"></param>
|
||||
/// <returns></returns>
|
||||
public SysUser GetByUserName(string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysUser>().Where(it => it.Account == account && it.DeleteFlag == "N")
|
||||
.Includes(it => it.Organize)
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser)
|
||||
.First();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户基础信息
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int UpdateBasicInfo(SysUser model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyUserId = account;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysUser>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.RealName,
|
||||
it.NickName,
|
||||
it.Gender,
|
||||
it.Birthday,
|
||||
it.MobilePhone,
|
||||
it.Avatar,
|
||||
it.Email,
|
||||
it.Signature,
|
||||
it.Address,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int AppUpdateBasicInfo(SysUser model)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyUserId = model.Id;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
return db.Updateable<SysUser>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.RealName,
|
||||
it.NickName,
|
||||
it.Gender,
|
||||
it.Birthday,
|
||||
it.MobilePhone,
|
||||
it.Avatar,
|
||||
it.Email,
|
||||
it.Signature,
|
||||
it.Address,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
public int Insert(SysUser model, string password, string account, string[] roleIds)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
try
|
||||
{
|
||||
db.BeginTran();
|
||||
////新增用户基本信息。
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.EnableFlag = "Y";
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = account;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
model.Avatar = "/Content/framework/images/avatar.png";
|
||||
int row = db.Insertable<SysUser>(model).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
|
||||
//新增新的角色
|
||||
List<SysUserRoleRelation> list = new List<SysUserRoleRelation>();
|
||||
foreach (string roleId in roleIds)
|
||||
{
|
||||
SysUserRoleRelation roleRelation = new SysUserRoleRelation
|
||||
{
|
||||
Id = UUID.StrSnowId,
|
||||
UserId = model.Id,
|
||||
RoleId = roleId,
|
||||
EnableFlag = "Y",
|
||||
DeleteFlag = "N",
|
||||
CreateUserId = account,
|
||||
CreateTime = DateTime.Now,
|
||||
ModifyUserId = account,
|
||||
ModifyTime = DateTime.Now
|
||||
};
|
||||
list.Add(roleRelation);
|
||||
}
|
||||
row = db.Insertable<SysUserRoleRelation>(list).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
//新增用户登陆信息。
|
||||
SysUserLogOn userLogOnEntity = new SysUserLogOn();
|
||||
userLogOnEntity.Id = UUID.StrSnowId;
|
||||
userLogOnEntity.UserId = model.Id;
|
||||
userLogOnEntity.SecretKey = userLogOnEntity.Id.DESEncrypt().Substring(0, 8);
|
||||
userLogOnEntity.Password = password.MD5Encrypt().DESEncrypt(userLogOnEntity.SecretKey).MD5Encrypt();
|
||||
userLogOnEntity.LoginCount = 0;
|
||||
userLogOnEntity.IsOnLine = "0";
|
||||
userLogOnEntity.EnableFlag = "Y";
|
||||
userLogOnEntity.DeleteFlag = "N";
|
||||
userLogOnEntity.CreateUserId = account;
|
||||
userLogOnEntity.CreateTime = DateTime.Now;
|
||||
userLogOnEntity.ModifyUserId = account;
|
||||
userLogOnEntity.ModifyTime = DateTime.Now;
|
||||
row = db.Insertable<SysUserLogOn>(userLogOnEntity).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
db.CommitTran();
|
||||
return row;
|
||||
}
|
||||
catch
|
||||
{
|
||||
db.RollbackTran();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool ContainsUser(string userAccount, params string[] userIdList)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
List<string> accountList = db.Queryable<SysUser>().Where(it => userIdList.Contains(it.Id)).Select(it => it.Account).ToList();
|
||||
if (accountList.IsNullOrEmpty())
|
||||
return false;
|
||||
if (accountList.Contains(userAccount))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public int AppInsert(SysUser model, string password, string[] roleIds, string opearateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
try
|
||||
{
|
||||
db.BeginTran();
|
||||
////新增用户基本信息。
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.EnableFlag = "Y";
|
||||
model.DeleteFlag = "N";
|
||||
model.CreateUserId = opearateUser;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
model.Avatar = "/Content/framework/images/avatar.png";
|
||||
int row = db.Insertable<SysUser>(model).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
|
||||
//新增新的角色
|
||||
List<SysUserRoleRelation> list = new List<SysUserRoleRelation>();
|
||||
foreach (string roleId in roleIds)
|
||||
{
|
||||
SysUserRoleRelation roleRelation = new SysUserRoleRelation
|
||||
{
|
||||
Id = UUID.StrSnowId,
|
||||
UserId = model.Id,
|
||||
RoleId = roleId,
|
||||
EnableFlag = "Y",
|
||||
DeleteFlag = "N",
|
||||
CreateUserId = opearateUser,
|
||||
CreateTime = DateTime.Now,
|
||||
ModifyUserId = opearateUser,
|
||||
ModifyTime = DateTime.Now
|
||||
};
|
||||
list.Add(roleRelation);
|
||||
}
|
||||
row = db.Insertable<SysUserRoleRelation>(list).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
//新增用户登陆信息。
|
||||
SysUserLogOn userLogOnEntity = new SysUserLogOn();
|
||||
userLogOnEntity.Id = UUID.StrSnowId;
|
||||
userLogOnEntity.UserId = model.Id;
|
||||
userLogOnEntity.SecretKey = userLogOnEntity.Id.DESEncrypt().Substring(0, 8);
|
||||
userLogOnEntity.Password = password.DESEncrypt(userLogOnEntity.SecretKey).MD5Encrypt();
|
||||
userLogOnEntity.LoginCount = 0;
|
||||
userLogOnEntity.IsOnLine = "0";
|
||||
userLogOnEntity.EnableFlag = "Y";
|
||||
userLogOnEntity.DeleteFlag = "N";
|
||||
userLogOnEntity.CreateUserId = opearateUser;
|
||||
userLogOnEntity.CreateTime = DateTime.Now;
|
||||
userLogOnEntity.ModifyUserId = userLogOnEntity.CreateUserId;
|
||||
userLogOnEntity.ModifyTime = userLogOnEntity.CreateTime;
|
||||
row = db.Insertable<SysUserLogOn>(userLogOnEntity).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
db.CommitTran();
|
||||
return row;
|
||||
}
|
||||
catch
|
||||
{
|
||||
db.RollbackTran();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据主键得到用户信息
|
||||
/// </summary>
|
||||
/// <param name="primaryKey"></param>
|
||||
/// <returns></returns>
|
||||
public SysUser Get(string primaryKey)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysUser>().Where(it => it.Id == primaryKey)
|
||||
.Includes(it => it.Organize)
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser).First();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得用户列表分页
|
||||
/// </summary>
|
||||
/// <param name="pageIndex"></param>
|
||||
/// <param name="pageSize"></param>
|
||||
/// <param name="keyWord"></param>
|
||||
/// <param name="totalCount"></param>
|
||||
/// <returns></returns>
|
||||
public List<SysUser> GetList(int pageIndex, int pageSize, string keyWord, ref int totalCount)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
ISugarQueryable<SysUser> queryable = db.Queryable<SysUser>().Where(it => it.DeleteFlag == "N");
|
||||
if (!keyWord.IsNullOrEmpty())
|
||||
{
|
||||
queryable = queryable.Where(it => it.Account.Contains(keyWord) || it.RealName.Contains(keyWord));
|
||||
}
|
||||
return queryable.OrderBy(it => it.SortCode)
|
||||
.Includes(it => it.Organize)
|
||||
.Includes(it => it.CreateUser)
|
||||
.Includes(it => it.ModifyUser).ToPageList(pageIndex, pageSize, ref totalCount);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 删除用户信息
|
||||
/// </summary>
|
||||
/// <param name="primaryKeys"></param>
|
||||
/// <returns></returns>
|
||||
public int Delete(List<string> primaryKeys)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
List<SysUser> list = db.Queryable<SysUser>().Where(it => primaryKeys.Contains(it.Id)).ToList();
|
||||
list.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
return db.Updateable<SysUser>(list).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增用户基础信息
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int Insert(SysUser model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.Id = UUID.StrSnowId;
|
||||
model.DeleteFlag = "N";
|
||||
model.EnableFlag = "Y";
|
||||
|
||||
|
||||
model.CreateUserId = account;
|
||||
model.CreateTime = DateTime.Now;
|
||||
model.ModifyUserId = model.CreateUserId;
|
||||
model.ModifyTime = model.CreateTime;
|
||||
model.Avatar = "/Content/framework/images/avatar.png";
|
||||
return db.Insertable<SysUser>(model).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 更新用户基础信息
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int Update(SysUser model, string account)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
model.ModifyUserId = account;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
|
||||
return db.Updateable<SysUser>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.NickName,
|
||||
it.RealName,
|
||||
it.Birthday,
|
||||
it.Gender,
|
||||
it.Email,
|
||||
it.DepartmentId,
|
||||
it.RoleId,
|
||||
it.MobilePhone,
|
||||
it.Address,
|
||||
it.Signature,
|
||||
it.SortCode,
|
||||
it.IsEnabled,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int AppUpdateAndSetRole(SysUser model, string[] roleIds, string opereateUser)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
try
|
||||
{
|
||||
db.BeginTran();
|
||||
model.ModifyUserId = opereateUser;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
int row = db.Updateable<SysUser>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.NickName,
|
||||
it.RealName,
|
||||
it.Birthday,
|
||||
it.Gender,
|
||||
it.Email,
|
||||
it.DepartmentId,
|
||||
it.RoleId,
|
||||
it.MobilePhone,
|
||||
it.Address,
|
||||
it.Signature,
|
||||
it.SortCode,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
//删除原来的角色
|
||||
List<SysUserRoleRelation> list2 = db.Queryable<SysUserRoleRelation>().Where(it => it.UserId == model.Id && it.DeleteFlag == "N").ToList();
|
||||
list2.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
db.Updateable<SysUserRoleRelation>(list2).ExecuteCommand();
|
||||
//新增新的角色
|
||||
List<SysUserRoleRelation> list = new List<SysUserRoleRelation>();
|
||||
foreach (string roleId in roleIds)
|
||||
{
|
||||
SysUserRoleRelation roleRelation = new SysUserRoleRelation
|
||||
{
|
||||
Id = UUID.StrSnowId,
|
||||
UserId = model.Id,
|
||||
RoleId = roleId,
|
||||
DeleteFlag = "N",
|
||||
EnableFlag = "Y",
|
||||
CreateUserId = opereateUser,
|
||||
CreateTime = DateTime.Now,
|
||||
ModifyUserId = opereateUser,
|
||||
ModifyTime = DateTime.Now
|
||||
};
|
||||
list.Add(roleRelation);
|
||||
}
|
||||
row = db.Insertable<SysUserRoleRelation>(list).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
db.CommitTran();
|
||||
return row;
|
||||
}
|
||||
catch
|
||||
{
|
||||
db.RollbackTran();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int UpdateAndSetRole(SysUser model, string account, string[] roleIds)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
try
|
||||
{
|
||||
db.BeginTran();
|
||||
model.ModifyUserId = account;
|
||||
model.ModifyTime = DateTime.Now;
|
||||
int row = db.Updateable<SysUser>(model).UpdateColumns(it => new
|
||||
{
|
||||
it.NickName,
|
||||
it.RealName,
|
||||
it.Birthday,
|
||||
it.Gender,
|
||||
it.Email,
|
||||
it.DepartmentId,
|
||||
it.RoleId,
|
||||
it.MobilePhone,
|
||||
it.Address,
|
||||
it.Signature,
|
||||
it.SortCode,
|
||||
it.EnableFlag,
|
||||
it.ModifyUserId,
|
||||
it.ModifyTime
|
||||
}).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
//删除原来的角色
|
||||
List<SysUserRoleRelation> list2 = db.Queryable<SysUserRoleRelation>().Where(it => it.UserId == model.Id && it.DeleteFlag == "N").ToList();
|
||||
list2.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
db.Updateable<SysUserRoleRelation>(list2).ExecuteCommand();
|
||||
//新增新的角色
|
||||
List<SysUserRoleRelation> list = new List<SysUserRoleRelation>();
|
||||
foreach (string roleId in roleIds)
|
||||
{
|
||||
SysUserRoleRelation roleRelation = new SysUserRoleRelation
|
||||
{
|
||||
Id = UUID.StrSnowId,
|
||||
UserId = model.Id,
|
||||
RoleId = roleId,
|
||||
EnableFlag = "Y",
|
||||
DeleteFlag = "N",
|
||||
CreateUserId = account,
|
||||
CreateTime = DateTime.Now,
|
||||
ModifyTime = DateTime.Now,
|
||||
ModifyUserId = account
|
||||
};
|
||||
list.Add(roleRelation);
|
||||
}
|
||||
row = db.Insertable<SysUserRoleRelation>(list).ExecuteCommand();
|
||||
if (row == 0)
|
||||
{
|
||||
db.RollbackTran();
|
||||
return row;
|
||||
}
|
||||
db.CommitTran();
|
||||
return row;
|
||||
}
|
||||
catch
|
||||
{
|
||||
db.RollbackTran();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
57
DH.RBAC/Logic/Sys/SysUserRoleRelationLogic.cs
Normal file
@ -0,0 +1,57 @@
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Logic.Base;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
namespace DH.RBAC.Logic.Sys
|
||||
{
|
||||
public class SysUserRoleRelationLogic : BaseLogic
|
||||
{
|
||||
/// <summary>
|
||||
/// 删除用户角色关系
|
||||
/// </summary>
|
||||
/// <param name="userIds"></param>
|
||||
/// <returns></returns>
|
||||
public int Delete(List<string> userIds)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
List<SysUserRoleRelation> list = db.Queryable<SysUserRoleRelation>().Where(it => userIds.Contains(it.UserId)).ToList();
|
||||
list.ForEach(it => { it.DeleteFlag = "Y"; });
|
||||
return db.Updateable<SysUserRoleRelation>(list).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据ID得到用户角色关系
|
||||
/// </summary>
|
||||
/// <param name="userIds"></param>
|
||||
/// <returns></returns>
|
||||
public List<SysUserRoleRelation> GetList(string userId)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysUserRoleRelation>().Where(it => it.UserId == userId && it.DeleteFlag=="N").ToList();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从用户角色关系表中得到所有角色绑定信息
|
||||
/// </summary>
|
||||
/// <param name="ids"></param>
|
||||
/// <returns></returns>
|
||||
public List<SysUserRoleRelation> GetByRoles(List<string> ids)
|
||||
{
|
||||
using (var db = GetInstance())
|
||||
{
|
||||
return db.Queryable<SysUserRoleRelation>().Where(it => ids.Contains(it.RoleId) && it.DeleteFlag == "N").ToList();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
91
DH.RBAC/Models/Base/BaseModelEntity.cs
Normal file
@ -0,0 +1,91 @@
|
||||
using AntdUI;
|
||||
using DH.RBAC.Model.Sys;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace DH.RBAC.Model
|
||||
{
|
||||
public class BaseModelEntity: NotifyProperty
|
||||
{
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "EnableFlag", ColumnDescription = "是否启用", IsNullable = true, Length = 1)]
|
||||
public virtual string EnableFlag { get; set; }
|
||||
/// <summary>
|
||||
/// 是否删除
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "DeleteFlag", ColumnDescription = "是否删除", IsNullable = true, Length = 1)]
|
||||
public virtual string DeleteFlag { get; set; }
|
||||
/// <summary>
|
||||
/// 创建人
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "CreateUserId", ColumnDescription = "创建人", IsNullable = true, Length = 255)]
|
||||
public virtual string CreateUserId { get; set; }
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "CreateTime", ColumnDescription = "创建时间", IsNullable = true, Length = 3)]
|
||||
public virtual DateTime? CreateTime { get; set; }
|
||||
/// <summary>
|
||||
/// 更新人
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "ModifyUserId", ColumnDescription = "更新人", IsNullable = true, Length = 255)]
|
||||
public virtual string ModifyUserId { get; set; }
|
||||
/// <summary>
|
||||
/// 更新时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "ModifyTime", ColumnDescription = "更新时间", IsNullable = true, Length = 3)]
|
||||
public virtual DateTime? ModifyTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建人
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
[Navigate(NavigateType.OneToOne, nameof(CreateUserId), nameof(SysUser.Id))]//一对一 SchoolId是StudentA类里面的
|
||||
public SysUser CreateUser { get; set; } //不能赋值只能是null
|
||||
/// <summary>
|
||||
/// 更新人
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
[Navigate(NavigateType.OneToOne, nameof(ModifyUserId), nameof(SysUser.Id))]//一对一 SchoolId是StudentA类里面的
|
||||
public SysUser ModifyUser { get; set; } //不能赋值只能是null
|
||||
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string CreateUserName
|
||||
{
|
||||
get
|
||||
{
|
||||
return CreateUser == null ? "" : CreateUser.RealName;
|
||||
}
|
||||
}
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string ModifyUserName
|
||||
{
|
||||
get
|
||||
{
|
||||
return ModifyUser == null ? "" : ModifyUser.RealName;
|
||||
}
|
||||
}
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public bool IsDeleted
|
||||
{
|
||||
get
|
||||
{
|
||||
return DeleteFlag == "Y" ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public bool IsEnabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return EnableFlag == "Y" ? true : false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
22
DH.RBAC/Models/Base/CodeGenerator.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Base
|
||||
{
|
||||
public class CodeGenerator
|
||||
{
|
||||
public string TableName { get; set; }
|
||||
public string ColumnName { get; set; }
|
||||
public string TypeName { get; set; }
|
||||
public string TypeLength { get; set; }
|
||||
public string IsPrimaryKey { get; set; }
|
||||
public string ClassName { get; set; }
|
||||
public string PropertyName { get; set; }
|
||||
public string CSType { get; set; }
|
||||
|
||||
public string Other { get; set; }
|
||||
}
|
||||
}
|
20
DH.RBAC/Models/Base/MenuControlAttribute.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Models.Base
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
|
||||
public class MenuControlAttribute : Attribute
|
||||
{
|
||||
public string ParentMenu { get; } // 父菜单名称(如 "相机设置")
|
||||
public Type ConfigType { get; } // 配置类型(如 CameraBase)
|
||||
|
||||
public MenuControlAttribute(string parentMenu)
|
||||
{
|
||||
ParentMenu = parentMenu;
|
||||
}
|
||||
}
|
||||
}
|
16
DH.RBAC/Models/DTO/Parms/AuthorParms.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class AuthorParms
|
||||
{
|
||||
public string roleId { get; set; }
|
||||
public List<string> perIds { get; set; }
|
||||
|
||||
public string operater { get; set; }
|
||||
}
|
||||
}
|
14
DH.RBAC/Models/DTO/Parms/FileUploadParms.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class FileUploadParms
|
||||
{
|
||||
public byte[] file { get; set; }
|
||||
public string fileName { get; set; }
|
||||
}
|
||||
}
|
17
DH.RBAC/Models/DTO/Parms/ItemDetailIndexParms.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class ItemDetailIndexParms
|
||||
{
|
||||
public int pageIndex { get; set; }
|
||||
public int pageSize { get; set; }
|
||||
|
||||
public string keyWord { get; set; }
|
||||
public string itemId { get; set; }
|
||||
}
|
||||
}
|
14
DH.RBAC/Models/DTO/Parms/KeyValue.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class KeyValue
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Value { get; set; }
|
||||
}
|
||||
}
|
15
DH.RBAC/Models/DTO/Parms/LogDeleteParms.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class LogDeleteParms
|
||||
{
|
||||
public string type { get; set; }
|
||||
public string index { get; set; }
|
||||
public string operateUser { get; set; }
|
||||
}
|
||||
}
|
17
DH.RBAC/Models/DTO/Parms/LogIndexParms.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class LogIndexParms
|
||||
{
|
||||
public int pageIndex { get; set; }
|
||||
public int pageSize { get; set; }
|
||||
public string type { get; set; }
|
||||
public string index { get; set; }
|
||||
public string keyWord { get; set; }
|
||||
}
|
||||
}
|
18
DH.RBAC/Models/DTO/Parms/LongPrimaryKeyParms.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class LongPrimaryKeyParms
|
||||
{
|
||||
public string operaterId { get; set; }
|
||||
public long primaryKey { get; set; }
|
||||
|
||||
public string operateUser { get; set; }
|
||||
public string userIds { get; set; }
|
||||
public string roleId { get; set; }
|
||||
}
|
||||
}
|
16
DH.RBAC/Models/DTO/Parms/ModifyPasswordParms.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class ModifyPasswordParms
|
||||
{
|
||||
public string userId { get; set; }
|
||||
public string oldPassword { get; set; }
|
||||
public string newPassword { get; set; }
|
||||
public string confirmPassword { get; set; }
|
||||
}
|
||||
}
|
14
DH.RBAC/Models/DTO/Parms/RoleDeleteParms.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class RoleDeleteParms
|
||||
{
|
||||
public List<string> roleIdList { get; set; }
|
||||
public string operateUser { get; set; }
|
||||
}
|
||||
}
|
15
DH.RBAC/Models/DTO/Parms/SearchParms.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class SearchParms
|
||||
{
|
||||
public int pageIndex { get; set; }
|
||||
public int pageSize { get; set; }
|
||||
public string keyWord { get; set; }
|
||||
}
|
||||
}
|
18
DH.RBAC/Models/DTO/Parms/StrPrimaryKeyParms.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class StrPrimaryKeyParms
|
||||
{
|
||||
public string operaterId { get; set; }
|
||||
public string primaryKey { get; set; }
|
||||
|
||||
public string operateUser { get; set; }
|
||||
public string userIds { get; set; }
|
||||
public string roleId { get; set; }
|
||||
}
|
||||
}
|
16
DH.RBAC/Models/DTO/Parms/UserDeleteParms.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class UserDeleteParms
|
||||
{
|
||||
public List<string> userIdList { get; set; }
|
||||
|
||||
public string currentUserId { get; set; }
|
||||
public string operateUser { get; set; }
|
||||
}
|
||||
}
|
15
DH.RBAC/Models/DTO/Parms/UserLoginParms.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.DTO.Parms
|
||||
{
|
||||
public class UserLoginParms
|
||||
{
|
||||
public string verifyCode { get; set; }
|
||||
public string userName { get; set; }
|
||||
public string password { get; set; }
|
||||
}
|
||||
}
|
27
DH.RBAC/Models/Enum/ModuleType.cs
Normal file
@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
namespace DH.RBAC.Model.Enum
|
||||
{
|
||||
/// <summary>
|
||||
/// 权限类型。
|
||||
/// </summary>
|
||||
public class ModuleType
|
||||
{
|
||||
/// <summary>
|
||||
/// 主菜单。
|
||||
/// </summary>
|
||||
public const int Menu = 2;
|
||||
/// <summary>
|
||||
/// 子菜单
|
||||
/// </summary>
|
||||
public const int SubMenu = 0;
|
||||
/// <summary>
|
||||
/// 按钮。
|
||||
/// </summary>
|
||||
public const int Button = 1;
|
||||
|
||||
}
|
||||
}
|
37
DH.RBAC/Models/Sys/SysItem.cs
Normal file
@ -0,0 +1,37 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
[SugarTable("Sys_Item")]
|
||||
public partial class SysItem : BaseModelEntity
|
||||
{
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "EnCode")]
|
||||
public string EnCode { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "ParentId")]
|
||||
public string ParentId { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Layer")]
|
||||
public int? Layer { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "SortCode")]
|
||||
public int? SortCode { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "IsTree")]
|
||||
public string IsTree { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Remark")]
|
||||
public string Remark { get; set; }
|
||||
}
|
||||
}
|
35
DH.RBAC/Models/Sys/SysItemDetail.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
[SugarTable("Sys_ItemsDetail")]
|
||||
public partial class SysItemDetail : BaseModelEntity
|
||||
{
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "ItemId")]
|
||||
public string ItemId { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "EnCode")]
|
||||
public string EnCode { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "IsDefault")]
|
||||
public string IsDefault { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "SortCode")]
|
||||
public int? SortCode { get; set; }
|
||||
|
||||
}
|
||||
|
||||
}
|
29
DH.RBAC/Models/Sys/SysLog.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
|
||||
[SugarTable("Sys_Log")]
|
||||
public class SysLog : BaseModelEntity
|
||||
{
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public long Id { get; set; }
|
||||
|
||||
[SugarColumn]
|
||||
public string Type { get; set; }
|
||||
|
||||
[SugarColumn]
|
||||
public int ThreadId { get; set; }
|
||||
|
||||
[SugarColumn]
|
||||
public string Message { get; set; }
|
||||
|
||||
[SugarColumn]
|
||||
public DateTime CreateTime { get; set; }
|
||||
}
|
||||
}
|
58
DH.RBAC/Models/Sys/SysOrganize.cs
Normal file
@ -0,0 +1,58 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
[SugarTable("Sys_Organize")]
|
||||
public partial class SysOrganize : BaseModelEntity
|
||||
{
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public string Id { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "ParentId")]
|
||||
public string ParentId { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Layer")]
|
||||
public int? Layer { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "EnCode")]
|
||||
public string EnCode { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "FullName")]
|
||||
public string FullName { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Type")]
|
||||
public int? Type { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "ManagerId")]
|
||||
public string ManagerId { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "TelePhone")]
|
||||
public string TelePhone { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "WeChat")]
|
||||
public string WeChat { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Fax")]
|
||||
public string Fax { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Email")]
|
||||
public string Email { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Address")]
|
||||
public string Address { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "SortCode")]
|
||||
public int? SortCode { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "Remark")]
|
||||
public string Remark { get; set; }
|
||||
|
||||
}
|
||||
}
|
61
DH.RBAC/Models/Sys/SysPermission.cs
Normal file
@ -0,0 +1,61 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
|
||||
[SugarTable("Sys_Permission")]
|
||||
public partial class SysPermission : BaseModelEntity
|
||||
{
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public string Id { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "ParentId")]
|
||||
public string ParentId { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Layer")]
|
||||
public int? Layer { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "EnCode")]
|
||||
public string EnCode { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "JsEvent")]
|
||||
public string JsEvent { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Icon")]
|
||||
public string Icon { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "SymbolIndex")]
|
||||
public int SymbolIndex { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "Url")]
|
||||
public string Url { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "Remark")]
|
||||
public string Remark { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Type")]
|
||||
public int? Type { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "SortCode")]
|
||||
public int? SortCode { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "IsPublic")]
|
||||
public string IsPublic { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "IsEdit")]
|
||||
public string IsEdit { get; set; }
|
||||
|
||||
}
|
||||
}
|
55
DH.RBAC/Models/Sys/SysRole.cs
Normal file
@ -0,0 +1,55 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
[SugarTable("Sys_Role")]
|
||||
public partial class SysRole : BaseModelEntity
|
||||
{
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "OrganizeId")]
|
||||
public string OrganizeId { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "EnCode")]
|
||||
public string EnCode { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Type")]
|
||||
public int? Type { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "AllowEdit")]
|
||||
public string AllowEdit { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "Remark")]
|
||||
public string Remark { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "SortCode")]
|
||||
public int? SortCode { get; set; }
|
||||
|
||||
|
||||
[Navigate(NavigateType.OneToOne, nameof(OrganizeId), nameof(SysOrganize.Id))]
|
||||
public SysOrganize Organize { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string DeptName
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Organize == null)
|
||||
return "";
|
||||
return Organize.FullName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
29
DH.RBAC/Models/Sys/SysRoleAuthorize.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
[SugarTable("Sys_RoleAuthorize")]
|
||||
public partial class SysRoleAuthorize : BaseModelEntity
|
||||
{
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
|
||||
public string Id { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "RoleId")]
|
||||
public string RoleId { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "ModuleId")]
|
||||
public string ModuleId { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
115
DH.RBAC/Models/Sys/SysUser.cs
Normal file
@ -0,0 +1,115 @@
|
||||
|
||||
using DH.RBAC.Utility.Extension;
|
||||
using DH.RBAC.Utility.Other;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
[SugarTable("Sys_User")]
|
||||
public partial class SysUser : BaseModelEntity
|
||||
{
|
||||
private SysOrganize organize;
|
||||
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Account")]
|
||||
public string Account { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "RealName")]
|
||||
public string RealName { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "NickName")]
|
||||
public string NickName { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Avatar")]
|
||||
public string Avatar { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string AvatarBase64
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Avatar.IsNullOrEmpty())
|
||||
return "";
|
||||
string filePath = MyEnvironment.RootPath("wwwroot" + Avatar);
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return filePath;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "Gender")]
|
||||
public string Gender { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string GenderStr
|
||||
{
|
||||
get
|
||||
{
|
||||
return Gender == "1" ? "男" : "女";
|
||||
}
|
||||
}
|
||||
|
||||
[SugarColumn(ColumnName = "Birthday")]
|
||||
public DateTime? Birthday { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "MobilePhone")]
|
||||
public string MobilePhone { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "Email")]
|
||||
public string Email { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Signature")]
|
||||
public string Signature { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "Address")]
|
||||
public string Address { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "CompanyId")]
|
||||
public string CompanyId { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "SortCode")]
|
||||
public int? SortCode { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "DepartmentId")]
|
||||
public string DepartmentId { get; set; }
|
||||
|
||||
|
||||
[Navigate(NavigateType.OneToOne, nameof(DepartmentId), nameof(SysOrganize.Id))]
|
||||
public SysOrganize Organize { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string DeptName
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Organize == null)
|
||||
return "";
|
||||
return Organize.FullName;
|
||||
}
|
||||
}
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string StrBirthday { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public List<string> RoleId { set; get; }
|
||||
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string password { set; get; }
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string roleIds { set; get; }
|
||||
|
||||
}
|
||||
}
|
60
DH.RBAC/Models/Sys/SysUserLogOn.cs
Normal file
@ -0,0 +1,60 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
[SugarTable("Sys_UserLogOn")]
|
||||
public partial class SysUserLogOn : BaseModelEntity
|
||||
{
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "UserId")]
|
||||
public string UserId { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Password")]
|
||||
public string Password { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "SecretKey")]
|
||||
public string SecretKey { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "PrevVisitTime")]
|
||||
public DateTime? PrevVisitTime { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "LastVisitTime")]
|
||||
public DateTime? LastVisitTime { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "ChangePwdTime")]
|
||||
public DateTime? ChangePwdTime { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "LoginCount")]
|
||||
public int LoginCount { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "AllowMultiUserOnline")]
|
||||
public string AllowMultiUserOnline { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "IsOnLine")]
|
||||
public string IsOnLine { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Question")]
|
||||
public string Question { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "AnswerQuestion")]
|
||||
public string AnswerQuestion { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "CheckIPAddress")]
|
||||
public string CheckIPAddress { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Language")]
|
||||
public string Language { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "Theme")]
|
||||
public string Theme { get; set; }
|
||||
|
||||
}
|
||||
}
|
26
DH.RBAC/Models/Sys/SysUserRoleRelation.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Model.Sys
|
||||
{
|
||||
|
||||
[SugarTable("Sys_UserRoleRelation")]
|
||||
public partial class SysUserRoleRelation : BaseModelEntity
|
||||
{
|
||||
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "UserId")]
|
||||
public string UserId { get; set; }
|
||||
|
||||
|
||||
[SugarColumn(ColumnName = "RoleId")]
|
||||
public string RoleId { get; set; }
|
||||
|
||||
}
|
||||
}
|
153
DH.RBAC/Properties/Resources.Designer.cs
generated
Normal file
@ -0,0 +1,153 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace DH.RBAC.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 一个强类型的资源类,用于查找本地化的字符串等。
|
||||
/// </summary>
|
||||
// 此类是由 StronglyTypedResourceBuilder
|
||||
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
||||
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
||||
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 返回此类使用的缓存的 ResourceManager 实例。
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(" DH.RBAC.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写当前线程的 CurrentUICulture 属性,对
|
||||
/// 使用此强类型资源类的所有资源查找执行重写。
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap avatar {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("avatar", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap back {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("back", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap background {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("background", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap login_back {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("login_back", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap logo {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("logo", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap logo2 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("logo2", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap menu01 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("menu01", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap menu02 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("menu02", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap menu03 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("menu03", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
148
DH.RBAC/Properties/Resources.resx
Normal file
@ -0,0 +1,148 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="login_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\login_back.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="logo" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="back" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="logo2" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\logo2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="background" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\background.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="menu02" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\menu02.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="avatar" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\avatar.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="menu01" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\menu01.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="menu03" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\menu03.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
114
DH.RBAC/RBACWindow.Designer.cs
generated
Normal file
@ -0,0 +1,114 @@
|
||||
namespace DH.RBAC
|
||||
{
|
||||
partial class RBACWindow
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AntdUI.Tabs.StyleCard styleCard1 = new AntdUI.Tabs.StyleCard();
|
||||
titlebar = new AntdUI.PageHeader();
|
||||
lbName = new AntdUI.Label();
|
||||
menu1 = new AntdUI.Menu();
|
||||
tabs1 = new AntdUI.Tabs();
|
||||
titlebar.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// titlebar
|
||||
//
|
||||
titlebar.BackColor = System.Drawing.Color.FromArgb(46, 108, 227);
|
||||
titlebar.Controls.Add(lbName);
|
||||
titlebar.DividerShow = true;
|
||||
titlebar.DividerThickness = 0F;
|
||||
titlebar.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
titlebar.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
|
||||
titlebar.ForeColor = System.Drawing.Color.White;
|
||||
titlebar.Location = new System.Drawing.Point(0, 0);
|
||||
titlebar.Mode = AntdUI.TAMode.Dark;
|
||||
titlebar.Name = "titlebar";
|
||||
titlebar.ShowButton = true;
|
||||
titlebar.ShowIcon = true;
|
||||
titlebar.Size = new System.Drawing.Size(923, 40);
|
||||
titlebar.SubText = "CCD光学筛选系统后台";
|
||||
titlebar.TabIndex = 1;
|
||||
titlebar.Text = "山东迭慧智能科技有限公司";
|
||||
//
|
||||
// lbName
|
||||
//
|
||||
lbName.Dock = System.Windows.Forms.DockStyle.Right;
|
||||
lbName.ForeColor = System.Drawing.SystemColors.Window;
|
||||
lbName.Location = new System.Drawing.Point(645, 0);
|
||||
lbName.Name = "lbName";
|
||||
lbName.Size = new System.Drawing.Size(134, 40);
|
||||
lbName.TabIndex = 0;
|
||||
lbName.Text = "";
|
||||
lbName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// menu1
|
||||
//
|
||||
menu1.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
menu1.Location = new System.Drawing.Point(0, 40);
|
||||
menu1.Name = "menu1";
|
||||
menu1.Size = new System.Drawing.Size(169, 504);
|
||||
menu1.TabIndex = 2;
|
||||
menu1.Text = "menu1";
|
||||
//
|
||||
// tabs1
|
||||
//
|
||||
tabs1.BackColor = System.Drawing.SystemColors.Window;
|
||||
tabs1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
tabs1.Location = new System.Drawing.Point(169, 40);
|
||||
tabs1.Name = "tabs1";
|
||||
tabs1.Size = new System.Drawing.Size(754, 504);
|
||||
styleCard1.Closable = true;
|
||||
tabs1.Style = styleCard1;
|
||||
tabs1.TabIndex = 6;
|
||||
tabs1.Text = "tabs1";
|
||||
tabs1.Type = AntdUI.TabType.Card;
|
||||
//
|
||||
// RBACWindow
|
||||
//
|
||||
AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
|
||||
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
ClientSize = new System.Drawing.Size(923, 544);
|
||||
Controls.Add(tabs1);
|
||||
Controls.Add(menu1);
|
||||
Controls.Add(titlebar);
|
||||
Name = "RBACWindow";
|
||||
StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
Text = "RBACWindow";
|
||||
WindowState = System.Windows.Forms.FormWindowState.Maximized;
|
||||
titlebar.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.PageHeader titlebar;
|
||||
private AntdUI.Label lbName;
|
||||
private AntdUI.Menu menu1;
|
||||
private AntdUI.Tabs tabs1;
|
||||
}
|
||||
}
|
204
DH.RBAC/RBACWindow.cs
Normal file
@ -0,0 +1,204 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using AntdUI;
|
||||
using DH.RBAC.Common;
|
||||
using DH.RBAC.Logic.Sys;
|
||||
using DH.RBAC.Model.Sys;
|
||||
using DH.RBAC.Models.Base;
|
||||
using DH.RBAC.Page;
|
||||
using Sunny.UI;
|
||||
|
||||
|
||||
|
||||
namespace DH.RBAC
|
||||
{
|
||||
public partial class RBACWindow : Window
|
||||
{
|
||||
private SysUserLogic userLogic;
|
||||
private SysPermissionLogic permissionLogic;
|
||||
private List<Menu> pageList = new List<Menu>();
|
||||
public RBACWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
userLogic = new SysUserLogic();
|
||||
permissionLogic = new SysPermissionLogic();
|
||||
Load += RBACWindow_Load;
|
||||
menu1.SelectChanged += Menu1_SelectChanged;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 窗体对象实例
|
||||
/// </summary>
|
||||
private static RBACWindow _instance;
|
||||
|
||||
public static RBACWindow Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null || _instance.IsDisposed)
|
||||
_instance = new RBACWindow();
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
private void RBACWindow_Load(object sender, EventArgs e)
|
||||
{
|
||||
lbName.Text = GlobalConfig.CurrentUser.Account;
|
||||
//设置关联
|
||||
//Aside.TabControl = MainTabControl;
|
||||
//获得用户权限
|
||||
List<SysPermission> list;
|
||||
if (userLogic.ContainsUser("admin", GlobalConfig.CurrentUser.Id))
|
||||
{
|
||||
list = permissionLogic.GetList();
|
||||
}
|
||||
else
|
||||
{
|
||||
list = permissionLogic.GetList(GlobalConfig.CurrentUser.Id);
|
||||
}
|
||||
if (list.IsNullOrEmpty())
|
||||
{
|
||||
AntdUI.Message.warn(this, "网络或服务器异常,请稍后重试!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
GlobalConfig.PermissionList = list;
|
||||
|
||||
//取出一级菜单
|
||||
List<SysPermission> root = list.Where(it => it.ParentId == "0").ToList();
|
||||
foreach (SysPermission permission in root)
|
||||
{
|
||||
MenuItem menuItem=new MenuItem();
|
||||
menuItem.Text = permission.Name;
|
||||
menu1.Items.Add(menuItem);
|
||||
|
||||
List<SysPermission> childList = list.Where(it => it.ParentId == permission.Id).ToList();
|
||||
|
||||
foreach (SysPermission child in childList)
|
||||
{
|
||||
MenuItem childmenuItem = new MenuItem();
|
||||
childmenuItem.Text = child.Name;
|
||||
childmenuItem.ID = child.EnCode;
|
||||
childmenuItem.Tag=child.Id.ToString();
|
||||
menuItem.Sub.Add(childmenuItem);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void Menu1_SelectChanged(object sender, MenuSelectEventArgs e)
|
||||
{
|
||||
var clickedItem = e.Value as MenuItem;
|
||||
|
||||
|
||||
|
||||
|
||||
if (clickedItem?.ID == null) return;
|
||||
|
||||
string pageCode = clickedItem.ID; // 获取PageCode(如"sys-user")
|
||||
string menuText = clickedItem.Text;
|
||||
string permissionId= clickedItem.Tag.ToString();
|
||||
// 查找是否已存在对应的TabPage
|
||||
var existingTab = FindTabByPageCode(pageCode);
|
||||
if (existingTab != null)
|
||||
{
|
||||
tabs1.SelectedTab = existingTab;
|
||||
return;
|
||||
}
|
||||
|
||||
// 动态创建控件并添加TabPage
|
||||
MyPage control = CreateControlByPageCode(pageCode);
|
||||
try
|
||||
{
|
||||
|
||||
|
||||
control.ButtonPermissionList = GlobalConfig.PermissionList.Where(it => it.ParentId == permissionId).ToList();
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
if (control == null)
|
||||
{
|
||||
AntdUI.Message.warn(this, "该菜单仅权限配置,无显示页面!", autoClose: 3);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
AddNewTab(control, menuText, pageCode);
|
||||
|
||||
}
|
||||
private MyPage CreateControlByPageCode(string pageCode)
|
||||
{
|
||||
Type controlType = FindControlTypeByPageCode(pageCode);
|
||||
if (controlType == null) return null;
|
||||
|
||||
try
|
||||
{
|
||||
// 获取接受 Form 参数的构造函数
|
||||
var constructor = controlType.GetConstructor(new[] { typeof(Window) });
|
||||
if (constructor != null)
|
||||
{
|
||||
return constructor.Invoke(new object[] { this }) as MyPage; // 传递当前窗体实例
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果未找到带 Form 参数的构造函数,尝试无参构造
|
||||
return Activator.CreateInstance(controlType) as MyPage;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"创建页面失败: {ex.Message}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
private Type FindControlTypeByPageCode(string pageCode)
|
||||
{
|
||||
// 反射查找所有带有PageCodeAttribute的UserControl类型
|
||||
var controlTypes = Assembly.GetExecutingAssembly().GetTypes()
|
||||
.Where(t => t.IsSubclassOf(typeof(UserControl)) && !t.IsAbstract);
|
||||
|
||||
foreach (var type in controlTypes)
|
||||
{
|
||||
var attr = type.GetCustomAttribute<PageCodeAttribute>();
|
||||
if (attr != null && attr.Encode == pageCode)
|
||||
{
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private void AddNewTab(UserControl control, string menuText, string pageCode)
|
||||
{
|
||||
AntdUI.TabPage tabPage = new AntdUI.TabPage
|
||||
{
|
||||
Text = menuText,
|
||||
Tag = pageCode, // 可选:存储PageCode用于后续查找
|
||||
ReadOnly = false
|
||||
};
|
||||
control.Dock = DockStyle.Fill;
|
||||
AutoDpi(control); // DPI适配(如果有)
|
||||
tabPage.Controls.Add(control);
|
||||
tabs1.Pages.Add(tabPage);
|
||||
tabs1.SelectedTab = tabPage;
|
||||
}
|
||||
|
||||
private AntdUI.TabPage FindTabByPageCode(string pageCode)
|
||||
{
|
||||
return tabs1.Pages.OfType<AntdUI.TabPage>()
|
||||
.FirstOrDefault(t => t.Tag?.ToString() == pageCode);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
120
DH.RBAC/RBACWindow.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
BIN
DH.RBAC/Resources/avatar.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
DH.RBAC/Resources/back.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
DH.RBAC/Resources/background.png
Normal file
After Width: | Height: | Size: 373 KiB |
BIN
DH.RBAC/Resources/login_back.jpg
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
DH.RBAC/Resources/logo.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
DH.RBAC/Resources/logo2.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
DH.RBAC/Resources/menu01.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
DH.RBAC/Resources/menu02.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
DH.RBAC/Resources/menu03.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
87
DH.RBAC/UserControls/AccountControl.Designer.cs
generated
Normal file
@ -0,0 +1,87 @@
|
||||
namespace DH.RBAC.UserControls
|
||||
{
|
||||
partial class AccountControl
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.userAvatar = new Sunny.UI.UIAvatar();
|
||||
this.lblUserName = new Sunny.UI.UILabel();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// userAvatar
|
||||
//
|
||||
this.userAvatar.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.userAvatar.FillColor = System.Drawing.Color.Transparent;
|
||||
this.userAvatar.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||
this.userAvatar.ForeColor = System.Drawing.Color.White;
|
||||
this.userAvatar.Location = new System.Drawing.Point(0, 0);
|
||||
this.userAvatar.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.userAvatar.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.userAvatar.Name = "userAvatar";
|
||||
this.userAvatar.Size = new System.Drawing.Size(55, 60);
|
||||
this.userAvatar.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.userAvatar.TabIndex = 2;
|
||||
this.userAvatar.Click += new System.EventHandler(this.userAvatar_Click);
|
||||
this.userAvatar.MouseEnter += new System.EventHandler(this.lblUserName_MouseEnter);
|
||||
this.userAvatar.MouseLeave += new System.EventHandler(this.userAvatar_Leave);
|
||||
//
|
||||
// lblUserName
|
||||
//
|
||||
this.lblUserName.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblUserName.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||
this.lblUserName.ForeColor = System.Drawing.Color.White;
|
||||
this.lblUserName.Location = new System.Drawing.Point(55, 0);
|
||||
this.lblUserName.Name = "lblUserName";
|
||||
this.lblUserName.Size = new System.Drawing.Size(122, 60);
|
||||
this.lblUserName.Style = Sunny.UI.UIStyle.Custom;
|
||||
this.lblUserName.TabIndex = 4;
|
||||
this.lblUserName.Text = "Admin";
|
||||
this.lblUserName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.lblUserName.Click += new System.EventHandler(this.userAvatar_Click);
|
||||
this.lblUserName.MouseEnter += new System.EventHandler(this.lblUserName_MouseEnter);
|
||||
this.lblUserName.MouseLeave += new System.EventHandler(this.userAvatar_Leave);
|
||||
//
|
||||
// AccountControl
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.Gray;
|
||||
this.Controls.Add(this.lblUserName);
|
||||
this.Controls.Add(this.userAvatar);
|
||||
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.Name = "AccountControl";
|
||||
this.Size = new System.Drawing.Size(177, 60);
|
||||
this.Load += new System.EventHandler(this.AccountControl_Load);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private Sunny.UI.UIAvatar userAvatar;
|
||||
private Sunny.UI.UILabel lblUserName;
|
||||
}
|
||||
}
|
75
DH.RBAC/UserControls/AccountControl.cs
Normal file
@ -0,0 +1,75 @@
|
||||
using DH.RBAC.Common;
|
||||
using DH.RBAC.UserControls.Menus;
|
||||
using PopupTool;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DH.RBAC.UserControls
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户自定义控件,弹出层显示
|
||||
/// </summary>
|
||||
public partial class AccountControl : UserControl
|
||||
{
|
||||
public AccountControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 界面加载时,显示信息
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void AccountControl_Load(object sender, EventArgs e)
|
||||
{
|
||||
lblUserName.Text = GlobalConfig.CurrentUser.NickName;
|
||||
if (GlobalConfig.Avatar != null)
|
||||
{
|
||||
userAvatar.Icon = Sunny.UI.UIAvatar.UIIcon.Image;
|
||||
userAvatar.Image = GlobalConfig.Avatar;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 鼠标放上去改变颜色
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void lblUserName_MouseEnter(object sender, EventArgs e)
|
||||
{
|
||||
userAvatar.BackColor = Color.FromArgb(176, 176, 176);
|
||||
lblUserName.BackColor = Color.FromArgb(176, 176, 176);
|
||||
}
|
||||
/// <summary>
|
||||
/// 鼠标离开时,颜色改回来
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void userAvatar_Leave(object sender, EventArgs e)
|
||||
{
|
||||
userAvatar.BackColor = Color.Gray;
|
||||
lblUserName.BackColor = Color.Gray;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点下去后显示弹出层
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void userAvatar_Click(object sender, EventArgs e)
|
||||
{
|
||||
UserMenuPanel uc = new UserMenuPanel();
|
||||
Popup pop = new Popup(uc);
|
||||
pop.Show(this);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
120
DH.RBAC/UserControls/AccountControl.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
121
DH.RBAC/UserControls/Menus/UserMenuPanel.cs
Normal file
@ -0,0 +1,121 @@
|
||||
|
||||
using DH.RBAC;
|
||||
using DH.RBAC.Utility.Other;
|
||||
using Sunny.UI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.UserControls.Menus
|
||||
{
|
||||
public class UserMenuPanel : UIPanel
|
||||
{
|
||||
public UserMenuPanel()
|
||||
{
|
||||
UISymbolLabel lblAccountManage = new UISymbolLabel();
|
||||
lblAccountManage.ForeColor = Color.FromArgb(153, 153, 153);
|
||||
|
||||
lblAccountManage.Location = new Point(7, 7);
|
||||
lblAccountManage.MinimumSize = new Size(1, 1);
|
||||
lblAccountManage.Padding = new System.Windows.Forms.Padding(32, 0, 0, 0);
|
||||
lblAccountManage.Size = new Size(122, 44);
|
||||
lblAccountManage.Style = UIStyle.Custom;
|
||||
lblAccountManage.StyleCustomMode = true;
|
||||
lblAccountManage.Symbol = 61508;
|
||||
lblAccountManage.SymbolColor = Color.FromArgb(153, 153, 153);
|
||||
lblAccountManage.SymbolSize = 28;
|
||||
lblAccountManage.Text = "账户管理";
|
||||
lblAccountManage.Click += new EventHandler(this.lblAccountManage_Click);
|
||||
lblAccountManage.MouseEnter += new EventHandler(this.uiSymbolLabel1_MouseEnter);
|
||||
lblAccountManage.MouseLeave += new EventHandler(this.uiSymbolLabel1_MouseLeave);
|
||||
|
||||
|
||||
UISymbolLabel lblExit = new UISymbolLabel();
|
||||
lblExit.ForeColor = Color.FromArgb(153, 153, 153);
|
||||
|
||||
lblExit.Location = new Point(6, 62);
|
||||
lblExit.Padding = new System.Windows.Forms.Padding(32, 0, 0, 0);
|
||||
lblExit.Size = new Size(122, 44);
|
||||
lblExit.Style = UIStyle.Custom;
|
||||
lblExit.StyleCustomMode = true;
|
||||
lblExit.Symbol = 61584;
|
||||
lblExit.SymbolColor = Color.FromArgb(153, 153, 153);
|
||||
lblExit.SymbolSize = 28;
|
||||
lblExit.TabIndex = 15;
|
||||
lblExit.Text = "安全退出";
|
||||
lblExit.Click += new EventHandler(this.lblExit_Click);
|
||||
lblExit.MouseEnter += new EventHandler(this.uiSymbolLabel1_MouseEnter);
|
||||
lblExit.MouseLeave += new EventHandler(this.uiSymbolLabel1_MouseLeave);
|
||||
|
||||
this.Style = UIStyle.Custom;
|
||||
this.StyleCustomMode = true;
|
||||
this.Size = new Size(134, 114);
|
||||
this.BackColor = Color.White;
|
||||
this.FillColor = Color.White;
|
||||
this.RectColor = Color.Silver;
|
||||
this.Controls.Add(lblExit);
|
||||
this.Controls.Add(lblAccountManage);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 账户管理点击事件处理
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void lblAccountManage_Click(object sender, EventArgs e)
|
||||
{
|
||||
FormHelper.ShowSubForm(new AccountForm());
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 鼠标进入按钮后,改变颜色
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void uiSymbolLabel1_MouseEnter(object sender, EventArgs e)
|
||||
{
|
||||
UISymbolLabel label = sender as UISymbolLabel;
|
||||
label.BackColor = Color.FromArgb(244, 244, 244);
|
||||
label.ForeColor = Color.FromArgb(181, 181, 181);
|
||||
label.SymbolColor = Color.FromArgb(181, 181, 181);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 鼠标离开按钮后,颜色改回来
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void uiSymbolLabel1_MouseLeave(object sender, EventArgs e)
|
||||
{
|
||||
UISymbolLabel label = sender as UISymbolLabel;
|
||||
label.BackColor = Color.Transparent;
|
||||
label.ForeColor = Color.FromArgb(153, 153, 153);
|
||||
label.SymbolColor = Color.FromArgb(153, 153, 153);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 安全退出
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void lblExit_Click(object sender, EventArgs e)
|
||||
{
|
||||
//自己关闭,重新打开自己
|
||||
new Thread(() =>
|
||||
{
|
||||
string fileName = Process.GetCurrentProcess().MainModule.FileName;
|
||||
ProcessStartInfo processStartInfo = new ProcessStartInfo(fileName);
|
||||
new Process { StartInfo = processStartInfo }.Start();
|
||||
}).Start();
|
||||
Thread.Sleep(100);
|
||||
Environment.Exit(0);
|
||||
}
|
||||
}
|
||||
}
|
120
DH.RBAC/UserControls/Menus/UserMenuPanel.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
69
DH.RBAC/UserControls/ProgressForm.Designer.cs
generated
Normal file
@ -0,0 +1,69 @@
|
||||
namespace DH.RBAC.UserControls
|
||||
{
|
||||
partial class ProgressForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.uiProcessBar1 = new Sunny.UI.UIProcessBar();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// uiProcessBar1
|
||||
//
|
||||
this.uiProcessBar1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.uiProcessBar1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||
this.uiProcessBar1.Location = new System.Drawing.Point(0, 0);
|
||||
this.uiProcessBar1.MinimumSize = new System.Drawing.Size(70, 3);
|
||||
this.uiProcessBar1.Name = "uiProcessBar1";
|
||||
this.uiProcessBar1.Size = new System.Drawing.Size(704, 41);
|
||||
this.uiProcessBar1.TabIndex = 0;
|
||||
this.uiProcessBar1.Text = "uiProcessBar1";
|
||||
//
|
||||
// ProgressForm
|
||||
//
|
||||
this.AllowShowTitle = false;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 27F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(704, 41);
|
||||
this.ControlBox = false;
|
||||
this.Controls.Add(this.uiProcessBar1);
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Movable = false;
|
||||
this.Name = "ProgressForm";
|
||||
this.Padding = new System.Windows.Forms.Padding(0);
|
||||
this.ShowTitle = false;
|
||||
this.Text = "下载进度";
|
||||
this.TopMost = true;
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private Sunny.UI.UIProcessBar uiProcessBar1;
|
||||
}
|
||||
}
|
132
DH.RBAC/UserControls/ProgressForm.cs
Normal file
@ -0,0 +1,132 @@
|
||||
using Sunny.UI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using DH.RBAC.Utility.Other;
|
||||
namespace DH.RBAC.UserControls
|
||||
{
|
||||
public partial class ProgressForm : UIForm
|
||||
{
|
||||
public delegate void EndEventHandler(object sender);
|
||||
public event EndEventHandler EndHandler;
|
||||
|
||||
|
||||
public delegate void ErrorEventHandler(object sender, Exception ex);
|
||||
public event ErrorEventHandler ErrorHandler;
|
||||
public ProgressForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
CloseForm = new CloseFormDelegate(() =>
|
||||
{
|
||||
this.Close();
|
||||
});
|
||||
}
|
||||
|
||||
public void SetValue(int value)
|
||||
{
|
||||
uiProcessBar1.InvokeProgressValue(value);
|
||||
}
|
||||
|
||||
public delegate void CloseFormDelegate();
|
||||
public CloseFormDelegate CloseForm;
|
||||
|
||||
public string FileName { get; internal set; }
|
||||
|
||||
public void Download(string method, string url, Dictionary<string, string> parms)
|
||||
{
|
||||
Thread thread = new Thread(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(url))
|
||||
{
|
||||
throw new ArgumentNullException("url");
|
||||
}
|
||||
HttpWebRequest request = null;
|
||||
//如果是发送HTTPS请求
|
||||
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((sender, certificate, chain, errors) => { return true; });
|
||||
request = WebRequest.Create(url) as HttpWebRequest;
|
||||
request.ProtocolVersion = HttpVersion.Version10;
|
||||
}
|
||||
else
|
||||
{
|
||||
request = WebRequest.Create(url) as HttpWebRequest;
|
||||
}
|
||||
|
||||
//request.CookieContainer = m_Cookie;
|
||||
request.Method = method;
|
||||
request.ContentType = "application/x-www-form-urlencoded";
|
||||
|
||||
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
|
||||
// 设置参数
|
||||
|
||||
//如果需要POST数据
|
||||
if (!(parms == null || parms.Count == 0))
|
||||
{
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
int i = 0;
|
||||
foreach (string key in parms.Keys)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
buffer.AppendFormat("&{0}={1}", key, parms[key]);
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer.AppendFormat("{0}={1}", key, parms[key]);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
byte[] data = Encoding.UTF8.GetBytes(buffer.ToString());
|
||||
using (Stream stream1 = request.GetRequestStream())
|
||||
{
|
||||
stream1.Write(data, 0, data.Length);
|
||||
}
|
||||
}
|
||||
//发送请求并获取相应回应数据
|
||||
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
|
||||
//直到request.GetResponse()程序才开始向目标网页发送Post请求
|
||||
Stream responseStream = response.GetResponseStream();
|
||||
|
||||
long totalLenght = response.ContentLength;
|
||||
//StartHandler?.Invoke(this, totalLenght);
|
||||
|
||||
long current = 0;
|
||||
//创建写入流
|
||||
FileStream pFileStream = new FileStream(FileName, FileMode.OpenOrCreate);
|
||||
byte[] bArr = new byte[10240];
|
||||
int size = responseStream.Read(bArr, 0, (int)bArr.Length);
|
||||
while (size > 0)
|
||||
{
|
||||
current += size;
|
||||
uiProcessBar1.InvokeProgressValue((int)((current * 1.0 / totalLenght) * 100));
|
||||
pFileStream.Write(bArr, 0, size);
|
||||
size = responseStream.Read(bArr, 0, (int)bArr.Length);
|
||||
}
|
||||
responseStream.Close();
|
||||
pFileStream.Close();
|
||||
this.Invoke(CloseForm, null);
|
||||
EndHandler?.Invoke(this);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.Invoke(CloseForm, null);
|
||||
ErrorHandler?.Invoke(this, ex);
|
||||
}
|
||||
});
|
||||
thread.Start();
|
||||
}
|
||||
}
|
||||
}
|
120
DH.RBAC/UserControls/ProgressForm.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
322
DH.RBAC/Utility/Extension/ExtMethods.cs
Normal file
@ -0,0 +1,322 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using SqlSugar;
|
||||
|
||||
namespace DH.RBAC.Utility.Extension
|
||||
{
|
||||
public class ExtMethods
|
||||
{
|
||||
public static List<SqlFuncExternal> GetExpMethods
|
||||
{
|
||||
get
|
||||
{
|
||||
var expMethods = new List<SqlFuncExternal>();
|
||||
//abs
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Abs",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("ABS({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("ABS({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("abs({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("ABS({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("ABS({0})", expInfo.Args[0].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//sin
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Sin",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("SIN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("SIN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("sin({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("SIN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("SIN({0})", expInfo.Args[0].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//cos
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Cos",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("COS({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("COS({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("cos({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("COS({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("COS({0})", expInfo.Args[0].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//asin
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Asin",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("ASIN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("ASIN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("asin({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("ASIN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("ASIN({0})", expInfo.Args[0].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//acos
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Acos",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("ACOS({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("ACOS({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("acos({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("ACOS({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("ACOS({0})", expInfo.Args[0].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//tan
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Tan",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("TAN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("TAN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("tan({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("TAN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("TAN({0})", expInfo.Args[0].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//atan
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Atan",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("ATAN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("ATAN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("atan({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("ATAN({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("ATAN({0})", expInfo.Args[0].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//atan2
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Atan2",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("ATAN2({0},{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("ATAN({0}/{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("atan2({0},{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("ATAN2({0},{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("ATAN2({0},{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//pow
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Pow",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("POW({0},{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("POWER({0},{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("power({0},{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("POWER({0},{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("POWER({0},{1})", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//sqrt
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Sqrt",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("SQRT({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("SQRT({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("sqrt({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("SQRT({0})", expInfo.Args[0].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("SQRT({0})", expInfo.Args[0].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//GetDistance
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "GetDistance",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("((6378.138 * 2 * ASIN(POW(SIN(({0} * PI() / 180 - {2} * PI() / 180) / 2), 2) + COS({0} * PI() / 180) * COS({2} * PI() / 180) * POW(SIN(({1} * PI() / 180 - {3} * PI() / 180) / 2), 2))) * 1000)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName, expInfo.Args[2].MemberName, expInfo.Args[3].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("((6378.138 * 2 * ASIN(POWER(SIN(({0} * PI() / 180 - {2} * PI() / 180) / 2), 2) + COS({0} * PI() / 180) * COS({2} * PI() / 180) * POWER(SIN(({1} * PI() / 180 - {3} * PI() / 180) / 2), 2))) * 1000)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName, expInfo.Args[2].MemberName, expInfo.Args[3].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("((6378.138 * 2 * ASIN(POWER(SIN(({0} * PI() / 180 - {2} * PI() / 180) / 2), 2) + COS({0} * PI() / 180) * COS({2} * PI() / 180) * POWER(SIN(({1} * PI() / 180 - {3} * PI() / 180) / 2), 2))) * 1000)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName, expInfo.Args[2].MemberName, expInfo.Args[3].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("((6378.138 * 2 * ASIN(POWER(SIN(({0} * PI() / 180 - {2} * PI() / 180) / 2), 2) + COS({0} * PI() / 180) * COS({2} * PI() / 180) * POWER(SIN(({1} * PI() / 180 - {3} * PI() / 180) / 2), 2))) * 1000)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName, expInfo.Args[2].MemberName, expInfo.Args[3].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("((6378.138 * 2 * ASIN(POWER(SIN(({0} * PI() / 180 - {2} * PI() / 180) / 2), 2) + COS({0} * PI() / 180) * COS({2} * PI() / 180) * POWER(SIN(({1} * PI() / 180 - {3} * PI() / 180) / 2), 2))) * 1000)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName, expInfo.Args[2].MemberName, expInfo.Args[3].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//Bd09ToGcj02Lat
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Bd09ToGcj02Lat",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("((SQRT( ({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * SIN(ATAN2(({1} - 0.006), ({0} - 0.0065)) - 0.000003 * COS( ({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0))))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("((SQRT( ({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * SIN(ATAN(({1} - 0.006)/({0} - 0.0065)) - 0.000003 * COS( ({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0))))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("((SQRT( ({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * SIN(ATAN2(({1} - 0.006), ({0} - 0.0065)) - 0.000003 * COS( ({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0))))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("((SQRT( ({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * SIN(ATAN2(({1} - 0.006), ({0} - 0.0065)) - 0.000003 * COS( ({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0))))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("((SQRT( ({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * SIN(ATAN2(({1} - 0.006), ({0} - 0.0065)) - 0.000003 * COS( ({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0))))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//Bd09ToGcj02Lon
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Bd09ToGcj02Lon",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("(SQRT(({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN2(({1} - 0.006), ({0} - 0.0065)) - 0.000003 * COS(({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0)))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("(SQRT(({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN(({1} - 0.006)/({0} - 0.0065)) - 0.000003 * COS(({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0)))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("(SQRT(({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN2(({1} - 0.006), ({0} - 0.0065)) - 0.000003 * COS(({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0)))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("(SQRT(({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN2(({1} - 0.006), ({0} - 0.0065)) - 0.000003 * COS(({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0)))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("(SQRT(({0} - 0.0065) * ({0} - 0.0065) + ({1} - 0.006) * ({1} - 0.006)) - 0.00002 * SIN(({1} - 0.006) * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN2(({1} - 0.006), ({0} - 0.0065)) - 0.000003 * COS(({0} - 0.0065) * (3.14159265358979324 * 3000.0 / 180.0)))", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//Gcj02ToBd09Lat
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Gcj02ToBd09Lat",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * SIN( ATAN2({1},{0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.006)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * SIN( ATAN({1}/{0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.006)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * SIN( ATAN2({1},{0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.006)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * SIN( ATAN2({1},{0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.006)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * SIN( ATAN2({1},{0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.006)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
//Gcj02ToBd09Lon
|
||||
expMethods.Add(new SqlFuncExternal()
|
||||
{
|
||||
UniqueMethodName = "Gcj02ToBd09Lon",
|
||||
MethodValue = (expInfo, dbType, expContext) =>
|
||||
{
|
||||
if (dbType == DbType.MySql)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN2({1}, {0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.0065)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.SqlServer)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN({1}/{0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.0065)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.PostgreSQL)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN2({1}, {0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.0065)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Oracle)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN2({1}, {0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.0065)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else if (dbType == DbType.Sqlite)
|
||||
return string.Format("((SQRT({0} * {0} + {1} * {1}) - 0.00002 * SIN({1} * (3.14159265358979324 * 3000.0 / 180.0))) * COS(ATAN2({1}, {0}) - 0.000003 * COS({0} * (3.14159265358979324 * 3000.0 / 180.0)))+0.0065)", expInfo.Args[0].MemberName, expInfo.Args[1].MemberName);
|
||||
else
|
||||
throw new Exception("未实现");
|
||||
}
|
||||
});
|
||||
return expMethods;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
70
DH.RBAC/Utility/Extension/MyEnvironment.cs
Normal file
@ -0,0 +1,70 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Utility.Extension
|
||||
{
|
||||
public class MyEnvironment
|
||||
{
|
||||
private static string _currentPath;
|
||||
public static void Init(string currentPath)
|
||||
{
|
||||
_currentPath = currentPath;
|
||||
}
|
||||
|
||||
public static string WebRootPath(string path)
|
||||
{
|
||||
return RootPath("/wwwroot" + path);
|
||||
}
|
||||
|
||||
public static string RootPath(string path)
|
||||
{
|
||||
string basePath = "";
|
||||
#if NETFRAMEWORK
|
||||
basePath = AppDomain.CurrentDomain.BaseDirectory.Replace("/", "\\");
|
||||
if (!basePath.EndsWith("\\"))
|
||||
{
|
||||
basePath += "\\";
|
||||
}
|
||||
path = path.Replace("/", "\\");
|
||||
if (path.StartsWith("\\"))
|
||||
{
|
||||
path = path.Substring(1, path.Length - 1);
|
||||
}
|
||||
return basePath + path;
|
||||
#else
|
||||
if (OperatingSystem.IsWindows())
|
||||
{
|
||||
basePath = AppDomain.CurrentDomain.BaseDirectory.Replace("/", "\\");
|
||||
if (!basePath.EndsWith("\\"))
|
||||
{
|
||||
basePath += "\\";
|
||||
}
|
||||
path = path.Replace("/", "\\");
|
||||
if (path.StartsWith("\\"))
|
||||
{
|
||||
path = path.Substring(1, path.Length - 1);
|
||||
}
|
||||
return basePath + path;
|
||||
}
|
||||
else
|
||||
{
|
||||
basePath = AppDomain.CurrentDomain.BaseDirectory.Replace("\\", "/");
|
||||
if (!basePath.EndsWith("/"))
|
||||
{
|
||||
basePath += "/";
|
||||
}
|
||||
path = path.Replace("\\", "/");
|
||||
if (path.StartsWith("/"))
|
||||
{
|
||||
path = path.Substring(1, path.Length - 1);
|
||||
}
|
||||
return basePath + path;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
}
|
108
DH.RBAC/Utility/Other/DESHelper.cs
Normal file
@ -0,0 +1,108 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Utility.Other
|
||||
{
|
||||
public static class DESHelper
|
||||
{
|
||||
#region DES加密解密
|
||||
|
||||
/// <summary>
|
||||
/// 默认密钥。
|
||||
/// </summary>
|
||||
private const string DESENCRYPT_KEY = "hsdjxlzf";
|
||||
|
||||
/// <summary>
|
||||
/// DES加密,使用自定义密钥。
|
||||
/// </summary>
|
||||
/// <param name="text">待加密的明文</param>
|
||||
/// <param name="key">8位字符的密钥字符串</param>
|
||||
/// <returns></returns>
|
||||
public static string DESEncrypt(this string text, string key)
|
||||
{
|
||||
if (key.Length != 8)
|
||||
{
|
||||
key = DESENCRYPT_KEY;
|
||||
}
|
||||
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
|
||||
byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(text);
|
||||
|
||||
byte[] a = ASCIIEncoding.ASCII.GetBytes(key);
|
||||
des.Key = ASCIIEncoding.ASCII.GetBytes(key);
|
||||
des.IV = ASCIIEncoding.ASCII.GetBytes(key);
|
||||
MemoryStream ms = new MemoryStream();
|
||||
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
|
||||
|
||||
cs.Write(inputByteArray, 0, inputByteArray.Length);
|
||||
cs.FlushFinalBlock();
|
||||
|
||||
StringBuilder ret = new StringBuilder();
|
||||
foreach (byte b in ms.ToArray())
|
||||
{
|
||||
ret.AppendFormat("{0:X2}", b);//将第一个参数转换为十六进制数,长度为2,不足前面补0
|
||||
}
|
||||
return ret.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// DES解密,使用自定义密钥。
|
||||
/// </summary>
|
||||
/// <param name="cyphertext">待解密的秘文</param>
|
||||
/// <param name="key">必须是8位字符的密钥字符串(不能有特殊字符)</param>
|
||||
/// <returns></returns>
|
||||
public static string DESDecrypt(this string cyphertext, string key)
|
||||
{
|
||||
if (key.Length != 8)
|
||||
{
|
||||
key = DESENCRYPT_KEY;
|
||||
}
|
||||
if (string.IsNullOrEmpty(cyphertext))
|
||||
return string.Empty;
|
||||
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
|
||||
|
||||
byte[] inputByteArray = new byte[cyphertext.Length / 2];
|
||||
for (int x = 0; x < cyphertext.Length / 2; x++)
|
||||
{
|
||||
int i = (Convert.ToInt32(cyphertext.Substring(x * 2, 2), 16));
|
||||
inputByteArray[x] = (byte)i;
|
||||
}
|
||||
|
||||
des.Key = ASCIIEncoding.ASCII.GetBytes(key);
|
||||
des.IV = ASCIIEncoding.ASCII.GetBytes(key);
|
||||
MemoryStream ms = new MemoryStream();
|
||||
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
|
||||
cs.Write(inputByteArray, 0, inputByteArray.Length);
|
||||
cs.FlushFinalBlock();
|
||||
|
||||
StringBuilder ret = new StringBuilder();
|
||||
|
||||
return System.Text.Encoding.GetEncoding("UTF-8").GetString(ms.ToArray());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// DES加密,使用默认密钥。
|
||||
/// </summary>
|
||||
/// <param name="text">待加密的明文</param>
|
||||
/// <returns></returns>
|
||||
public static string DESEncrypt(this string text)
|
||||
{
|
||||
return DESEncrypt(text, DESENCRYPT_KEY);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// DES解密,使用默认密钥。
|
||||
/// </summary>
|
||||
/// <param name="cyphertext">待解密的秘文</param>
|
||||
/// <returns></returns>
|
||||
public static string DESDecrypt(this string cyphertext)
|
||||
{
|
||||
return DESDecrypt(cyphertext, DESENCRYPT_KEY);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
40
DH.RBAC/Utility/Other/FormHelper.cs
Normal file
@ -0,0 +1,40 @@
|
||||
#if NETFRAMEWORK || WINDOWS
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DH.RBAC.Utility.Other
|
||||
{
|
||||
public class FormHelper
|
||||
{
|
||||
public static Form subForm;
|
||||
|
||||
/// <summary>
|
||||
/// 显示子Form
|
||||
/// </summary>
|
||||
/// <param name="form"></param>
|
||||
public static void ShowSubForm(Form form,UserControl userControl)
|
||||
{
|
||||
//关闭之前的
|
||||
try { if (subForm != null) subForm.Close(); } catch { }
|
||||
//打开现在的
|
||||
subForm = form;
|
||||
form.Show(userControl);
|
||||
|
||||
}
|
||||
|
||||
public static void ShowSubForm(Form form)
|
||||
{
|
||||
//关闭之前的
|
||||
try { if (subForm != null) subForm.Close(); } catch { }
|
||||
//打开现在的
|
||||
subForm = form;
|
||||
form.Show();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
131
DH.RBAC/Utility/Other/JsonHelper.cs
Normal file
@ -0,0 +1,131 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace DH.RBAC.Utility.Other
|
||||
{
|
||||
public static class JsonHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 对象序列化成JSON字符串。
|
||||
/// </summary>
|
||||
/// <param name="obj">序列化对象</param>
|
||||
/// <param name="ignoreProperties">设置需要忽略的属性</param>
|
||||
/// <returns></returns>
|
||||
public static string ToJson(this object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
return string.Empty;
|
||||
IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();
|
||||
timeConverter.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
|
||||
return JsonConvert.SerializeObject(obj, timeConverter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// JSON字符串序列化成对象。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">对象类型</typeparam>
|
||||
/// <param name="json">JSON字符串</param>
|
||||
/// <returns></returns>
|
||||
public static T ToObject<T>(this string json)
|
||||
{
|
||||
//var setting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
|
||||
return json == null ? default(T) : JsonConvert.DeserializeObject<T>(json);//, setting);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// JSON字符串序列化成集合。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">集合类型</typeparam>
|
||||
/// <param name="json">JSON字符串</param>
|
||||
/// <returns></returns>
|
||||
public static List<T> ToList<T>(this string json)
|
||||
{
|
||||
//var setting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
|
||||
return json == null ? null : JsonConvert.DeserializeObject<List<T>>(json);//, setting);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// JSON字符串序列化成DataTable。
|
||||
/// </summary>
|
||||
/// <param name="json">JSON字符串</param>
|
||||
/// <returns></returns>
|
||||
public static DataTable ToTable(this string json)
|
||||
{
|
||||
return json == null ? null : JsonConvert.DeserializeObject<DataTable>(json);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将JSON字符串反序列化成对象
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="baseEntity"></param>
|
||||
/// <param name="strJson"></param>
|
||||
/// <returns></returns>
|
||||
public static T Json2Obj<T>(T baseEntity, string strJson)
|
||||
{
|
||||
return JsonConvert.DeserializeAnonymousType(strJson, baseEntity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将对象转换层JSON字符串
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static string Obj2Json<T>(T data)
|
||||
{
|
||||
return JsonConvert.SerializeObject(data);
|
||||
}
|
||||
|
||||
|
||||
public static List<T> JsonToList<T>(string strJson)
|
||||
{
|
||||
T[] list = JsonConvert.DeserializeObject<T[]>(strJson);
|
||||
return list.ToList();
|
||||
}
|
||||
|
||||
public static T Json2Obj<T>(string strJson)
|
||||
{
|
||||
return JsonConvert.DeserializeObject<T>(strJson);
|
||||
}
|
||||
|
||||
public static DataTable ToDataTable(this string json)
|
||||
{
|
||||
return json.ToTable();
|
||||
}
|
||||
|
||||
public static string FormatJson(this string json)
|
||||
{
|
||||
//格式化json字符串
|
||||
JsonSerializer serializer = new JsonSerializer();
|
||||
TextReader tr = new StringReader(json);
|
||||
JsonTextReader jtr = new JsonTextReader(tr);
|
||||
object obj = serializer.Deserialize(jtr);
|
||||
if (obj != null)
|
||||
{
|
||||
StringWriter textWriter = new StringWriter();
|
||||
JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
|
||||
{
|
||||
Formatting = Formatting.Indented,
|
||||
Indentation = 4,
|
||||
IndentChar = ' '
|
||||
};
|
||||
serializer.Serialize(jsonWriter, obj);
|
||||
return textWriter.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
return json;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
117
DH.RBAC/Utility/Other/MD5Helper.cs
Normal file
@ -0,0 +1,117 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DH.RBAC.Utility.Other
|
||||
{
|
||||
public static class MD5Helper
|
||||
{
|
||||
/// <summary>
|
||||
/// 字符串MD5加密。
|
||||
/// </summary>
|
||||
/// <param name="strOri">需要加密的字符串</param>
|
||||
/// <returns></returns>
|
||||
public static string md5(this string text)
|
||||
{
|
||||
return md5(text, Encoding.Default);
|
||||
}
|
||||
public static string MD5(this string text)
|
||||
{
|
||||
return MD5(text, Encoding.Default);
|
||||
}
|
||||
/// <summary>
|
||||
/// 字符串MD5加密。
|
||||
/// </summary>
|
||||
/// <param name="strOri">需要加密的字符串</param>
|
||||
/// <returns></returns>
|
||||
public static string md5(this string text, Encoding encoder)
|
||||
{
|
||||
// Create a new instance of the MD5CryptoServiceProvider object.
|
||||
System.Security.Cryptography.MD5 md5Hasher = System.Security.Cryptography.MD5.Create();
|
||||
// Convert the input string to a byte array and compute the hash.
|
||||
byte[] data = md5Hasher.ComputeHash(encoder.GetBytes(text));
|
||||
// Create a new Stringbuilder to collect the bytes
|
||||
// and create a string.
|
||||
StringBuilder sBuilder = new StringBuilder();
|
||||
// Loop through each byte of the hashed data
|
||||
// and format each one as a hexadecimal string.
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
{
|
||||
sBuilder.Append(data[i].ToString("x2"));
|
||||
}
|
||||
// Return the hexadecimal string.
|
||||
return sBuilder.ToString().ToLower();
|
||||
}
|
||||
public static string MD5(this string text, Encoding encoder)
|
||||
{
|
||||
return md5(text, encoder).ToUpper();
|
||||
}
|
||||
/// <summary>
|
||||
/// 文件流MD5加密。
|
||||
/// </summary>
|
||||
/// <param name="stream">需要加密的文件流</param>
|
||||
/// <returns></returns>
|
||||
public static string md5(this Stream stream)
|
||||
{
|
||||
MD5 md5serv = MD5CryptoServiceProvider.Create();
|
||||
byte[] buffer = md5serv.ComputeHash(stream);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (byte var in buffer)
|
||||
{
|
||||
sb.Append(var.ToString("x2"));
|
||||
}
|
||||
return sb.ToString().ToLower();
|
||||
}
|
||||
public static string MD5(this Stream stream)
|
||||
{
|
||||
return md5(stream).ToUpper();
|
||||
}
|
||||
|
||||
#region MD5加密
|
||||
/// <summary>
|
||||
/// 字符串MD5加密。
|
||||
/// </summary>
|
||||
/// <param name="strOri">需要加密的字符串</param>
|
||||
/// <returns></returns>
|
||||
public static string MD5Encrypt(this string text)
|
||||
{
|
||||
// Create a new instance of the MD5CryptoServiceProvider object.
|
||||
System.Security.Cryptography.MD5 md5Hasher = System.Security.Cryptography.MD5.Create();
|
||||
// Convert the input string to a byte array and compute the hash.
|
||||
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(text));
|
||||
// Create a new Stringbuilder to collect the bytes
|
||||
// and create a string.
|
||||
StringBuilder sBuilder = new StringBuilder();
|
||||
// Loop through each byte of the hashed data
|
||||
// and format each one as a hexadecimal string.
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
{
|
||||
sBuilder.Append(data[i].ToString("x2"));
|
||||
}
|
||||
// Return the hexadecimal string.
|
||||
return sBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 文件流MD5加密。
|
||||
/// </summary>
|
||||
/// <param name="stream">需要加密的文件流</param>
|
||||
/// <returns></returns>
|
||||
public static string MD5Encrypt(this Stream stream)
|
||||
{
|
||||
MD5 md5serv = MD5CryptoServiceProvider.Create();
|
||||
byte[] buffer = md5serv.ComputeHash(stream);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (byte var in buffer)
|
||||
{
|
||||
sb.Append(var.ToString("x2"));
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
45
DH.RBAC/Utility/Other/PanelScrollHelper.cs
Normal file
@ -0,0 +1,45 @@
|
||||
#if NETFRAMEWORK || WINDOWS
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DH.RBAC.Utility.Other
|
||||
{
|
||||
public class PanelScrollHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 初始化panel
|
||||
/// </summary>
|
||||
/// <param name="panel"></param>
|
||||
public static void InitializePanelScroll(Panel panel)
|
||||
{
|
||||
panel.Click += (obj, arg) => { panel.Select(); };
|
||||
InitializePanelScroll(panel, panel);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 递归初始化panel的内部个容器和控件
|
||||
/// </summary>
|
||||
/// <param name="panel1"></param>
|
||||
/// <param name="panel2"></param>
|
||||
private static void InitializePanelScroll(Control container, Control panelRoot)
|
||||
{
|
||||
foreach (Control control in container.Controls)
|
||||
{
|
||||
if (control is Panel || control is GroupBox || control is SplitContainer || control is TabControl || control is UserControl)
|
||||
{
|
||||
control.Click += (obj, arg) => { panelRoot.Select(); };
|
||||
InitializePanelScroll(control, panelRoot);
|
||||
}
|
||||
else if (control is Label)
|
||||
{
|
||||
control.Click += (obj, arg) => { panelRoot.Select(); };
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
113
DH.RBAC/Utility/Other/ScreenUtils.cs
Normal file
@ -0,0 +1,113 @@
|
||||
#if NETFRAMEWORK || WINDOWS
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DH.RBAC.Utility.Other
|
||||
{
|
||||
public class ScreenUtils
|
||||
{
|
||||
#region Dll引用
|
||||
[DllImport("User32.dll", EntryPoint = "GetDC")]
|
||||
private extern static IntPtr GetDC(IntPtr hWnd);
|
||||
|
||||
[DllImport("User32.dll", EntryPoint = "ReleaseDC")]
|
||||
private extern static int ReleaseDC(IntPtr hWnd, IntPtr hDC);
|
||||
|
||||
[DllImport("gdi32.dll")]
|
||||
public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
|
||||
|
||||
[DllImport("User32.dll")]
|
||||
public static extern int GetSystemMetrics(int hWnd);
|
||||
|
||||
|
||||
[DllImport("User32.dll")]
|
||||
private static extern IntPtr MonitorFromPoint([In] System.Drawing.Point pt, [In] uint dwFlags);
|
||||
|
||||
[DllImport("Shcore.dll")]
|
||||
private static extern IntPtr GetDpiForMonitor([In] IntPtr hmonitor, [In] DpiType dpiType, [Out] out uint dpiX, [Out] out uint dpiY);
|
||||
#endregion
|
||||
|
||||
const int DESKTOPVERTRES = 117;
|
||||
const int DESKTOPHORZRES = 118;
|
||||
|
||||
const int SM_CXSCREEN = 0;
|
||||
const int SM_CYSCREEN = 1;
|
||||
|
||||
/// <summary>
|
||||
/// 获取DPI缩放比例
|
||||
/// </summary>
|
||||
/// <param name="dpiscalex"></param>
|
||||
/// <param name="dpiscaley"></param>
|
||||
public static void GetDPIScale(ref float dpiscalex, ref float dpiscaley)
|
||||
{
|
||||
int x = GetSystemMetrics(SM_CXSCREEN);
|
||||
int y = GetSystemMetrics(SM_CYSCREEN);
|
||||
IntPtr hdc = GetDC(IntPtr.Zero);
|
||||
int w = GetDeviceCaps(hdc, DESKTOPHORZRES);
|
||||
int h = GetDeviceCaps(hdc, DESKTOPVERTRES);
|
||||
ReleaseDC(IntPtr.Zero, hdc);
|
||||
dpiscalex = (float)w / x;
|
||||
dpiscaley = (float)h / y;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取分辨率
|
||||
/// </summary>
|
||||
/// <param name="width">宽</param>
|
||||
/// <param name="height">高</param>
|
||||
private static void GetResolving(ref int width, ref int height)
|
||||
{
|
||||
IntPtr hdc = GetDC(IntPtr.Zero);
|
||||
width = GetDeviceCaps(hdc, DESKTOPHORZRES);
|
||||
height = GetDeviceCaps(hdc, DESKTOPVERTRES);
|
||||
ReleaseDC(IntPtr.Zero, hdc);
|
||||
}
|
||||
|
||||
public static int ScreenCount
|
||||
{
|
||||
get
|
||||
{
|
||||
return Screen.AllScreens.Length;
|
||||
}
|
||||
}
|
||||
|
||||
public static ScreenSize GetScreenSize(int index)
|
||||
{
|
||||
if (index > (ScreenCount - 1))
|
||||
throw new Exception("索引异常");
|
||||
Screen screen = Screen.AllScreens[index];
|
||||
uint width = 0;
|
||||
uint height = 0;
|
||||
GetDpi(screen, DpiType.Effective, out width, out height);
|
||||
double scale = width / 96.0;
|
||||
return new ScreenSize { Left = (int)(screen.Bounds.X / scale), Top = screen.Bounds.Y, Width = (int)(screen.Bounds.Width / scale), Height = (int)(screen.Bounds.Height / scale), Scale = scale };
|
||||
}
|
||||
|
||||
public static void GetDpi(Screen screen, DpiType dpiType, out uint dpiX, out uint dpiY)
|
||||
{
|
||||
var pnt = new System.Drawing.Point(screen.Bounds.Left + 800, screen.Bounds.Top + 600);
|
||||
var mon = MonitorFromPoint(pnt, 2);
|
||||
GetDpiForMonitor(mon, dpiType, out dpiX, out dpiY);
|
||||
}
|
||||
|
||||
}
|
||||
public enum DpiType
|
||||
{
|
||||
Effective = 0,
|
||||
Angular = 1,
|
||||
Raw = 2,
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class ScreenSize
|
||||
{
|
||||
public int Left { get; set; }
|
||||
public int Top { get; set; }
|
||||
public int Width { get; set; }
|
||||
public int Height { get; set; }
|
||||
public double Scale { get; set; }
|
||||
}
|
||||
}
|
||||
#endif
|