duheng
2025-03-05 0f831db8df9c2e4adc7feca636967a0fb1cd5e29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using DevExpress.XtraEditors;
using HStation.RevitDev.RevitDataExport.Common;
using System;
using System.Net.Http;
using System.Text;
using Timer = System.Windows.Forms.Timer;
 
namespace HStation.RevitDev.RevitDataExport
{
    public partial class SmsLoginCtrl : DevExpress.XtraEditors.XtraUserControl, ILogin
    {
        public SmsLoginCtrl()
        {
            InitializeComponent();
            //  this.layoutControl1.SetupLayoutControl();
        }
 
        /// <summary>
        /// 登录开始事件
        /// </summary>
        public event Action LoginStartEvent;
 
        /// <summary>
        /// 登录取消事件
        /// </summary>
        public event Action LoginCancelEvent;
 
        /// <summary>
        /// 登录完成事件
        /// </summary>
        public event Action<HttpResultModel, string> LoginEndEvet;
 
        private bool _isInitialized = false;//初始化
        private const string _template = "hzkw_sms_template";//sms登录模板
 
        /// <summary>
        /// 初始化
        /// </summary>
        public void Initial()
        {
            if (_isInitialized)
            {
                return;
            }
            _isInitialized = true;
        }
 
        //手机号验证
        private bool IsValidMobileNumber(string mobile)
        {
            var regex = new System.Text.RegularExpressions.Regex(@"^1\d{10}$");
            return regex.IsMatch(mobile);
        }
 
        //发送验证码
        private void btnSendCode_Click(object sender, EventArgs e)
        {
            var Software = GlobalResource.ConfigSettingModel.Software;
            this.dxErrorProvider1.ClearErrors();
            var mobile = this.txtMobileNumber.Text.Trim();
            if (!IsValidMobileNumber(mobile))
            {
                XtraMessageBox.Show("手机号有误!");
                return;
            }
            using (var client = new HttpClient())
            {
                var res = client.GetAsync(GlobalResource.ConfigSettingModel.ApiUrl + $"/Auth/Tool/SMS/SendCode@V1.0?TemplateCode={_template}&MobileNumber={mobile}&Software={Software}")
                 .Result.Content.ReadAsStringAsync().Result;
                var result = JsonHelper.ToObject<HttpResultViewModel>(res);
                if (result.Code == 0)
                {
                    this.labSendCode.Enabled = false;
                    StartCountdown();
                }
                else
                {
                    XtraMessageBox.Show(result.Message);
                    this.labSendCode.Enabled = true;
                }
            }
        }
 
        private void StartCountdown()
        {
            int countdown = 60;
            Timer timer = new Timer();
            timer.Interval = 1000; // 1秒
            timer.Tick += (s, e) =>
            {
                countdown--;
                if (countdown > 0)
                {
                    this.labSendCode.Text = $"{countdown}秒后重新发送";
                }
                else
                {
                    timer.Stop();
                    this.labSendCode.Text = "发送验证码";
                    this.labSendCode.Enabled = true;
                }
            };
            timer.Start();
        }
 
        //取消登录
        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.LoginCancelEvent?.Invoke();
        }
 
        //登录
        private void btnLogin_Click(object sender, EventArgs e)
        {
            this.dxErrorProvider1.ClearErrors();
            if (string.IsNullOrEmpty(this.txtCode.Text.Trim()))
            {
                this.dxErrorProvider1.SetError(this.txtCode, "请输入验证码");
                return;
            }
            this.LoginStartEvent?.Invoke();
            var loginModel = new
            {
                TemplateCode = _template,
                MobileNumber = this.txtMobileNumber.Text.Trim(),
                Software = GlobalResource.ConfigSettingModel.Software,
                ValidCode = this.txtCode.Text.Trim(),
            };
            using (var client = new HttpClient())
            {
                var content = new StringContent(JsonHelper.ToJson(loginModel), Encoding.UTF8, "application/json");
                var res = client.PostAsync(GlobalResource.ConfigSettingModel.ApiUrl + "/Auth/User/Login/LoginSoftwareStandardBySmsAccount@V1.0", content)
                   .Result.Content.ReadAsStringAsync().Result;
                var result = JsonHelper.ToObject<HttpResultModel>(res);
                this.LoginEndEvet?.Invoke(result, res);
            }
        }
    }
}