修改界面交互

master
mzhifa 1 year ago
parent 8cc06bb9bd
commit d63cb761a9

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

@ -17,8 +17,20 @@ namespace StartServerWPF.Modules.Main
public void RegisterTypes(IContainerRegistry containerRegistry) public void RegisterTypes(IContainerRegistry containerRegistry)
{ {
containerRegistry.RegisterSingleton<MainViewModel>(); containerRegistry.RegisterForNavigation<MainView>();
containerRegistry.RegisterForNavigation<RealTimeWaveformView>();
containerRegistry.RegisterForNavigation<WaveformPlayBackView>();
containerRegistry.RegisterForNavigation<SetParamView>();
containerRegistry.RegisterForNavigation<LogManagementView>();
containerRegistry.RegisterForNavigation<FilesWatcherView>();
containerRegistry.RegisterDialog<SetParamDialog>(); containerRegistry.RegisterDialog<SetParamDialog>();
containerRegistry.RegisterDialog<LoginViewDialog>();
containerRegistry.RegisterSingleton<MainViewModel>();
containerRegistry.RegisterSingleton<LoginViewDialogViewModel>();
} }
} }
} }

@ -0,0 +1,16 @@
using Prism.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StartServerWPF.Modules.Main.models
{
public class LoadingPayload
{
public bool IsShow { get; set; }
public string Message { get; set; }
}
public class LoadingEvent : PubSubEvent<LoadingPayload> { }
}

@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Prism.Mvvm;
namespace StartServerWPF.Modules.Main.Models
{
public class ProcessModel:BindableBase
{
private string proName;
/// <summary>
/// 程序路径
/// </summary>
public string ProName
{
get { return proName; }
set
{
SetProperty(ref proName, value);
}
}
private string proPath;
/// <summary>
/// 程序路径
/// </summary>
public string ProPath
{
get { return proPath; }
set { proPath = value; }
}
private string processTile;
/// <summary>
/// 启动参数
/// </summary>
public string ProcessTile
{
get { return processTile; }
set {
SetProperty(ref processTile, value);
}
}
private string monitorTime;
/// <summary>
/// 启动参数
/// </summary>
public string MonitorTime
{
get { return monitorTime; }
set
{
SetProperty(ref monitorTime, value);
}
}
private string processStatus;
/// <summary>
/// 启动参数
/// </summary>
public string ProcessStatus
{
get { return processStatus; }
set
{
SetProperty(ref processStatus, value);
}
}
private int pid;
public int Pid
{
get { return pid; }
set {
SetProperty(ref pid, value);
}
}
}
}

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StartServerWPF.Modules.Main.Models
{
public class ProcessingInformationModel
{
private string processMes;
/// <summary>
/// 启动参数
/// </summary>
public string ProcessMes
{
get { return processMes; }
set
{
processMes = value;
}
}
private string monitorTime;
/// <summary>
/// 启动参数
/// </summary>
public string MonitorTime
{
get { return monitorTime; }
set
{
monitorTime= value;
}
}
}
}

@ -32,7 +32,7 @@ namespace StartServerWPF.Modules.Main.Models
/// <summary> /// <summary>
/// Monitor(网页显示)程序 /// Monitor(网页显示)程序
/// </summary> /// </summary>
public ProcessInfo proMonitor { get; set; } //public ProcessInfo proMonitor { get; set; }
/// <summary> /// <summary>
/// 波形tools /// 波形tools
/// </summary> /// </summary>

@ -0,0 +1,40 @@
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StartServerWPF.Modules.Main.models
{
public class WatcherFileModel : BindableBase
{
private string createTime;
private WatcherChangeTypes changeType;
private string fullPath;
private string name;
private string data;
public string CreateTime
{
get { return createTime; }
set { SetProperty(ref createTime, value); }
}
public WatcherChangeTypes ChangeType { get => changeType; set => SetProperty(ref changeType, value); }
public string FullPath { get => fullPath; set => SetProperty(ref fullPath, value); }
public string Name { get => name; set => SetProperty(ref name, value); }
public string Data { get => data; set => SetProperty(ref data, value); }
private bool isSend;
public bool IsSend
{
get { return isSend; }
set { SetProperty(ref isSend, value); }
}
}
}

@ -19,6 +19,17 @@ namespace StartServerWPF.Modules.Main
get { return proName; } get { return proName; }
set { proName = value; } set { proName = value; }
} }
private string proTitle;
/// <summary>
/// 程序路径
/// </summary>
[JsonProperty]
public string ProTitle
{
get { return proTitle; }
set { proTitle = value; }
}
private string proPath; private string proPath;
/// <summary> /// <summary>
/// 程序路径 /// 程序路径

@ -6,6 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<None Remove="Fonts\iconfont.ttf" /> <None Remove="Fonts\iconfont.ttf" />
<None Remove="Images\background.jpg" />
<None Remove="Images\calendar.png" /> <None Remove="Images\calendar.png" />
<None Remove="Images\Union.png" /> <None Remove="Images\Union.png" />
</ItemGroup> </ItemGroup>
@ -24,7 +25,17 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Resource Include="Fonts\iconfont.ttf" /> <Resource Include="Fonts\iconfont.ttf" />
<Resource Include="Images\background.jpg" />
<Resource Include="Images\calendar.png" /> <Resource Include="Images\calendar.png" />
<Resource Include="Images\Union.png" /> <Resource Include="Images\Union.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Page Update="Views\WaveformPlayBackView.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
<Page Update="Views\SetParamView.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
</Page>
</ItemGroup>
</Project> </Project>

@ -0,0 +1,278 @@
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using StartServerWPF.Modules.Main;
using StartServerWPF.Modules.Main.models;
using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
using System.Windows;
using System.Windows.Threading;
namespace StartServerWPF.Modules.Main.ViewModels
{
internal class FilesWatcherViewModel : BindableBase
{
public FilesWatcherViewModel(IEventAggregator ea)
{
string filter = "*.txt";
string str = File.ReadAllText("systemconfig.json");
WatcherPath = AppDomain.CurrentDomain.BaseDirectory;
InitializeParams(filter);
StartTime = DateTime.Now;
}
private string watcherPath;
public string WatcherPath
{
get { return watcherPath; }
set { SetProperty(ref watcherPath, value); }
}
private ObservableCollection<WatcherFileModel> dataList = new ObservableCollection<WatcherFileModel>();
public ObservableCollection<WatcherFileModel> DataList
{
get { return dataList; }
set { SetProperty(ref dataList, value); }
}
private DateTime startTime;
public DateTime StartTime { get => startTime; set => SetProperty(ref startTime, value); }
private int selectedIndex;
public int SelectedIndex
{
get { return selectedIndex; }
set { SetProperty(ref selectedIndex, value); }
}
public DelegateCommand StartCommand => new(Start);
public DelegateCommand StopCommand => new(Stop);
private void Start()
{
WatchStartOrSopt(true);
StartTime=DateTime.Now;
// _websocketClient.SendMes(JsonSerializer.Serialize(new CSUserSubscribeMessage { type = CSMessage.subscribe }));
}
private void Stop()
{
WatchStartOrSopt(false);
// _websocketClient.SendMes(JsonSerializer.Serialize(new CSUserSubscribeMessage { type = CSMessage.unsubscribe }));
}
public DelegateCommand FilePathSaveCommand => new(() =>
{
System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog();
fbd.SelectedPath = WatcherPath;
fbd.Description = "请选择文件路径";
fbd.ShowNewFolderButton = true;
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if (fbd.SelectedPath != WatcherPath)
{
WatcherPath = fbd.SelectedPath;
// systemConfig.FilePath = WatcherPath;
var options = new JsonSerializerOptions {
// 整齐打印
WriteIndented = true,
//重新编码,解决中文乱码问题
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
};
// string message = JsonSerializer.Serialize(systemConfig, options);
if (File.Exists(settingDataPath))
{
// File.WriteAllText(settingDataPath, message);
}
}
}
});
private string settingDataPath = "systemconfig.json";
private void InitializeParams(string fileFilter)
{
SelectedIndex = 1;
//如果设置的目录不存在设置到根目录
if (!File.Exists(WatcherPath))
{
WatcherPath = AppDomain.CurrentDomain.BaseDirectory;
}
watcher = new FileSystemWatcher();
//初始化监听
watcher.BeginInit();
//设置需要监听的更改类型(如:文件或者文件夹的属性,文件或者文件夹的创建时间;NotifyFilters枚举的内容)
watcher.NotifyFilter = NotifyFilters.Attributes
| NotifyFilters.CreationTime
| NotifyFilters.DirectoryName
| NotifyFilters.FileName
| NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.Security
| NotifyFilters.Size;
//设置监听的路径
watcher.Path = WatcherPath;
watcher.Changed += new FileSystemEventHandler(Watcher_Changed);
// watcher.Created += Watcher_Created;
watcher.Deleted += new FileSystemEventHandler(Watcher_Deleted);
watcher.Renamed += new RenamedEventHandler(Watcher_Renamed);
watcher.Error += OnError;
//设置监听文件类型
watcher.Filter = fileFilter;
//设置是否监听子目录
watcher.IncludeSubdirectories = false;
//设置是否启用监听
watcher.EnableRaisingEvents = false;
watcher.EndInit();
}
private string DateDiff(DateTime DateTime1, DateTime DateTime2)
{
string dateDiff = null;
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new
TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
if (ts.Days > 0)
{
dateDiff += ts.Days.ToString() + "天";
}
if (ts.Hours > 0)
{
dateDiff += ts.Hours.ToString() + "小时";
}
if (ts.Minutes > 0)
{
dateDiff += ts.Minutes.ToString() + "分钟";
}
dateDiff += ts.Seconds.ToString() + "秒";
return dateDiff;
}
private void OnError(object sender, ErrorEventArgs e)
{
}
private void Watcher_Changed(object sender, System.IO.FileSystemEventArgs e)
{
// DateTime dt = DateTime.Now;
// string tmp = dt.Hour.ToString() + "时" + dt.Minute.ToString() + "分" + dt.Second.ToString() + "秒" + dt.Millisecond.ToString() + "毫秒,目录发生变化\r\n";
DateTime lastWriteTime = File.GetLastWriteTime(e.FullPath);
watcher.EnableRaisingEvents = false;
Debug.WriteLine($"最后修改时间:{lastWriteTime}");
string lastLine = File.ReadAllLines(e.FullPath).Last().Trim();
var str= dataList.Where(f => f.Data == lastLine).FirstOrDefault();
if (!string.IsNullOrWhiteSpace(lastLine)
&& str==null)
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
DataList.Add(new WatcherFileModel
{
CreateTime = DateTime.Now.ToString(),
ChangeType = e.ChangeType,
Name = e.Name,
FullPath = e.FullPath,
Data = lastLine,
IsSend = false
});
//CSDevicePublish cSDevicePublish = new CSDevicePublish()
//{
// type = CSMessage.publish,
// message = lastLine,
// serialNumber = DataList.Count,
//};
//string jsonStr = JsonSerializer.Serialize(cSDevicePublish);
//_websocketClient.SendMes(jsonStr);
}));
}
watcher.EnableRaisingEvents = true;
}
private void Watcher_Renamed(object sender, RenamedEventArgs e)
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => {
DateTime dt = DateTime.Now;
string tmp = dt.Hour.ToString() + "时" + dt.Minute.ToString() + "分" + dt.Second.ToString() + "秒" + dt.Millisecond.ToString() + "毫秒,目录发生变化\r\n";
tmp += "改变类型 :" + e.ChangeType.ToString() + "\r\n"; ;
tmp += "文件全称:" + e.FullPath + "\r\n";
//DataList.Add(new WatcherFileModel
//{
// CreateTime = DateTime.Now.ToString(),
// ChangeType = e.ChangeType,
// Name = e.Name,
// FullPath = e.FullPath,
// Data = tmp
//});
}));
}
private void Watcher_Created(object sender, FileSystemEventArgs e)
{
DateTime dt = DateTime.Now;
string tmp = dt.Hour.ToString() + "时" + dt.Minute.ToString() + "分" + dt.Second.ToString() + "秒" + dt.Millisecond.ToString() + "毫秒,目录发生变化\r\n";
tmp += "改变类型 :" + e.ChangeType.ToString() + "\r\n"; ;
tmp += "文件全称:" + e.FullPath + "\r\n";
//DataList.Add(new WatcherFileModel
//{
// CreateTime = DateTime.Now.ToString(),
// ChangeType = e.ChangeType,
// Name = e.Name,
// FullPath = e.FullPath,
// Data = tmp
//});
}
private void Watcher_Deleted(object sender, FileSystemEventArgs e)
{
DateTime dt = DateTime.Now;
string tmp = dt.Hour.ToString() + "时" + dt.Minute.ToString() + "分" + dt.Second.ToString() + "秒" + dt.Millisecond.ToString() + "毫秒,目录发生变化\r\n";
tmp += "改变类型 :" + e.ChangeType.ToString() + "\r\n"; ;
tmp += "文件全称:" + e.FullPath + "\r\n";
// DataList.Add(new WatcherFileModel
//{
// CreateTime= DateTime.Now.ToString(),
// ChangeType=e.ChangeType,
// Name=e.Name,
// FullPath= e.FullPath,
// Data=tmp
//});
}
/// <summary>
/// 启动或者停止监听
/// </summary>
/// <param name="IsEnableRaising">True:启用监听,False:关闭监听</param>
private void WatchStartOrSopt(bool IsEnableRaising)
{
watcher.EnableRaisingEvents = IsEnableRaising;
}
private FileSystemWatcher watcher = new FileSystemWatcher();
}
}

@ -0,0 +1,183 @@
using HandyControl.Data;
using Microsoft.Win32;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input;
namespace StartServerWPF.Modules.Main.ViewModels
{
public class LogManagementViewModel : BindableBase
{
IEventAggregator _ea;
private readonly IDialogService _dialogService;
public LogManagementViewModel(
IRegionManager regionManager,
IEventAggregator ea, IDialogService dialogService)
{
this._dialogService = dialogService;
InitInfo();
}
private string _title = "日志查看";
public string Title => _title;
public ICommand UploadCommand { get; set; }
public DelegateCommand QueryDataCommand => new(QueryData);
public DelegateCommand ResetQueryDataCommand => new(InitInfo);
public DelegateCommand HFWarningCommand => new(HFWarning);
private void InitInfo()
{
StartTime = DateTime.Today;
EndTime = DateTime.Now;
QueryData();
}
public void Refresh()
{
QueryData();
}
public void QueryData()
{
Task.Run(() =>
{
//this.ShowLoading();
//var logsDTO = _systemLogBLL.Query(StartTime, EndTime);
//int index = logsDTO.Count;
//MaxCountPage = (index % countPerPage == 0 ? index / countPerPage : index / countPerPage + 1);
//_totalDataList = logsDTO;
//DataList = _totalDataList.Take(countPerPage).ToList();
//this.HideLoading();
});
}
private void HFWarning()
{
DialogParameters param = new DialogParameters();
param.Add("type", 0);
// param.Add("menu", currentMenu);
ShowEditDialog(param);
}
private void ShowEditDialog(DialogParameters param)
{
_dialogService.ShowDialog(
"HFLogDialog",
param,
new Action<IDialogResult>(result =>
{
if (result != null && result.Result == ButtonResult.OK)
{
System.Windows.MessageBox.Show("数据已保存", "提示");
Refresh();
}
}));
}
public void WriteTxt(FileStream fs)
{
try
{
// foreach (var item in _totalDataList)
{
// string mesg = item.CreateTime + "\t" + item.UserName + "\t" + item.UserId + "\t" + item.Message;
//获得字节数组
// mesg = mesg + "\n";
// byte[] data = System.Text.Encoding.Default.GetBytes(mesg);
//开始写入
// fs.Write(data, 0, data.Length);
}
//清空缓冲区、关闭流
fs.Flush();
fs.Close();
}
catch
{
Console.WriteLine("WriteError");
}
}
private DateTime _StartTime;
public DateTime StartTime
{
get => _StartTime;
set => SetProperty(ref _StartTime, value);
}
private DateTime _EndTime;
public DateTime EndTime
{
get => _EndTime;
set => SetProperty(ref _EndTime, value);
}
//private List<SystemLogDTO> _DataList;
//public List<SystemLogDTO> DataList
//{
// get { return _DataList; }
// set { SetProperty(ref _DataList, value); }
//}
///// <summary>
///// 所有数据
///// </summary>
//private List<SystemLogDTO> _totalDataList;
/// <summary>
/// 页码
/// </summary>
private int _pageIndex = 1;
/// <summary>
/// 页码
/// </summary>
public int PageIndex
{
get => _pageIndex;
set => SetProperty(ref _pageIndex, value);
}
/// <summary>
/// 页码
/// </summary>
private int _MaxCountPage = 15;
/// <summary>
/// 页码
/// </summary>
public int MaxCountPage
{
get => _MaxCountPage;
set => SetProperty(ref _MaxCountPage, value);
}
private int countPerPage = 15;
/// <summary>
/// 页码改变命令
/// </summary>
public DelegateCommand<FunctionEventArgs<int>> PageUpdatedCmd => new(PageUpdated);
/// <summary>
/// 页码改变
/// </summary>
private void PageUpdated(FunctionEventArgs<int> info)
{
// DataList = _totalDataList.Skip((info.Info - 1) * countPerPage).Take(countPerPage).ToList();
}
}
}

@ -0,0 +1,112 @@
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using StartServerWPF.Modules.Main.models;
using StartServerWPF.Modules.Main.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Security.Principal;
using System.Text;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace StartServerWPF.Modules.Main.ViewModels
{
public class LoginViewDialogViewModel : BindableBase, IDialogAware
{
public LoginViewDialogViewModel(WebsocketClient websocketClient)
{
this._websocketClient = websocketClient;
}
private string _title = "应用列表";
public string Title => _title;
private string account = "admin";
public string Account
{
get { return account; }
set { SetProperty(ref account, value); }
}
private string password = "123";
public string Password
{
get { return password; }
set { SetProperty(ref password, value); }
}
public event Action<IDialogResult> RequestClose;
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed() { }
public void OnDialogOpened(IDialogParameters parameters)
{
// _title = "编辑" + _title;
var _type = parameters.GetValue<int>("type");
// _title = (_type == 0 ? "新增" : "修改") + _title;
}
private VpnInfo _mainModel = new VpnInfo();
public VpnInfo MainModel
{
get => _mainModel;
set { SetProperty(ref _mainModel, value); }
}
private DateTime _moniTime ;
private readonly WebsocketClient _websocketClient;
public DateTime MoniTime
{
get => _moniTime;
set { SetProperty(ref _moniTime, value); }
}
public DelegateCommand LoginCommand => new(() => {
OnShowLoading(new LoadingPayload { IsShow = true });
_websocketClient.SiginServer(Account, Password);
});
public void CloseDialog(DialogResult dialogResult)
{
RequestClose?.Invoke(dialogResult);
}
public ICommand CancelCommand
{
get => new DelegateCommand(() =>
{
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
private string isLoadingVisibile = "Hidden";
public string IsLoadingVisibile
{
get { return isLoadingVisibile; }
set { SetProperty(ref isLoadingVisibile, value); }
}
private string _loadingMessage;
public string LoadingMessage
{
get { return _loadingMessage; }
set { SetProperty(ref _loadingMessage, value); }
}
public void OnShowLoading(LoadingPayload msg)
{
this.IsLoadingVisibile = msg.IsShow ? "Visible" : "Hidden";
this.LoadingMessage = msg.Message;
}
}
}

@ -1,63 +1,138 @@
using Prism.Commands; using Org.BouncyCastle.Crypto.Modes;
using Prism.Commands;
using Prism.Mvvm; using Prism.Mvvm;
using Prism.Services.Dialogs; using Prism.Services.Dialogs;
using StartServerWPF.Modules.Main.models;
using StartServerWPF.Modules.Main.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows; using System.Windows;
using System.Collections.ObjectModel; using System.Windows.Controls;
using StartServerWPF.Modules.Main.Models;
using System.Windows.Media;
using System.Timers;
using System.Windows.Threading; using System.Windows.Threading;
using Org.BouncyCastle.Crypto.Modes.Gcm;
using System.Net.Http.Json;
using System.Text.Json.Serialization;
using System.Text.Json;
using System.Text.Encodings.Web;
using System.Text.Unicode;
using System.Security.Principal;
namespace StartServerWPF.Modules.Main.ViewModels namespace StartServerWPF.Modules.Main.ViewModels
{ {
public class MainViewModel : BindableBase public class MainViewModel : BindableBase
{ {
public MainViewModel(IDialogService dialogService, WebsocketClient websocket) public MainViewModel(IDialogService dialogService, WebsocketClient websocket, LoginViewDialogViewModel loginViewDialogViewModel)
{ {
Message = "View A from your Prism Module"; Message = "View A" ;
Console.WriteLine(System.Environment.CurrentDirectory + "\\" + JsonParser.systemConfigPath); Console.WriteLine(System.Environment.CurrentDirectory + "\\" + JsonParser.systemConfigPath);
sc = JsonParser.ReadSystemJsonFile(JsonParser.systemConfigPath); sc = JsonParser.ReadSystemJsonFile(JsonParser.systemConfigPath);
int moniTimeInd = sc.proMonitor.ProParams.IndexOf("-btime"); // int moniTimeInd = sc.proMonitor.ProParams.IndexOf("-btime");
string moniTimeStr = sc.proMonitor.ProParams.Substring(moniTimeInd + 7); // string moniTimeStr = sc.proMonitor.ProParams.Substring(moniTimeInd + 7);
int moniTimeIndEnd = moniTimeStr.IndexOf(">"); // int moniTimeIndEnd = moniTimeStr.IndexOf(">");
moniTimeStr = moniTimeStr.Substring(0, moniTimeIndEnd - 1); //moniTimeStr = moniTimeStr.Substring(0, moniTimeIndEnd - 1);
MoniStartTime = DateTime.Parse(moniTimeStr); // MoniStartTime = DateTime.Parse(moniTimeStr);
InitializeParams(); InitializeParams();
JsonParser.UpdateApmsJson(sc.proApms.ProPath + "apms.json", sc.vpnInfo.DataSavePath); JsonParser.UpdateApmsJson(sc.proApms.ProPath + "apms.json", sc.vpnInfo.DataSavePath);
JsonParser.UpdateRecvJson(sc.proRecv.ProPath + "gw.recvftp.json", sc.vpnInfo.DataSavePath); JsonParser.UpdateRecvJson(sc.proRecv.ProPath + "gw.recvftp.json", sc.vpnInfo.DataSavePath);
sc.proMonitor.ProParams = JsonParser.CreateMonitorStartParam(sc.vpnInfo.DataSavePath, MoniStartTime); // sc.proMonitor.ProParams = JsonParser.CreateMonitorStartParam(sc.vpnInfo.DataSavePath, MoniStartTime);
StartTime = DateTime.Now; StartTime = DateTime.Now;
// labelStartTime.Text = "启动时间:" + StartTime.ToString(); // labelStartTime.Text = "启动时间:" + StartTime.ToString();
remDb = new MySqlHelper(sc.remoteDb); remDb = new MySqlHelper(sc.remoteDb);
Console.WriteLine(System.Environment.CurrentDirectory); Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(sc.remoteDb.ServerAddress + "\t" + sc.remoteDb.ServerPort Console.WriteLine(sc.remoteDb.ServerAddress + "\t" + sc.remoteDb.ServerPort
+ "\t" + sc.remoteDb.UserName + "\t" + sc.remoteDb.Password); + "\t" + sc.remoteDb.UserName + "\t" + sc.remoteDb.Password);
this._dialogService = dialogService; this._dialogService = dialogService;
this._websocket = websocket; this._websocket = websocket;
this._loginViewDialogViewModel = loginViewDialogViewModel;
_websocket.WebSocketInit(sc.remoteDb.WebsocketUrl); _websocket.WebSocketInit(sc.remoteDb.WebsocketUrl);
CurrentItemsList = ApmsProcessSliceList; CurrentItemsList = ApmsProcessSliceList;
_websocket.SiginServer(sc.remoteDb.Account,sc.remoteDb.Pwd); _websocket.WebsocketError = WebSocket_Error;
_websocket.WebSocketMessageReceived = WebSocket4Net_MessageReceived;
DialogParameters param = new DialogParameters();
param.Add("type", 1);// 编辑
_dialogService.ShowDialog(
"LoginViewDialog",
param,
new Action<IDialogResult>(result =>
{
if (result != null && result.Result == ButtonResult.OK)
{
IntilVPN();
SetControlstatus();
}
else
{
Environment.Exit(0);
}
}));
} }
private void WebSocket4Net_MessageReceived(string message)
{
Debug.WriteLine($"服务端回复数据:{message}");
using (JsonDocument document = JsonDocument.Parse(message))
{
JsonElement root = document.RootElement;
if (root.TryGetProperty("type", out JsonElement dataElement))
{
string type = dataElement.ToString();
switch (type)
{
case CSMessage.sigin:
var user = JsonSerializer.Deserialize<SCUserSigin>(message, new JsonSerializerOptions
{
// 整齐打印
WriteIndented = true,
//重新编码,解决中文乱码问题
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
});
_loginViewDialogViewModel.OnShowLoading(new LoadingPayload { IsShow = false });
Application.Current.Dispatcher.Invoke(() =>
{
HandyControl.Controls.MessageBox.Show(user.message, "提示");
if (user.code == 200)
{
_loginViewDialogViewModel.CloseDialog(new DialogResult(ButtonResult.OK));
}
});
// this.HideLoading();
break;
case CSMessage.subscribe:
var sub = JsonSerializer.Deserialize<SCUserSubscribeMessage>(message, new JsonSerializerOptions
{
// 整齐打印
WriteIndented = true,
//重新编码,解决中文乱码问题
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
});
break;
case CSMessage.publish:
var publish = JsonSerializer.Deserialize<SCDevicePublish>(message, new JsonSerializerOptions
{
// 整齐打印
WriteIndented = true,
//重新编码,解决中文乱码问题
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
});
break;
default:
break;
}
}
}
}
void WebSocket_Error(SuperSocket.ClientEngine.ErrorEventArgs e)
{
//出错后隐藏加载窗口
Debug.WriteLine("websocket_Error:" + e.Exception.ToString());
}
#region 属性 #region 属性
private string _message; private string _message;
@ -115,9 +190,9 @@ namespace StartServerWPF.Modules.Main.ViewModels
get { return isIndeterminate; } get { return isIndeterminate; }
set { SetProperty(ref isIndeterminate, value); } set { SetProperty(ref isIndeterminate, value); }
} }
private ObservableCollection<string> reciveDataSource=new ObservableCollection<string>(); private ObservableCollection<ProcessModel> reciveDataSource=new ObservableCollection<ProcessModel>();
public ObservableCollection<string> ReciveDataSource public ObservableCollection<ProcessModel> ReciveDataSource
{ {
get { return reciveDataSource; } get { return reciveDataSource; }
set { reciveDataSource = value; } set { reciveDataSource = value; }
@ -143,37 +218,40 @@ namespace StartServerWPF.Modules.Main.ViewModels
set => SetProperty(ref proMonInterval, value); set => SetProperty(ref proMonInterval, value);
} }
private ObservableCollection<string> _OutPutItemsSource = new ObservableCollection<string>(); private ObservableCollection<ProcessingInformationModel> _OutPutItemsSource = new ObservableCollection<ProcessingInformationModel>();
public ObservableCollection<string> OutPutItemsSource public ObservableCollection<ProcessingInformationModel> OutPutItemsSource
{ {
get => _OutPutItemsSource; get => _OutPutItemsSource;
set => SetProperty(ref _OutPutItemsSource, value); set => SetProperty(ref _OutPutItemsSource, value);
} }
private List<string> _apmsProcessSliceList= new List<string>(); private List<ProcessingInformationModel> _apmsProcessSliceList= new List<ProcessingInformationModel>();
public List<string> ApmsProcessSliceList public List<ProcessingInformationModel> ApmsProcessSliceList
{ {
get => _apmsProcessSliceList; get => _apmsProcessSliceList;
set=> SetProperty(ref _apmsProcessSliceList, value); set=> SetProperty(ref _apmsProcessSliceList, value);
} }
private List<string> _apmsEventList = new List<string>(); private List<ProcessingInformationModel> _apmsEventList = new List<ProcessingInformationModel>();
public List<string> ApmsEventList public List<ProcessingInformationModel> ApmsEventList
{ {
get => _apmsEventList; get => _apmsEventList;
set => SetProperty(ref _apmsEventList, value); set => SetProperty(ref _apmsEventList, value);
} }
private List<string> _toolsProcessSliceList = new List<string>(); private List<ProcessingInformationModel> _toolsProcessSliceList = new List<ProcessingInformationModel>() {
public List<string> ToolsProcessSliceList new ProcessingInformationModel { ProcessMes = "outLine.Data", MonitorTime = DateTime.Now.ToString()},
new ProcessingInformationModel { ProcessMes = "outLine.Data666", MonitorTime = DateTime.Now.ToString()}
};
public List<ProcessingInformationModel> ToolsProcessSliceList
{ {
get => _toolsProcessSliceList; get => _toolsProcessSliceList;
set => SetProperty(ref _toolsProcessSliceList, value); set => SetProperty(ref _toolsProcessSliceList, value);
} }
private List<string> _toolsEventList = new List<string>(); private List<ProcessingInformationModel> _toolsEventList = new List<ProcessingInformationModel>();
public List<string> ToolsEventList public List<ProcessingInformationModel> ToolsEventList
{ {
get => _toolsEventList; get => _toolsEventList;
set => SetProperty(ref _toolsEventList, value); set => SetProperty(ref _toolsEventList, value);
@ -186,25 +264,25 @@ namespace StartServerWPF.Modules.Main.ViewModels
return; return;
} }
list.Add(t1); list.Add(t1);
if (list.Count > 10) if (list.Count > 20)
{ {
T item = list[0]; T item = list[0];
list.RemoveAt(0); list.RemoveAt(0);
} }
} }
#endregion #endregion
private List<string> CurrentItemsList; private List<ProcessingInformationModel> CurrentItemsList;
#region 事件 #region 事件
public DelegateCommand LoadedCommand => new(Loaded); public DelegateCommand LoadedCommand => new(Loaded);
public DelegateCommand UnloadedCommand => new(Unloaded); public DelegateCommand UnloadedCommand => new(Unloaded);
public DelegateCommand ConnectVPNCommand => new(ConnectVPN); public DelegateCommand<object> ConnectVPNCommand => new(ConnectVPN);
public DelegateCommand DisConnectVPNCommand => new(DisConnectVPN); public DelegateCommand DisConnectVPNCommand => new(DisConnectVPN);
public DelegateCommand GetVPNStatusCommand => new(GetVPNStatus); public DelegateCommand GetVPNStatusCommand => new(GetVPNStatus);
public DelegateCommand SetVPNParaCommand => new(SetVPNPara); public DelegateCommand SetVPNParaCommand => new(SetVPNPara);
public DelegateCommand DisplayLogCommand => new(DisplayLog); public DelegateCommand DisplayLogCommand => new(DisplayLog);
public DelegateCommand OneKeyStartCommand => new(OneKeyStart); public DelegateCommand<object> StartCommand => new(Start);
public DelegateCommand OneKeyStopCommand => new(OneKeyStop); // public DelegateCommand OneKeyStopCommand => new(OneKeyStop);
public DelegateCommand DisplayRealWavesCommand => new(DisplayRealWaves); public DelegateCommand DisplayRealWavesCommand => new(DisplayRealWaves);
public DelegateCommand QueryDataCommand => new(QueryData); public DelegateCommand QueryDataCommand => new(QueryData);
public DelegateCommand InsertDataCommand => new(InsertData); public DelegateCommand InsertDataCommand => new(InsertData);
@ -239,8 +317,6 @@ namespace StartServerWPF.Modules.Main.ViewModels
private void Loaded() private void Loaded()
{ {
IntilVPN();
SetControlstatus();
} }
public void Unloaded() public void Unloaded()
@ -254,7 +330,18 @@ namespace StartServerWPF.Modules.Main.ViewModels
//WriteSerLog(sc.vpnInfo.SystemLogPath + JsonParser.systemLogFileName, logStr); //WriteSerLog(sc.vpnInfo.SystemLogPath + JsonParser.systemLogFileName, logStr);
OneKeyStop(); OneKeyStop();
} }
private void ConnectVPN(object obj)
{
var cBox = obj as CheckBox;
if ((bool)cBox.IsChecked)
{
ConnectVPN();
}
else
{
DisConnectVPN();
}
}
private void ConnectVPN() private void ConnectVPN()
{ {
vpn.CreateOrUpdateVPN(sc.vpnInfo.VpnName, sc.vpnInfo.VpnIP); vpn.CreateOrUpdateVPN(sc.vpnInfo.VpnName, sc.vpnInfo.VpnIP);
@ -312,9 +399,22 @@ namespace StartServerWPF.Modules.Main.ViewModels
{ {
Process.Start("explorer.exe", sc.vpnInfo.SystemLogPath); Process.Start("explorer.exe", sc.vpnInfo.SystemLogPath);
} }
private void Start( object obj)
{
var cBox = obj as CheckBox;
if((bool)cBox.IsChecked)
{
OneKeyStart();
}
else
{
OneKeyStop();
}
}
private void OneKeyStart() private void OneKeyStart()
{ {
ReciveDataSource.Clear();
foreach (var item in sc.GetType().GetProperties()) foreach (var item in sc.GetType().GetProperties())
{ {
var pro = item.GetValue(sc) as ProcessInfo; var pro = item.GetValue(sc) as ProcessInfo;
@ -322,10 +422,17 @@ namespace StartServerWPF.Modules.Main.ViewModels
{ {
StartTime = DateTime.Now; StartTime = DateTime.Now;
pro.Pid= StartProcess(pro); pro.Pid= StartProcess(pro);
if (sc.proServer.Pid < 32) ReciveDataSource.Add(new ProcessModel
{ {
ReciveDataSource.Add( pro.ProName+"服务器程序启动失败:" + StartTime.ToString()); ProName = pro.ProName,
} ProcessTile = pro.ProTitle,
MonitorTime = DateTime.Now.ToString(),
ProcessStatus = sc.proServer.Pid == 0 ? "正常运行" : "未运行"
}) ;
//if (sc.proServer.Pid < 32)
//{
// ReciveDataSource.Add( pro.ProName+"服务器程序启动失败:" + StartTime.ToString());
//}
Thread.Sleep(10); Thread.Sleep(10);
} }
} }
@ -338,7 +445,7 @@ namespace StartServerWPF.Modules.Main.ViewModels
timer1.Interval = TimeSpan.FromSeconds(ProMonInterval); timer1.Interval = TimeSpan.FromSeconds(ProMonInterval);
timer1.Start(); timer1.Start();
ReciveDataSource.Clear();
} }
private void OneKeyStop() private void OneKeyStop()
@ -349,18 +456,14 @@ namespace StartServerWPF.Modules.Main.ViewModels
if (pro != null) if (pro != null)
{ {
int indexPro = KillProcess(pro); int indexPro = KillProcess(pro);
if (indexPro > -1) var model= ReciveDataSource.Where(x => x.ProcessTile == pro.ProName).FirstOrDefault();
{ if (model == null) continue;
ReciveDataSource.Add(pro.ProName + "结束成功"); model.MonitorTime= DateTime.Now.ToString();
} model.ProcessStatus = "已停止";
else
{
ReciveDataSource.Add(pro.ProName + "结束失败");
}
} }
} }
ReciveDataSource.Add("服务停止于:" + DateTime.Now.ToString()); // ReciveDataSource.Add("服务停止于:" + DateTime.Now.ToString());
timer1.Stop(); timer1.Stop();
IsIndeterminate = false; IsIndeterminate = false;
string logStr = DateTime.Now.ToString("s") + "\t服务器程序关闭"; string logStr = DateTime.Now.ToString("s") + "\t服务器程序关闭";
@ -450,6 +553,7 @@ namespace StartServerWPF.Modules.Main.ViewModels
private DispatcherTimer timer1= new DispatcherTimer(); private DispatcherTimer timer1= new DispatcherTimer();
private readonly IDialogService _dialogService; private readonly IDialogService _dialogService;
private readonly WebsocketClient _websocket; private readonly WebsocketClient _websocket;
private readonly LoginViewDialogViewModel _loginViewDialogViewModel;
public void InitializeParams() public void InitializeParams()
{ {
@ -511,11 +615,11 @@ namespace StartServerWPF.Modules.Main.ViewModels
{ {
if (pro.MainModule.ModuleName.Contains(sc.proApms.ProName)) if (pro.MainModule.ModuleName.Contains(sc.proApms.ProName))
{ {
AddItems(ApmsProcessSliceList, outLine.Data); AddItems(ApmsProcessSliceList, new ProcessingInformationModel { ProcessMes= outLine.Data, MonitorTime=DateTime.Now.ToString() });
} }
else if (pro.MainModule.ModuleName.Contains(sc.proTools.ProName)) else if (pro.MainModule.ModuleName.Contains(sc.proTools.ProName))
{ {
AddItems(ToolsProcessSliceList, outLine.Data); AddItems(ToolsProcessSliceList, new ProcessingInformationModel { ProcessMes = outLine.Data, MonitorTime = DateTime.Now.ToString() });
} }
} }
} }
@ -526,11 +630,11 @@ namespace StartServerWPF.Modules.Main.ViewModels
{ {
if (pro.MainModule.ModuleName.Contains(sc.proApms.ProName)) if (pro.MainModule.ModuleName.Contains(sc.proApms.ProName))
{ {
AddItems(ApmsEventList, outLine.Data); AddItems(ApmsEventList, new ProcessingInformationModel { ProcessMes = outLine.Data, MonitorTime = DateTime.Now.ToString() });
} }
else if (pro.MainModule.ModuleName.Contains(sc.proTools.ProName)) else if (pro.MainModule.ModuleName.Contains(sc.proTools.ProName))
{ {
AddItems(ToolsEventList, outLine.Data); AddItems(ToolsEventList, new ProcessingInformationModel { ProcessMes = outLine.Data, MonitorTime = DateTime.Now.ToString() });
} }
} }
} }
@ -554,7 +658,7 @@ namespace StartServerWPF.Modules.Main.ViewModels
private int StartProcess(ProcessInfo proInfo) private int StartProcess(ProcessInfo proInfo)
{ {
bool res= CMDStartProcess(proInfo); bool res= CMDStartProcess(proInfo);
int seInd = res ? 37 : 1; int seInd = res ? 37 : 0;
//int seInd = ShellExecute(IntPtr.Zero, new StringBuilder("open"), new StringBuilder(proInfo.ProName + ".exe") //int seInd = ShellExecute(IntPtr.Zero, new StringBuilder("open"), new StringBuilder(proInfo.ProName + ".exe")
// , new StringBuilder(proInfo.ProParams), new StringBuilder(proInfo.ProPath), proInfo.ShowState); // , new StringBuilder(proInfo.ProParams), new StringBuilder(proInfo.ProPath), proInfo.ShowState);
return seInd; return seInd;
@ -653,26 +757,23 @@ namespace StartServerWPF.Modules.Main.ViewModels
private void timer1_Tick(object? sender, EventArgs e) private void timer1_Tick(object? sender, EventArgs e)
{ {
ReciveDataSource.Clear();
ReciveDataSource.Add(DateTime.Now.ToString());
foreach (var item in sc.GetType().GetProperties()) foreach (var item in sc.GetType().GetProperties())
{ {
var pro = item.GetValue(sc) as ProcessInfo; var pro = item.GetValue(sc) as ProcessInfo;
if (pro != null) if (pro != null)
{ {
int sfp = FindProcess(pro); int sfp = FindProcess(pro);
var model = ReciveDataSource.Where(x => x.ProcessTile == pro.ProName).FirstOrDefault();
if (sfp == 0) if (sfp == 0)
{ {
ReciveDataSource.Add(pro.ProName+"服务器程序运行正常"); model.ProcessStatus = "正常运行";
} }
else else
{ {
ReciveDataSource.Add(pro.ProName + "服务器程序未运行"); model.ProcessStatus = "重启中";
Thread.Sleep(2); Thread.Sleep(2);
StartProcess(pro); StartProcess(pro);
Thread.Sleep(20); Thread.Sleep(20);
ReciveDataSource.Add(pro.ProName + "服务器程序重启成功");
string logStr = DateTime.Now.ToString("s") + "\t服务器程序" + pro.ProName + "重启"; string logStr = DateTime.Now.ToString("s") + "\t服务器程序" + pro.ProName + "重启";
WriteSerLog(sc.vpnInfo.SystemLogPath + JsonParser.systemLogFileName, logStr); WriteSerLog(sc.vpnInfo.SystemLogPath + JsonParser.systemLogFileName, logStr);

@ -0,0 +1,29 @@
using Prism.Commands;
using Prism.Events;
using Prism.Ioc;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Threading;
namespace StartServerWPF.Modules.Main.ViewModels
{
public class RealTimeWaveformViewModel : BindableBase
{
IContainerProvider _containerProvider;
public RealTimeWaveformViewModel(
IRegionManager regionManager,
IContainerProvider containerProvider)
{
_containerProvider = containerProvider;
}
}
}

@ -0,0 +1,98 @@
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using StartServerWPF.Modules.Main.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace StartServerWPF.Modules.Main.ViewModels
{
public class SetParamViewModel : BindableBase
{
public SetParamViewModel(MainViewModel mainViewModel)
{
_systemConfig = mainViewModel.sc;
MainModel = _systemConfig.vpnInfo;
MoniTime = mainViewModel.MoniStartTime;
}
private string _title = "应用列表";
public string Title => _title;
private SystemConfig _systemConfig;
private VpnInfo _mainModel = new VpnInfo();
public VpnInfo MainModel
{
get => _mainModel;
set { SetProperty(ref _mainModel, value); }
}
private DateTime _moniTime ;
public DateTime MoniTime
{
get => _moniTime;
set { SetProperty(ref _moniTime, value); }
}
public DelegateCommand FilePathSaveCommand=> new(()=>
{
updateJson = false;
System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog();
fbd.SelectedPath = MainModel.DataSavePath;
fbd.ShowNewFolderButton = true;
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
MainModel.DataSavePath = fbd.SelectedPath;
if (MainModel.DataSavePath != _systemConfig.vpnInfo.DataSavePath)
{
updateJson = true;
}
}
});
public DelegateCommand LogPathSaveCommand=> new(() =>
{
System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog();
fbd.SelectedPath = System.Environment.CurrentDirectory + "\\" + MainModel.SystemLogPath;
fbd.ShowNewFolderButton = true;
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
MainModel.SystemLogPath = fbd.SelectedPath;
}
});
bool updateJson = false;
public ICommand ConfirmCommand
{
get => new DelegateCommand(() =>
{
// 确认操作
// 数据校验关键字段不能为空、年龄做数字区间的校验、做UserName的唯一检查自定义特性检查
if (string.IsNullOrEmpty(MainModel.VpnName) || string.IsNullOrEmpty(MainModel.VpnIP))
{
MessageBox.Show("内容不能为空", "提示", MessageBoxButton.OK);
return;
}
if (MessageBox.Show("确认修改?", "参数设置", MessageBoxButton.OKCancel,
MessageBoxImage.Exclamation) == MessageBoxResult.OK)
{
JsonParser.WriteSystemConfigFile(JsonParser.systemConfigPath, _systemConfig);
if (updateJson)
{
JsonParser.UpdateRecvJson(_systemConfig.proRecv.ProPath + _systemConfig.proRecv.JsonPath, _systemConfig.vpnInfo.DataSavePath);
JsonParser.UpdateApmsJson(_systemConfig.proApms.ProPath + _systemConfig.proApms.JsonPath, _systemConfig.vpnInfo.DataSavePath);
}
// RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
});
}
}
}

@ -32,6 +32,8 @@ namespace StartServerWPF.Modules.Main.ViewModels
this._dialogService = dialogService; this._dialogService = dialogService;
//var global = containerProvider.Resolve<GlobalEntity>();// 注册一个单例 //var global = containerProvider.Resolve<GlobalEntity>();// 注册一个单例
// ea.GetEvent<LoginEvent>().Subscribe(OnLogin, ThreadOption.UIThread); // ea.GetEvent<LoginEvent>().Subscribe(OnLogin, ThreadOption.UIThread);
Menus=new ObservableCollection<MenuItemModel>();
FillMenus(Menus);
} }
#region 事件 #region 事件
@ -68,27 +70,26 @@ namespace StartServerWPF.Modules.Main.ViewModels
// } // }
//} //}
///递归 ///递归
/// /// <summary>
private void FillMenus(ObservableCollection<MenuItemModel> menus, int parentId) /// 递归
/// </summary>
/// <param name="menus"></param>
private void FillMenus(ObservableCollection<MenuItemModel> menus)
{ {
// var sub = origMenus.Where(m => m.ParentId == parentId).OrderBy(o => o.Index); for (int i = 0; i < menuNames.Count; i++)
{
//if (sub.Count() > 0) MenuItemModel menuItem = new MenuItemModel(_regionManager)
//{ {
// foreach (var item in sub) MenuHeader = menuNames[i],
// { MenuIcon = "\ue63a",
// MenuItemModel mm = new MenuItemModel(_regionManager) TargetView = viewName[i],
// { Children = new ObservableCollection<MenuItemModel>(),
// MenuHeader = item.MenuHeader, IsExpanded = true,
// MenuIcon = item.MenuIcon, };
// TargetView = item.TargetView menus.Add(menuItem);
// };
// menus.Add(mm);
// FillMenus(mm.Children = new ObservableCollection<MenuItemModel>(), item.MenuId);
// }
//}
} }
}
List<string> menuNames = new List<string>() {"首页","实时波形","波形回放","设置","日志","文件监控" };
List<string> viewName = new List<string>() { "MainView", "RealTimeWaveformView", "WaveformPlayBackView", "SetParamView", "LogManagementView","FilesWatcherView" };
} }
} }

@ -0,0 +1,29 @@
using Prism.Commands;
using Prism.Events;
using Prism.Ioc;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Threading;
namespace StartServerWPF.Modules.Main.ViewModels
{
public class WaveformPlayBackViewModel : BindableBase
{
IContainerProvider _containerProvider;
public WaveformPlayBackViewModel(
IRegionManager regionManager,
IContainerProvider containerProvider)
{
_containerProvider = containerProvider;
}
}
}

@ -0,0 +1,46 @@
<UserControl x:Class="StartServerWPF.Modules.Main.Views.FilesWatcherView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:StartServerWPF.Modules.Main.Views"
mc:Ignorable="d"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
d:DesignHeight="450" d:DesignWidth="800">
<StackPanel>
<TextBlock Text="监控文件路径:" Grid.Row="0" Grid.Column="0" />
<DockPanel Grid.Row="1">
<Button Content="..." Command="{Binding FilePathSaveCommand}" DockPanel.Dock="Right" HorizontalAlignment="Right" Height="28" Width="30"/>
<TextBox Text="{Binding WatcherPath}" IsReadOnly="True" DockPanel.Dock="Right" FontSize="10"/>
</DockPanel>
<Grid>
<ListView x:Name="listView" ItemsSource="{Binding DataList}" Grid.Column="1">
<ListView.View>
<GridView>
<GridViewColumn Header="时间" DisplayMemberBinding="{Binding CreateTime, StringFormat=yyyy-MM-dd HH:mm:ss}" />
<GridViewColumn Header="内容" Width="300" >
<!--模板化单元格内容-->
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Foreground="CornflowerBlue" MinWidth="200" Cursor="Hand" Text="{Binding Data}" IsReadOnly="True" BorderBrush="Transparent" Background="Transparent" TextWrapping="Wrap"></TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="文件名" Width="80" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="修改类型" Width="80" DisplayMemberBinding="{Binding ChangeType}" />
<GridViewColumn Header="是否发送" >
<!--模板化单元格内容-->
<GridViewColumn.CellTemplate>
<DataTemplate>
<ToggleButton IsEnabled="False" IsChecked="{Binding IsSend}" HorizontalAlignment="Center" Margin="5,4" Style="{StaticResource ToggleButtonSwitch}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</StackPanel>
</UserControl>

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace StartServerWPF.Modules.Main.Views
{
/// <summary>
/// FilesWatcherView.xaml 的交互逻辑
/// </summary>
public partial class FilesWatcherView : UserControl
{
public FilesWatcherView()
{
InitializeComponent();
}
}
}

@ -0,0 +1,149 @@
<UserControl x:Class="StartServerWPF.Modules.Main.Views.Loading"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="100">
<UserControl.Resources>
<KeySpline x:Key="keySpline">0.1,0.4,0.9,0.6</KeySpline>
<Storyboard x:Key="keyFrameStoryboard1">
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="e1" Storyboard.TargetProperty="Opacity" RepeatBehavior="Forever">
<DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="rt1" Storyboard.TargetProperty="Angle" RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:2.5" Value="360" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:5" Value="720" KeySpline="{StaticResource keySpline}"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="720"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="e2" Storyboard.TargetProperty="Opacity" BeginTime="0:0:0.2" RepeatBehavior="Forever">
<DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="rt2" Storyboard.TargetProperty="Angle" BeginTime="0:0:0.2" RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:2.5" Value="360" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:5" Value="720" KeySpline="{StaticResource keySpline}"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="720"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="e3" Storyboard.TargetProperty="Opacity" BeginTime="0:0:0.4" RepeatBehavior="Forever">
<DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="rt3" Storyboard.TargetProperty="Angle" BeginTime="0:0:0.4" RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:2.5" Value="360" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:5" Value="720" KeySpline="{StaticResource keySpline}"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="720"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="e4" Storyboard.TargetProperty="Opacity" BeginTime="0:0:0.6" RepeatBehavior="Forever">
<DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="rt4" Storyboard.TargetProperty="Angle" BeginTime="0:0:0.6" RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:2.5" Value="360" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:5" Value="720" KeySpline="{StaticResource keySpline}"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="720"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="e5" Storyboard.TargetProperty="Opacity" BeginTime="0:0:0.8" RepeatBehavior="Forever">
<DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="rt5" Storyboard.TargetProperty="Angle" BeginTime="0:0:0.8" RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:2.5" Value="360" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:5" Value="720" KeySpline="{StaticResource keySpline}"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="720"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="e6" Storyboard.TargetProperty="Opacity" BeginTime="0:0:1" RepeatBehavior="Forever">
<DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="0"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="rt6" Storyboard.TargetProperty="Angle" BeginTime="0:0:1" RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:2.5" Value="360" KeySpline="{StaticResource keySpline}"/>
<SplineDoubleKeyFrame KeyTime="0:0:5" Value="720" KeySpline="{StaticResource keySpline}"/>
<DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="720"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
<UserControl.Triggers>
<EventTrigger RoutedEvent="UserControl.Loaded">
<BeginStoryboard Storyboard="{StaticResource keyFrameStoryboard1}"/>
</EventTrigger>
</UserControl.Triggers>
<Grid Height="140">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid Height="70" Width="70">
<Border RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<RotateTransform Angle="0" x:Name="rt1"/>
</Border.RenderTransform>
<Ellipse Fill="Orange" Width="8" Height="8" VerticalAlignment="Bottom" Name="e1"/>
</Border>
<Border RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<RotateTransform Angle="0" x:Name="rt2"/>
</Border.RenderTransform>
<Ellipse Fill="Orange" Width="8" Height="8" VerticalAlignment="Bottom" Name="e2"/>
</Border>
<Border RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<RotateTransform Angle="0" x:Name="rt3"/>
</Border.RenderTransform>
<Ellipse Fill="Orange" Width="8" Height="8" VerticalAlignment="Bottom" Name="e3"/>
</Border>
<Border RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<RotateTransform Angle="0" x:Name="rt4"/>
</Border.RenderTransform>
<Ellipse Fill="Orange" Width="8" Height="8" VerticalAlignment="Bottom" Name="e4"/>
</Border>
<Border RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<RotateTransform Angle="0" x:Name="rt5"/>
</Border.RenderTransform>
<Ellipse Fill="Orange" Width="8" Height="8" VerticalAlignment="Bottom" Name="e5"/>
</Border>
<Border RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<RotateTransform Angle="0" x:Name="rt6"/>
</Border.RenderTransform>
<Ellipse Fill="Orange" Width="8" Height="8" VerticalAlignment="Bottom" Name="e6"/>
</Border>
</Grid>
<TextBlock Text="{Binding Message,RelativeSource={RelativeSource AncestorType=UserControl,Mode=FindAncestor}}"
Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="#333"
Margin="0,10"/>
<TextBlock Grid.Row="2" Margin="0,10" Foreground="Orange" VerticalAlignment="Center" HorizontalAlignment="Center"
Visibility="Collapsed">
<Hyperlink Command="{Binding CancelLoadingCommand}">取消</Hyperlink>
</TextBlock>
</Grid>
</UserControl>

@ -0,0 +1,24 @@
using System.Windows;
using System.Windows.Controls;
namespace StartServerWPF.Modules.Main.Views
{
/// <summary>
/// Loading.xaml 的交互逻辑
/// </summary>
public partial class Loading : UserControl
{
public string Message
{
get { return (string)GetValue(MessageProperty); }
set { SetValue(MessageProperty, value); }
}
public static readonly DependencyProperty MessageProperty =
DependencyProperty.Register("Message", typeof(string), typeof(Loading), new PropertyMetadata("正在处理"));
public Loading()
{
InitializeComponent();
}
}
}

@ -0,0 +1,90 @@
<UserControl x:Class="StartServerWPF.Modules.Main.Views.LogManagementView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
<!--<ResourceDictionary Source="/Detection.platform.Assets;component/Styles/ButtonStyles.xaml"/>
<ResourceDictionary Source="/Detection.platform.Assets;component/Styles/TextBoxStyle.xaml"/>-->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Grid.Row="0" Margin="50,0" HorizontalAlignment="Left">
<TextBlock Text="启始时间:" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<hc:DateTimePicker Margin="0,0,10,0" SelectedDateTime="{Binding StartTime}" Height="30"></hc:DateTimePicker>
<TextBlock Text="结束时间:" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<hc:DateTimePicker SelectedDateTime="{Binding EndTime}" Height="30"></hc:DateTimePicker>
<Button Content="查看" Background="#FF009DFF" Foreground="White"
Width="70" Margin="5,0"
Command="{Binding QueryDataCommand}"/>
</StackPanel>
<Grid Grid.Row="2">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Border Background="#EEE"/>
<Grid Background="#FF2A323B" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="应用" VerticalAlignment="Center" Grid.Column="0" Foreground="White" HorizontalAlignment="Center"/>
<TextBlock Text="状态" VerticalAlignment="Center" Grid.Column="1" Foreground="White"/>
<TextBlock Text="时间" VerticalAlignment="Center" Grid.Column="3" Foreground="White"/>
<TextBlock Text="操作" VerticalAlignment="Center" Grid.Column="4" Foreground="White"/>
</Grid>
<ItemsControl Grid.Row="1" ItemsSource="{Binding DataList}">
<ItemsControl.ItemTemplate>
<DataTemplate >
<Border BorderBrush="#F7F9FA" BorderThickness="0,0,0,1" Background="Transparent">
<Grid Height="30" Background="Transparent" Name="root">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding CreateTime}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Text="{Binding UserName}" VerticalAlignment="Center" Grid.Column="1"/>
<TextBlock Text="{Binding Message}" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="2"/>
</Grid>
</Border>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="root" Property="Background" Value="#F7F9FA"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<hc:Pagination Grid.Row="2" HorizontalAlignment="Center" FontSize="15" MaxPageCount="{Binding MaxCountPage}" PageIndex="{Binding PageIndex}" IsJumpEnabled="True">
<hc:Interaction.Triggers>
<hc:EventTrigger EventName="PageUpdated">
<hc:EventToCommand Command="{Binding PageUpdatedCmd}" PassEventArgsToCommand="True" />
</hc:EventTrigger>
</hc:Interaction.Triggers>
</hc:Pagination>
</Grid>
</Grid>
</UserControl>

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace StartServerWPF.Modules.Main.Views
{
/// <summary>
/// AddFileDialog.xaml 的交互逻辑
/// </summary>
public partial class LogManagementView : UserControl
{
public LogManagementView()
{
InitializeComponent();
}
}
}

@ -0,0 +1,45 @@
<UserControl x:Class="StartServerWPF.Modules.Main.Views.LoginViewDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:local="clr-namespace:StartServerWPF.Modules.Main.Views"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<prism:Dialog.WindowStyle>
<Style TargetType="Window">
<Setter Property="Width" Value="800"/>
<Setter Property="Height" Value="500"/>
<Setter Property="WindowStyle" Value="ToolWindow"/>
<Setter Property="ResizeMode" Value="NoResize"/>
</Style>
</prism:Dialog.WindowStyle>
<Grid >
<Image Source="../Images/background.jpg" Stretch="UniformToFill"/>
<StackPanel Margin="10" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="预警系统管理后台" Foreground="White" FontSize="20" Margin="0,0,0,60" HorizontalAlignment="Center"/>
<Border Background="White" CornerRadius="10" >
<StackPanel Margin="20" Width="200">
<DockPanel >
<TextBlock Text="用户名:" VerticalAlignment="Center"/>
<TextBox Text="{Binding Account}" DockPanel.Dock="Right" />
</DockPanel>
<DockPanel Margin="0,20,0,20" >
<TextBlock Text="密 码:" VerticalAlignment="Center"/>
<hc:PasswordBox UnsafePassword="{Binding Password,UpdateSourceTrigger=PropertyChanged}" IsSafeEnabled="False" ShowClearButton="True" ShowEyeButton="True" DockPanel.Dock="Right"/>
</DockPanel>
<CheckBox Content="保持登录状态" IsChecked="True" Margin="0,10,0,10"/>
<Button Grid.Row="2" Content="登录" Command="{Binding LoginCommand}" Background="#FF2B9FF3" Foreground="White" Width="80"/>
</StackPanel>
</Border>
</StackPanel>
<Grid Background="WhiteSmoke" Opacity="0.5" Visibility="{Binding IsLoadingVisibile}">
<local:Loading Message="{Binding LoadingMessage}"/>
</Grid>
</Grid>
</UserControl>

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace StartServerWPF.Modules.Main.Views
{
/// <summary>
/// Login.xaml 的交互逻辑
/// </summary>
public partial class LoginViewDialog : UserControl
{
public LoginViewDialog()
{
InitializeComponent();
}
}
}

@ -6,9 +6,17 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="800" d:DesignHeight="800" d:DesignWidth="1200" Background="LightGray"
xmlns:prism="http://prismlibrary.com/" xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True" > prism:ViewModelLocator.AutoWireViewModel="True" >
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/StartServerWPF.Modules.Main;component/Styles/BaseResources.xaml"/>
<!--<ResourceDictionary Source="/Detection.platform.Assets;component/Styles/ButtonStyles.xaml"/>-->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<i:Interaction.Triggers> <i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded"> <i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding Path=LoadedCommand}"/> <i:InvokeCommandAction Command="{Binding Path=LoadedCommand}"/>
@ -17,68 +25,66 @@
<i:InvokeCommandAction Command="{Binding Path=UnloadedCommand}"/> <i:InvokeCommandAction Command="{Binding Path=UnloadedCommand}"/>
</i:EventTrigger> </i:EventTrigger>
</i:Interaction.Triggers> </i:Interaction.Triggers>
<Grid> <Grid >
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="350"/> <ColumnDefinition Width="550"/>
<ColumnDefinition Width="23*"/> <ColumnDefinition Width="23*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="150"/> <RowDefinition Height="10*"/>
<RowDefinition Height="150*"/> <RowDefinition Height="10*"/>
<RowDefinition Height="20"/> <RowDefinition Height="10"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<GroupBox Header="网络控制" Style="{StaticResource GroupBoxOriginal}" BorderThickness="3" Margin="1"> <Border Margin="10" CornerRadius="5" Background="White">
<Grid> <Grid >
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="系统控制" FontSize="22" Margin="20,10,0,10"/>
<Grid Grid.Row="1" Margin="110,0,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/> <RowDefinition Height="1*"/>
<RowDefinition Height="1*"/> <RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="5*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/> <ColumnDefinition Width="auto"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="2*"/> <ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<RadioButton GroupName="con" IsChecked="{Binding VPNIsConnect}" x:Name="rtnConnect" Content="连接" Grid.Row="0" VerticalAlignment="Center"> <TextBlock Text="连接VPN:" VerticalAlignment="Center" FontSize="20" />
<i:Interaction.Triggers> <CheckBox IsChecked="{Binding VPNIsConnect}" Command="{Binding ConnectVPNCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}}" Style="{StaticResource ToggleButtonSwitch}" x:Name="rtnConnect" Grid.Column="1" HorizontalAlignment="Left" FontSize="20">
<i:EventTrigger EventName="Checked"> </CheckBox>
<i:InvokeCommandAction Command="{Binding ConnectVPNCommand}"/> <TextBlock Grid.Row="1" Grid.Column="0" FontSize="20" Text="连接状态:" VerticalAlignment="Center"/>
</i:EventTrigger> <TextBlock Grid.Row="1" Grid.Column="1" FontSize="20" Text="{Binding VPNStatus}" Foreground="{Binding VPNStatusForeColor}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</i:Interaction.Triggers> <Button Grid.Row="1" Grid.Column="2" FontSize="15" Content="检查状态" Command="{Binding GetVPNStatusCommand}" HorizontalAlignment="Right" Margin="0,0,10,0"/>
</RadioButton> <TextBlock Grid.Row="2" Grid.Column="0" FontSize="20" Text="IP 地址:" VerticalAlignment="Center" />
<RadioButton GroupName="con" Content="断开连接" Grid.Column="1" VerticalAlignment="Center" IsChecked="True"> <TextBlock Grid.Row="2" Grid.Column="1" FontSize="20" Text="{Binding VpnIP}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<i:Interaction.Triggers> <!--<Button Content="参数设置" Grid.Column="2" Grid.Row="2" Command="{Binding SetVPNParaCommand}" VerticalAlignment="Center"/>-->
<i:EventTrigger EventName="Checked"> <!--<Button Content="运行日志" Grid.Row="2" Grid.Column="2" Command="{Binding DisplayLogCommand}" VerticalAlignment="Center"/>-->
<i:InvokeCommandAction Command="{Binding DisConnectVPNCommand}"/> <Grid Grid.Row="4" Grid.ColumnSpan="3" IsEnabled="{Binding ElementName=rtnConnect,Path=IsChecked}">
</i:EventTrigger>
</i:Interaction.Triggers>
</RadioButton>
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center" >
<Button Content="检查状态" Command="{Binding GetVPNStatusCommand}" Margin="5,0,5,0"/>
<TextBlock Text="{Binding VPNStatus}" Foreground="{Binding VPNStatusForeColor}" VerticalAlignment="Center"/>
</StackPanel>
<Button Content="参数设置" Grid.Row="1" Command="{Binding SetVPNParaCommand}" VerticalAlignment="Center"/>
<Button Content="运行日志" Grid.Row="1" Grid.Column="1" Command="{Binding DisplayLogCommand}" VerticalAlignment="Center"/>
<TextBlock Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" Margin="5,0,5,0">
<Run Text="本机IP:"/>
<Run Text="{Binding VpnIP}"/>
</TextBlock>
</Grid>
</GroupBox>
<GroupBox Header="服务器控制" IsEnabled="{Binding ElementName=rtnConnect,Path=IsChecked}" Style="{StaticResource GroupBoxOriginal}" BorderThickness="3" Margin="1" Grid.Row="1" >
<Grid Margin="10">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="40"/> <RowDefinition Height="40"/>
<RowDefinition Height="40"/> <RowDefinition Height="40"/>
<RowDefinition Height="30"/> <RowDefinition Height="30"/>
<RowDefinition Height="100*"/> <RowDefinition Height="35"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<RadioButton GroupName="start" Content="一键启动" Grid.Column="0" VerticalAlignment="Center"> <TextBlock Text="启动服务:" VerticalAlignment="Center" FontSize="20"/>
<CheckBox IsChecked="False" Command="{Binding StartCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}}" Style="{StaticResource ToggleButtonSwitch}" Grid.Column="1" HorizontalAlignment="Left">
</CheckBox>
<TextBlock Grid.Row="1" Grid.Column="0" FontSize="20" Text="启动时间:" VerticalAlignment="Center"/>
<TextBlock Grid.Row="1" Grid.Column="1" FontSize="20" Text="{Binding StartTime,StringFormat=yyyy-MM-dd HH:mm:ss}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<TextBlock Grid.Row="2" Grid.Column="0" FontSize="20" Text="运行时间:" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="1" FontSize="20" Text="{Binding RunTime,StringFormat=yyyy-MM-dd HH:mm:ss}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<TextBlock Grid.Row="3" Grid.Column="0" FontSize="20" Text="监隔间隔(s):" VerticalAlignment="Center"/>
<ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding IntervalTimesSource}" SelectedIndex="{Binding selectedIndex}" Text="{Binding ProMonInterval}" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="20"/>
<!--<RadioButton GroupName="start" Content="一键启动" Grid.Column="0" VerticalAlignment="Center">
<i:Interaction.Triggers> <i:Interaction.Triggers>
<i:EventTrigger EventName="Checked"> <i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding OneKeyStartCommand}"/> <i:InvokeCommandAction Command="{Binding OneKeyStartCommand}"/>
@ -91,48 +97,139 @@
<i:InvokeCommandAction Command="{Binding OneKeyStopCommand}"/> <i:InvokeCommandAction Command="{Binding OneKeyStopCommand}"/>
</i:EventTrigger> </i:EventTrigger>
</i:Interaction.Triggers> </i:Interaction.Triggers>
</RadioButton> </RadioButton>-->
<Button Content="实时波形" Command="{Binding DisplayRealWavesCommand}" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Right"/> <!--<Button Content="实时波形" Command="{Binding DisplayRealWavesCommand}" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Right"/>-->
<TextBlock Grid.Row="1" VerticalAlignment="Center" Grid.ColumnSpan="3"> </Grid>
<Run Text="启动时间:"/> </Grid>
<Run Text="{Binding StartTime,StringFormat=yyyy-MM-dd HH:mm:ss}"/> </Grid>
</TextBlock> </Border>
<TextBlock Grid.Row="2" Grid.ColumnSpan="3" VerticalAlignment="Center"> <Border Grid.Row="1" Margin="10" CornerRadius="5" Background="White">
<Run Text="运行时间:"/> <StackPanel >
<Run Text="{Binding RunTime,StringFormat=yyyy-MM-dd HH:mm:ss}"/> <TextBlock Text="程序运行状态" FontSize="22" Margin="20,10,0,10"/>
</TextBlock> <Grid Margin="10">
<DockPanel Grid.Row="2" Grid.Column="2" > <DataGrid ItemsSource="{Binding ReciveDataSource}" Background="White" IsReadOnly="True" AutoGenerateColumns="False">
<ComboBox DockPanel.Dock="Right" ItemsSource="{Binding IntervalTimesSource}" SelectedIndex="{Binding selectedIndex}" Text="{Binding ProMonInterval}" VerticalAlignment="Center"/> <DataGrid.Columns>
<TextBlock Text="监隔间隔(s):" DockPanel.Dock="Right" VerticalAlignment="Center"/> <DataGridTextColumn Header="程序" Width="120" Binding="{Binding ProcessTile}"/>
</DockPanel> <DataGridTextColumn Header="进程" Width="100" Binding="{Binding ProName}"/>
<ListBox Grid.Row="3" Grid.ColumnSpan="3" ItemsSource="{Binding ReciveDataSource}"> <DataGridTextColumn Header="监控时间" Width="*" Binding="{Binding MonitorTime,StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}"/>
<DataGridTextColumn Header="运行状态" Width="80" Binding="{Binding ProcessStatus}"/>
</DataGrid.Columns>
</DataGrid>
<!--<ProgressBar Grid.Row="4" Grid.ColumnSpan="3" VerticalAlignment="Bottom" IsIndeterminate="{Binding IsIndeterminate}" Foreground="Green" Value="0"/>-->
</Grid>
</StackPanel>
</Border>
<UniformGrid Grid.Column="1" Grid.RowSpan="2" Columns="1" >
<Border CornerRadius="5" Background="White" Margin="5">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="61*"/>
</Grid.RowDefinitions>
<TextBlock Text="实时处理事件" FontSize="15" VerticalAlignment="Center" />
<DataGrid Grid.Row="1" Background="White" IsReadOnly="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="消息时间" Width="100" Binding="{Binding ProcessTile,StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}"/>
<DataGridTextColumn Header="发震时刻" Width="*" Binding="{Binding ProName}"/>
<DataGridTextColumn Header="东坐标(m)" Width="*" Binding="{Binding MonitorTime}"/>
<DataGridTextColumn Header="北坐标(m)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="深度(m)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="震级(ML)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="能量(m)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="震源性质(m)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="发送状态(m)" Width="*" Binding="{Binding ProcessStatus}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Border>
<Border CornerRadius="5" Background="White" Margin="5">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="61*"/>
</Grid.RowDefinitions>
<TextBlock Text="后处理事件" FontSize="15"/>
<DataGrid Grid.Row="1" Background="White" IsReadOnly="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="消息时间" Width="100" Binding="{Binding ProcessTile,StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}"/>
<DataGridTextColumn Header="发震时刻" Width="*" Binding="{Binding ProName}"/>
<DataGridTextColumn Header="东坐标(m)" Width="*" Binding="{Binding MonitorTime}"/>
<DataGridTextColumn Header="北坐标(m)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="深度(m)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="震级(ML)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="能量(m)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="震源性质(m)" Width="*" Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="发送状态(m)" Width="*" Binding="{Binding ProcessStatus}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Border>
<Border CornerRadius="5" Background="White" Margin="5">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="61*"/>
</Grid.RowDefinitions>
<TextBlock Text="实时处理程序信息" FontSize="15"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="消息时间" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="消息内容" HorizontalAlignment="Center"/>
</Grid>
<ListBox Grid.Row="2" ItemsSource="{Binding ApmsProcessSliceList}" BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding MonitorTime}" />
<TextBlock Grid.Column="1" Text="{Binding ProcessMes}" TextWrapping="Wrap" HorizontalAlignment="Center"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox> </ListBox>
<ProgressBar Grid.Row="4" Grid.ColumnSpan="3" VerticalAlignment="Bottom" IsIndeterminate="{Binding IsIndeterminate}" Foreground="Green" Value="0"/>
</Grid> </Grid>
</GroupBox> </Border>
<Grid Grid.Column="1" Grid.RowSpan="3" > <Border CornerRadius="5" Background="White" Margin="5">
<Grid Margin="10">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="50"/> <RowDefinition Height="30"/>
<RowDefinition Height="10*"/> <RowDefinition Height="auto"/>
<RowDefinition Height="61*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<UniformGrid Grid.Row="0" > <TextBlock Text="后处理程序信息" FontSize="15"/>
<RadioButton GroupName="A" Command="{Binding OutputItemsCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self},Path=Content}" Content="apmsProcessSlice" IsChecked="True"/> <Grid Grid.Row="1">
<RadioButton GroupName="A" Command="{Binding OutputItemsCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self},Path=Content}" Content="apmsEvent"/> <Grid.ColumnDefinitions>
<RadioButton GroupName="A" Command="{Binding OutputItemsCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self},Path=Content}" Content="toolsProcessSlice"/> <ColumnDefinition Width="150"/>
<RadioButton GroupName="A" Command="{Binding OutputItemsCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self},Path=Content}" Content="toolsEvent"/> <ColumnDefinition/>
</UniformGrid> </Grid.ColumnDefinitions>
<ListBox Grid.Row="1" Background="LightGray" ItemsSource="{Binding OutPutItemsSource}"> <TextBlock Text="消息时间" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="消息内容" HorizontalAlignment="Center"/>
</Grid>
<ListBox Grid.Row="2" ItemsSource="{Binding ToolsProcessSliceList}" BorderThickness="0">
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding }" TextWrapping="Wrap"/> <Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding MonitorTime}" />
<TextBlock Grid.Column="1" Text="{Binding ProcessMes}" TextWrapping="Wrap" HorizontalAlignment="Center"/>
</Grid>
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
</ListBox> </ListBox>
</Grid> </Grid>
<!--<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Bottom" IsEnabled="False"> </Border>
<Button Content="查询" Command="{Binding QueryDataCommand}"/> </UniformGrid>
<Button Content="新增" Command="{Binding InsertDataCommand}"/>
</StackPanel>-->
<!--<TextBlock Grid.Row="2" Text="Version 2023.05.17" Margin="10,0,0,0"/>-->
</Grid> </Grid>
</UserControl> </UserControl>

@ -0,0 +1,55 @@
<UserControl x:Class="StartServerWPF.Modules.Main.Views.RealTimeWaveformView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/StartServerWPF.Modules.Main;component/Styles/BaseResources.xaml"/>
<!--<ResourceDictionary Source="/StartServerWPF.Modules.Main;component/Styles/ButtonStyles.xaml"/>
<ResourceDictionary Source="/StartServerWPF.Modules.Main;component/Styles/TextBoxStyle.xaml"/>-->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border BorderBrush="#DDD" BorderThickness="0,0,0,1"/>
<TextBox Text="RealTimeWaveformView" VerticalAlignment="Center" Width="300" HorizontalAlignment="Left" />
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="353*"/>
<ColumnDefinition Width="27*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Background="#EEE" Grid.ColumnSpan="2"/>
<Grid Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition/>
<ColumnDefinition Width="150"/>
</Grid.ColumnDefinitions>
<TextBlock Text="序号" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<!--<TextBlock Text="头像" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center"/>-->
<TextBlock Text="信息" Grid.Column="2" VerticalAlignment="Center" />
<TextBlock Text="xx" Grid.Column="3" VerticalAlignment="Center" />
<TextBlock Text="操作" Grid.Column="4" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<!--编辑、分配权限、重置密码、删除-->
</Grid>
<ItemsControl Grid.Row="1" ItemsSource="{Binding Users}" Grid.ColumnSpan="2">
</ItemsControl>
</Grid>
</Grid>
</UserControl>

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace StartServerWPF.Modules.Main.Views
{
/// <summary>
/// UserManagementView.xaml 的交互逻辑
/// </summary>
public partial class RealTimeWaveformView : UserControl
{
public RealTimeWaveformView()
{
InitializeComponent();
}
}
}

@ -0,0 +1,87 @@
<UserControl x:Class="StartServerWPF.Modules.Main.Views.SetParamView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="500">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid Margin="100,0,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="20*"/>
<RowDefinition Height="10*"/>
<RowDefinition Height="5*"/>
<RowDefinition Height="5*"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Title}" FontSize="20" VerticalAlignment="Center" Foreground="#888" Margin="10,0,10,0"/>
<Grid Grid.Row="1" VerticalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="300"/>
</Grid.ColumnDefinitions>
<TextBlock Text="IP地址" Grid.Row="0" Grid.Column="0"/>
<TextBox Text="{Binding MainModel.VpnIP}" Grid.Row="0" Grid.Column="1"/>
<TextBlock Text="VPN名称" Grid.Row="1" Grid.Column="0"/>
<TextBox Text="{Binding MainModel.VpnName}" Grid.Row="1" Grid.Column="1" />
<TextBlock Text="用户名:" Grid.Row="2" Grid.Column="0" />
<TextBox Text="{Binding MainModel.VpnPsw}" Grid.Row="2" Grid.Column="1" />
<TextBlock Text="密码:" Grid.Row="3" Grid.Column="0" />
<TextBox Text="{Binding MainModel.VpnPsw}" Grid.Row="3" Grid.Column="1" />
</Grid>
<Grid Grid.Row="2" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<TextBlock Text="存储路径:" Grid.Row="0" Grid.Column="0"/>
<TextBox Text="{Binding MainModel.DataSavePath}" IsReadOnly="True" Grid.Row="0" Grid.Column="1"/>
<Button Content="..." Command="{Binding FilePathSaveCommand}" Grid.Row="0" Grid.Column="2"/>
<TextBlock Text="日志路径:" Grid.Row="1" Grid.Column="0" />
<TextBox Text="{Binding MainModel.SystemLogPath}" IsReadOnly="True" Grid.Row="1" Grid.Column="1"/>
<Button Content="..." Command="{Binding LogPathSaveCommand}" Grid.Row="1" Grid.Column="2"/>
</Grid>
<StackPanel Grid.Row="3" Orientation="Horizontal" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<TextBlock>
<Run Text="监控日期:"/>
<Run Text="{Binding MoniTime,StringFormat=yyyy-MM-dd HH:mm:ss}"/>
</TextBlock>
<Image Name="tb_calendar_img" Source="/Images/calendar.png" Grid.Column="1" Width="18" Height="18" Margin="0,0,0,0" PreviewMouseLeftButtonUp="tb_calendar_img_MouseLeftButtonUp"/>
</StackPanel>
<Popup x:Name="Pop" PopupAnimation="None" Width="200" Height="210" PlacementTarget="{Binding ElementName=tb_calendar}" Placement="Bottom" AllowsTransparency="True" StaysOpen="False" VerticalAlignment="Top" Margin="-200,0,0,0">
<Calendar Name="calendar" SelectedDate="{Binding MoniTime}" HorizontalAlignment="Left" Margin="0,44,0,0" VerticalAlignment="Top" />
</Popup>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Row="4" >
<Button Content="应用" Width="100" Height="30" Margin="5,0"
Background="#FF0ABEFF"
Command="{Binding ConfirmCommand}"/>
<Button Content="取消" Width="100" Height="30"
Background="#DDD" Foreground="#666"
Command="{Binding CancelCommand}"/>
</StackPanel>
</Grid>
</UserControl>

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace StartServerWPF.Modules.Main.Views
{
/// <summary>
/// ModifyDeviceView.xaml 的交互逻辑
/// </summary>
public partial class SetParamView : UserControl
{
public SetParamView()
{
InitializeComponent();
}
private void calendar_DisplayModeChanged(object sender, CalendarModeChangedEventArgs e)
{
if (calendar.DisplayMode == CalendarMode.Month || calendar.DisplayMode == CalendarMode.Decade)
{
calendar.DisplayMode = CalendarMode.Year;
}
}
/// <summary>
/// 点击日历图标显示Calendar控件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tb_calendar_img_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (Pop.IsOpen)
{
Pop.IsOpen = false;
}
else
{
Pop.IsOpen = true;
}
}
}
}

@ -37,7 +37,7 @@
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>
</UserControl.Resources> </UserControl.Resources>
<Grid Background="#66FFFFFF"> <Grid Background="#FF262E37">
<Grid.Resources> <Grid.Resources>
<Style TargetType="TreeViewItem"> <Style TargetType="TreeViewItem">
<Setter Property="Background" Value="Transparent"/> <Setter Property="Background" Value="Transparent"/>
@ -47,7 +47,7 @@
<Setter Property="HorizontalContentAlignment" Value="Left"/> <Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="8,5"/> <Setter Property="Padding" Value="8,5"/>
<Setter Property="Foreground" Value="#FF565656"/> <Setter Property="Foreground" Value="White"/>
<Setter Property="FontFamily" Value="{StaticResource Iconfont}"/> <Setter Property="FontFamily" Value="{StaticResource Iconfont}"/>
<Setter Property="FontSize" Value="12"/> <Setter Property="FontSize" Value="12"/>
<Setter Property="BorderThickness" Value="0"/> <Setter Property="BorderThickness" Value="0"/>

@ -0,0 +1,55 @@
<UserControl x:Class="StartServerWPF.Modules.Main.Views.WaveformPlayBackView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/StartServerWPF.Modules.Main;component/Styles/BaseResources.xaml"/>
<!--<ResourceDictionary Source="/StartServerWPF.Modules.Main;component/Styles/ButtonStyles.xaml"/>
<ResourceDictionary Source="/StartServerWPF.Modules.Main;component/Styles/TextBoxStyle.xaml"/>-->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border BorderBrush="#DDD" BorderThickness="0,0,0,1"/>
<TextBox Text="WaveformPlayBackView" VerticalAlignment="Center" Width="300" HorizontalAlignment="Left" />
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="353*"/>
<ColumnDefinition Width="27*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Background="#EEE" Grid.ColumnSpan="2"/>
<Grid Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition/>
<ColumnDefinition Width="150"/>
</Grid.ColumnDefinitions>
<TextBlock Text="序号" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<!--<TextBlock Text="头像" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center"/>-->
<TextBlock Text="信息" Grid.Column="2" VerticalAlignment="Center" />
<TextBlock Text="xx" Grid.Column="3" VerticalAlignment="Center" />
<TextBlock Text="操作" Grid.Column="4" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<!--编辑、分配权限、重置密码、删除-->
</Grid>
<ItemsControl Grid.Row="1" ItemsSource="{Binding Users}" Grid.ColumnSpan="2">
</ItemsControl>
</Grid>
</Grid>
</UserControl>

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace StartServerWPF.Modules.Main.Views
{
/// <summary>
/// UserManagementView.xaml 的交互逻辑
/// </summary>
public partial class WaveformPlayBackView : UserControl
{
public WaveformPlayBackView()
{
InitializeComponent();
}
}
}

@ -20,6 +20,7 @@
}, },
"proServer": { "proServer": {
"ProName": "server", "ProName": "server",
"ProTitle": "服务",
"ProPath": "serverprogram\\server\\", "ProPath": "serverprogram\\server\\",
"ProParams": "service.conf", "ProParams": "service.conf",
"JsonPath": null, "JsonPath": null,
@ -28,7 +29,8 @@
"ShowState": 0 "ShowState": 0
}, },
"proRecv": { "proRecv": {
"ProName": "gw.recvftp", "ProName": "recvftp",
"ProTitle": "数据接收",
"ProPath": "serverprogram\\recvftp\\", "ProPath": "serverprogram\\recvftp\\",
"ProParams": "-cfg gw.recvftp.json >outRecv.txt", "ProParams": "-cfg gw.recvftp.json >outRecv.txt",
"JsonPath": "gw.recvftp.json", "JsonPath": "gw.recvftp.json",
@ -37,7 +39,8 @@
"ShowState": 0 "ShowState": 0
}, },
"proApms": { "proApms": {
"ProName": "gw.apms", "ProName": "apms",
"ProTitle": "实时处理",
"ProPath": "serverprogram\\apms\\", "ProPath": "serverprogram\\apms\\",
"ProParams": "-cfg apms.json >outApms.txt", "ProParams": "-cfg apms.json >outApms.txt",
"JsonPath": "apms.json", "JsonPath": "apms.json",
@ -45,17 +48,9 @@
"OperationStr": "open", "OperationStr": "open",
"ShowState": 0 "ShowState": 0
}, },
"proMonitor": {
"ProName": "gw.monitor",
"ProPath": "serverprogram\\monitor\\",
"ProParams": "-sta n1105_station_xyz.csv -port 8086 -rdir G:/DATA/ -btime 2021-03-15T00:00:00 >outMonitor.txt",
"JsonPath": null,
"Pid": 0,
"OperationStr": "open",
"ShowState": 0
},
"proTools": { "proTools": {
"ProName": "gw.tools", "ProName": "tools",
"ProTitle": "后处理",
"ProPath": "serverprogram\\tools\\", "ProPath": "serverprogram\\tools\\",
"ProParams": "-cfg apms.json -savepath e:\\yuwuN3102mseed -delay 600", "ProParams": "-cfg apms.json -savepath e:\\yuwuN3102mseed -delay 600",
"JsonPath": null, "JsonPath": null,

@ -1,9 +1,9 @@
<Window x:Class="StartServerWPF.Views.MainWindow" <Window x:Class="StartServerWPF.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/" ResizeMode="NoResize" xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True" Closing="Window_Closing" prism:ViewModelLocator.AutoWireViewModel="True" Closing="Window_Closing"
Title="{Binding Title}" Height="500" Width="900" > Title="{Binding Title}" Height="900" Width="1700" >
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="60"/> <RowDefinition Height="60"/>

Loading…
Cancel
Save