You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
295 lines
9.6 KiB
C#
295 lines
9.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using POSV.Component;
|
|
using POSV.Utils;
|
|
using POSV.ShoppingCart;
|
|
using POSV.Entity;
|
|
using POSV.HttpApi;
|
|
|
|
namespace POSV.ComponentUI
|
|
{
|
|
[ToolboxItem(true)]
|
|
public partial class LoginUIControl : BaseUserControl
|
|
{
|
|
public LoginUIControl()
|
|
{
|
|
InitializeComponent();
|
|
|
|
this.txtWorkerNo.GotFocus += OnInputGotFocus;
|
|
}
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
{
|
|
base.OnLoad(e);
|
|
|
|
if (this.DesignMode) return;
|
|
|
|
this.txtWorkerNo.Multiline = false;
|
|
this.txtWorkerNo.Text = string.Empty;
|
|
this.txtWorkerNo.IsEnterInputKey = true;
|
|
|
|
this.txtPasswd.Multiline = false;
|
|
this.txtPasswd.Text = string.Empty;
|
|
this.txtPasswd.IsEnterInputKey = true;
|
|
}
|
|
|
|
public override bool Focused
|
|
{
|
|
get
|
|
{
|
|
if (this.ActiveControl == null)
|
|
{
|
|
this.ActiveControl = this.txtWorkerNo;
|
|
}
|
|
|
|
return this.ActiveControl.Focused;
|
|
}
|
|
}
|
|
|
|
protected override void OnResize(EventArgs e)
|
|
{
|
|
this.Visible = false;
|
|
base.OnResize(e);
|
|
this.Visible = true;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 注册成功事件触发
|
|
/// </summary>
|
|
public event UISucceedEventHandler Succeed;
|
|
protected virtual void OnSucceed(UISucceedEventArgs e)
|
|
{
|
|
Succeed?.Invoke(this, e);
|
|
}
|
|
|
|
private void OnTouchBeforeClick(object sender, TouchEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void OnTouchClick(object sender, TouchEventArgs e)
|
|
{
|
|
switch (e.Value)
|
|
{
|
|
case "clear":
|
|
//如果当前焦点控件是输入框
|
|
if (this.ActiveControl is NumericTextBox)
|
|
{
|
|
var activeControl = this.ActiveControl as NumericTextBox;
|
|
activeControl.Text = string.Empty;
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
InputSimulatorUtils.SendKey(KeyCodes.Map[e.Value]);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
private bool ValidateInputValue()
|
|
{
|
|
if (string.IsNullOrEmpty(txtWorkerNo.Text.Trim()))
|
|
{
|
|
this.lblInfo.Text = "工号不能为空";
|
|
this.txtWorkerNo.Focus();
|
|
return false;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(txtPasswd.Text.Trim()))
|
|
{
|
|
this.lblInfo.Text = "密码不能为空";
|
|
this.txtPasswd.Focus();
|
|
return false;
|
|
}
|
|
|
|
if (!Global.Instance.AuthLogin)
|
|
{
|
|
DialogForm.ShowAlert(this, "特别提示", "您的POS使用权限已过期,请联系代理商续费!");
|
|
return false;
|
|
}
|
|
|
|
this.lblInfo.Text = "提交认证中";
|
|
|
|
return true;
|
|
}
|
|
/// <summary>
|
|
/// 登录
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnTouchLoginClick(object sender, TouchEventArgs e)
|
|
{
|
|
var valid = ValidateInputValue();
|
|
if (valid)
|
|
{
|
|
Login();
|
|
}
|
|
}
|
|
|
|
private void Login()
|
|
{
|
|
try
|
|
{
|
|
var userName = this.txtWorkerNo.Text.Trim().PadLeft(5, '0');
|
|
|
|
var passwd = this.txtPasswd.Text.Trim();
|
|
|
|
Tuple<bool, string, Worker> response = null;
|
|
|
|
//是否需要确认登录信息
|
|
bool isConfirm = false;
|
|
if (Global.Instance.Online)
|
|
{
|
|
//调用业务系统开放平台
|
|
Tuple<bool, string, PosAuth> responsePosAuth = LoginApi.PosAuth(Global.Instance.Authc.StoreId, Global.Instance.Authc.PosNo);
|
|
if (responsePosAuth.Item1)
|
|
{
|
|
PosAuth posAuth = responsePosAuth.Item3;
|
|
if (posAuth.CostMode == 0)
|
|
{
|
|
try
|
|
{
|
|
lock (Global.Instance.SyncLock)
|
|
{
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
{
|
|
using (var transaction = db.GetTransaction())
|
|
{
|
|
string sql = "update pos_store_info set dueDate ='{0}'";
|
|
sql = string.Format(sql, posAuth.DueDate);
|
|
db.Execute(sql, null);
|
|
transaction.Complete();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LOGGER.Error(ex);
|
|
}
|
|
//租赁模式剩余时间小于0天,禁止登陆系统
|
|
if (posAuth.AuthDays < 0)
|
|
{
|
|
Global.Instance.AuthLogin = false;
|
|
DialogForm.ShowAlert(this, "特别提示", "您的POS使用权限已过期,请联系代理商续费!");
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
//调用业务系统开放平台
|
|
response = LoginApi.ValidateWorker(Global.Instance.Authc.StoreId, Global.Instance.Authc.PosNo, userName, passwd);
|
|
isConfirm = false;
|
|
}
|
|
else
|
|
{
|
|
response = LoginApi.DatabaseLogin(userName, passwd);
|
|
|
|
isConfirm = true;
|
|
}
|
|
|
|
//返回成功
|
|
if (response.Item1)
|
|
{
|
|
this.lblInfo.Text = response.Item2;
|
|
|
|
Worker worker = response.Item3;
|
|
|
|
if (isConfirm)
|
|
{
|
|
|
|
List<string> dayList = OrderUtils.GetUnUpLoadDay();
|
|
StoreInfo storeInfo = null;
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
{
|
|
storeInfo = db.FirstOrDefault<StoreInfo>("where id = @0", Global.Instance.Authc.StoreId);
|
|
}
|
|
//如果门店设置最大登录天数大于0并且实际未上传数据的天数大于该天数,就不允许离线登录了
|
|
if (storeInfo != null && storeInfo.MaxOffLine > 0 && dayList.Count >= storeInfo.MaxOffLine)
|
|
{
|
|
|
|
this.lblInfo.Text = string.Format("门店最多允许离线登录{0}天,请联网登录!", storeInfo.MaxOffLine);
|
|
return;
|
|
}
|
|
var confirm = new LoginConfirm(Global.Instance.Authc, worker);
|
|
//确认登录
|
|
if (DialogResult.OK == confirm.ShowDialog())
|
|
{
|
|
//登陆成功通知事件
|
|
this.OnSucceed(new UISucceedEventArgs(worker));
|
|
}
|
|
else
|
|
{
|
|
this.txtWorkerNo.Text = string.Empty;
|
|
this.txtPasswd.Text = string.Empty;
|
|
|
|
this.lblInfo.Text = "工号不能为空";
|
|
this.txtWorkerNo.Focus();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//登陆成功通知事件
|
|
this.OnSucceed(new UISucceedEventArgs(worker));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.lblInfo.Text = response.Item2;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LOGGER.Error(ex, "收银员登录验证异常");
|
|
this.lblInfo.Text = "收银员登录异常";
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 退出
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnTouchExitClick(object sender, TouchEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void OnInputEnterClick(object sender, EnterEventArg e)
|
|
{
|
|
var valid = ValidateInputValue();
|
|
if (valid)
|
|
{
|
|
Login();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 按钮改变
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnInputValueChange(object sender, EnterEventArg e)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public delegate void UISucceedEventHandler(object sender, UISucceedEventArgs e);
|
|
|
|
public class UISucceedEventArgs : EventArgs
|
|
{
|
|
public readonly Worker Worker;
|
|
public UISucceedEventArgs(Worker worker)
|
|
{
|
|
this.Worker = worker;
|
|
}
|
|
}
|
|
}
|