From dc83334c59ed4e439b2e5199795c631c3be3ae9e Mon Sep 17 00:00:00 2001 From: wule Date: Wed, 11 Mar 2026 15:42:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E8=87=AA=E5=8A=A8=E5=9B=9E?= =?UTF-8?q?=E5=A4=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMUKJD/KJD.csproj | 10 + TEMUKJD/KJDForms/ShopForms/ShopLoginForm.cs | 2 +- .../PDDDBProdListForm.Designer.cs | 5 - .../GetJuShuitanProductSKUListForm.cs | 6 +- .../WXForms/ShopForms/WxShopStatisticsForm.cs | 16 +- .../TalkForms/TalkAutoReplyConfigForm.cs | 67 +++ .../TalkAutoReplyConfigForm.designer.cs | 164 +++++++ .../TalkForms/TalkAutoReplyConfigForm.resx | 298 ++++++++++++ .../TalkForms/TalkModel/AutoReplayParam.cs | 15 + .../WXForms/TalkForms/WxTalkForm.Designer.cs | 251 +++++----- TEMUKJD/WXForms/TalkForms/WxTalkForm.cs | 432 ++++++++++++++++-- TEMUKJD/WXForms/TalkForms/WxTalkForm.resx | 13 +- 12 files changed, 1126 insertions(+), 153 deletions(-) create mode 100644 TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.cs create mode 100644 TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.designer.cs create mode 100644 TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.resx create mode 100644 TEMUKJD/WXForms/TalkForms/TalkModel/AutoReplayParam.cs diff --git a/TEMUKJD/KJD.csproj b/TEMUKJD/KJD.csproj index 619ba17..b827807 100644 --- a/TEMUKJD/KJD.csproj +++ b/TEMUKJD/KJD.csproj @@ -1076,6 +1076,12 @@ SupportQrCodeForm.cs + + Form + + + TalkAutoReplyConfigForm.cs + Form @@ -1083,6 +1089,7 @@ TalkMessageForm.cs + Form @@ -1536,6 +1543,9 @@ SupportQrCodeForm.cs + + TalkAutoReplyConfigForm.cs + TalkMessageForm.cs diff --git a/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.cs b/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.cs index 4884ab7..a780716 100644 --- a/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.cs +++ b/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.cs @@ -1182,7 +1182,7 @@ event.eventType = 'message'; usernameId.dispatchEvent(event); "; - string sInputValueChange2 = @" + public static string sInputValueChange2 = @" function changeReactInputValue(inputDom,newText){ let lastValue = inputDom.value; inputDom.value = newText; diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.Designer.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.Designer.cs index ab4c691..5c4bba5 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.Designer.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.Designer.cs @@ -227,7 +227,6 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.dtpEnd.Name = "dtpEnd"; this.dtpEnd.Size = new System.Drawing.Size(110, 23); this.dtpEnd.TabIndex = 979; - this.dtpEnd.Visible = false; // // dtpStart // @@ -236,7 +235,6 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.dtpStart.Name = "dtpStart"; this.dtpStart.Size = new System.Drawing.Size(110, 23); this.dtpStart.TabIndex = 978; - this.dtpStart.Visible = false; // // ucCheckBox1 // @@ -248,7 +246,6 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.ucCheckBox1.TabIndex = 977; this.ucCheckBox1.Text = "时间范围"; this.ucCheckBox1.UseVisualStyleBackColor = true; - this.ucCheckBox1.Visible = false; // // btnUpdateReturnServerData // @@ -273,7 +270,6 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.btnUpdateReturnServerData.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); this.btnUpdateReturnServerData.TabIndex = 943; this.btnUpdateReturnServerData.Text = "数据拉回"; - this.btnUpdateReturnServerData.Visible = false; this.btnUpdateReturnServerData.Click += new System.EventHandler(this.updateReturnServerData_Click); // // btnReturnSecretData @@ -299,7 +295,6 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.btnReturnSecretData.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); this.btnReturnSecretData.TabIndex = 909; this.btnReturnSecretData.Text = "加密数据回传"; - this.btnReturnSecretData.Visible = false; this.btnReturnSecretData.Click += new System.EventHandler(this.btnReturnSecretData_Click); // // btnStopStop diff --git a/TEMUKJD/ToolForms/GetJuShuitanProductSKUListForm.cs b/TEMUKJD/ToolForms/GetJuShuitanProductSKUListForm.cs index 0f65ad2..a514a7a 100644 --- a/TEMUKJD/ToolForms/GetJuShuitanProductSKUListForm.cs +++ b/TEMUKJD/ToolForms/GetJuShuitanProductSKUListForm.cs @@ -45,10 +45,6 @@ namespace TemuKJD.ToolForms int getDetailWait = 1; int pageStart = 1; int pageEnd = 9999; - int filterSaleCountDays = 7; - int filterSaleCount = 100; - string platformType = "Pinduoduo"; - string jstPddShopId = ""; ConcurrentList lstJSTListProductSkuInfo = new ConcurrentList(); public GetJuShuitanProductSKUListForm() @@ -58,7 +54,7 @@ namespace TemuKJD.ToolForms private void GetJuShuitanProdForm_Load(object sender, EventArgs e) { - //this.ucTabControlMetro1.TabPages.Remove(tabPage3); + this.ucTabControlMetro1.TabPages.Remove(tabPage3); this.splitContainer1.SplitterDistance = 472; this.dgvProduct.AddSelectorColumn("colCheck"); diff --git a/TEMUKJD/WXForms/ShopForms/WxShopStatisticsForm.cs b/TEMUKJD/WXForms/ShopForms/WxShopStatisticsForm.cs index 03c35bd..6e244af 100644 --- a/TEMUKJD/WXForms/ShopForms/WxShopStatisticsForm.cs +++ b/TEMUKJD/WXForms/ShopForms/WxShopStatisticsForm.cs @@ -341,7 +341,7 @@ namespace TemuKJD.WXForms.ShopForms errStr = BaseRegex.GetStringJson(ref shopScoreRst, "error_msg"); if (string.IsNullOrEmpty(errStr)) errStr = shopScoreRst; - ShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); statistics.err_msg = errStr; return; } @@ -361,7 +361,7 @@ namespace TemuKJD.WXForms.ShopForms errStr = BaseRegex.GetStringJson(ref prodLstRst, "error_msg"); if (string.IsNullOrEmpty(errStr)) errStr = prodLstRst; - ShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); statistics.err_msg = errStr; return; } @@ -393,7 +393,7 @@ namespace TemuKJD.WXForms.ShopForms errStr = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(errStr)) errStr = html; - ShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); statistics.err_msg = errStr; return; } @@ -427,7 +427,7 @@ namespace TemuKJD.WXForms.ShopForms errStr = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(errStr)) errStr = html; - ShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); statistics.err_msg = errStr; return; } @@ -461,7 +461,7 @@ namespace TemuKJD.WXForms.ShopForms errStr = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(errStr)) errStr = html; - ShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); statistics.err_msg = errStr; return; } @@ -495,7 +495,7 @@ namespace TemuKJD.WXForms.ShopForms errStr = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(errStr)) errStr = html; - ShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); statistics.err_msg = errStr; return; } @@ -526,7 +526,7 @@ namespace TemuKJD.WXForms.ShopForms errStr = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(errStr)) errStr = html; - ShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); statistics.err_msg = errStr; return; } @@ -544,7 +544,7 @@ namespace TemuKJD.WXForms.ShopForms errStr = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(errStr)) errStr = html; - ShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); statistics.err_msg = errStr; return; } diff --git a/TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.cs b/TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.cs new file mode 100644 index 0000000..5343642 --- /dev/null +++ b/TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.cs @@ -0,0 +1,67 @@ +using AllBase.Model.Result; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using TemuKJD.BaseForms; + +namespace TemuKJD.WXForms.TalkForms +{ + public partial class TalkAutoReplyConfigForm : BaseGeneralForm + { + List> lstTalkTemplatePair; + public TalkAutoReplyConfigForm(List> _lstTalkTemplatePair) + { + InitializeComponent(); + lstTalkTemplatePair = _lstTalkTemplatePair; + } + + private void ChatMessageForm_Load(object sender, EventArgs e) + { + if (lstTalkTemplatePair != null) + { + string txt = ""; + foreach(var vp in lstTalkTemplatePair) + { + txt += vp.Key + "###" + vp.Value + "\r\n"; + } + txt.Trim('\r', '\n'); + this.txtTalk.Text = txt; + } + } + + private void btnGetSelect_Click(object sender, EventArgs e) + { + try + { + WxTalkForm.UpdateAutoReply(txtTalk.Text.Trim(' ', '\r', '\n')); + BaseMsgForm.ShowInfo("保存成功"); + this.Close(); + } + catch + { + BaseMsgForm.ShowInfo("保存失败,请重试"); + } + } + + private void btnDefault_Click(object sender, EventArgs e) + { + try + { + WxTalkForm.UpdateAutoReply(WxTalkForm.defaultTalkTemplate); + BaseMsgForm.ShowInfo("还原成功"); + } + catch + { + BaseMsgForm.ShowInfo("还原失败,请重试"); + this.Close(); + } + } + } +} diff --git a/TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.designer.cs b/TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.designer.cs new file mode 100644 index 0000000..f0a56a0 --- /dev/null +++ b/TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.designer.cs @@ -0,0 +1,164 @@ +namespace TemuKJD.WXForms.TalkForms +{ + partial class TalkAutoReplyConfigForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TalkAutoReplyConfigForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnDefault = new DevComponents.DotNetBar.PanelEx(); + this.btnGetSelect = new DevComponents.DotNetBar.PanelEx(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.txtTalk = new System.Windows.Forms.TextBox(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.btnDefault); + this.panel2.Controls.Add(this.btnGetSelect); + this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.txtTalk); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Padding = new System.Windows.Forms.Padding(8); + this.panel2.Size = new System.Drawing.Size(1010, 722); + this.panel2.TabIndex = 189; + // + // btnDefault + // + this.btnDefault.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnDefault.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnDefault.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDefault.DisabledBackColor = System.Drawing.Color.Empty; + this.btnDefault.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDefault.Location = new System.Drawing.Point(34, 679); + this.btnDefault.Name = "btnDefault"; + this.btnDefault.Size = new System.Drawing.Size(119, 23); + this.btnDefault.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnDefault.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDefault.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDefault.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnDefault.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnDefault.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnDefault.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnDefault.Style.GradientAngle = 90; + this.btnDefault.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnDefault.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnDefault.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnDefault.TabIndex = 435; + this.btnDefault.Text = "还原初始值"; + this.btnDefault.Click += new System.EventHandler(this.btnDefault_Click); + // + // btnGetSelect + // + this.btnGetSelect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGetSelect.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnGetSelect.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetSelect.DisabledBackColor = System.Drawing.Color.Empty; + this.btnGetSelect.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetSelect.Location = new System.Drawing.Point(905, 679); + this.btnGetSelect.Name = "btnGetSelect"; + this.btnGetSelect.Size = new System.Drawing.Size(73, 23); + this.btnGetSelect.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetSelect.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetSelect.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetSelect.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnGetSelect.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnGetSelect.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnGetSelect.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnGetSelect.Style.GradientAngle = 90; + this.btnGetSelect.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetSelect.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetSelect.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetSelect.TabIndex = 431; + this.btnGetSelect.Text = "保存"; + this.btnGetSelect.Click += new System.EventHandler(this.btnGetSelect_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(34, 147); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(116, 17); + this.label2.TabIndex = 2; + this.label2.Text = "设置自动回复话术:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(34, 10); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(382, 119); + this.label1.TabIndex = 1; + this.label1.Text = "自动回复话术设置模板:\r\n关键词###回复语\r\n###默认回复语\r\n例如:\r\n快递###亲,我们根据您的收货地址选择最优的快递!\r\n什么时候发货###亲,我们48" + + "小时内发货,一般我们都是当天发货的喔\r\n###亲,能拍的都有货,我们是48小时内发货。"; + // + // txtTalk + // + this.txtTalk.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtTalk.Location = new System.Drawing.Point(34, 171); + this.txtTalk.Multiline = true; + this.txtTalk.Name = "txtTalk"; + this.txtTalk.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtTalk.Size = new System.Drawing.Size(944, 494); + this.txtTalk.TabIndex = 0; + this.txtTalk.WordWrap = false; + // + // TalkAutoReplyConfigForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(1012, 756); + this.Controls.Add(this.panel2); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TalkAutoReplyConfigForm"; + this.Text = "自动回复话术"; + this.TitleText = "自动回复话术"; + this.Load += new System.EventHandler(this.ChatMessageForm_Load); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtTalk; + private System.Windows.Forms.Label label2; + private DevComponents.DotNetBar.PanelEx btnGetSelect; + private DevComponents.DotNetBar.PanelEx btnDefault; + } +} \ No newline at end of file diff --git a/TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.resx b/TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.resx new file mode 100644 index 0000000..b3f29ec --- /dev/null +++ b/TEMUKJD/WXForms/TalkForms/TalkAutoReplyConfigForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQeQAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/WXForms/TalkForms/TalkModel/AutoReplayParam.cs b/TEMUKJD/WXForms/TalkForms/TalkModel/AutoReplayParam.cs new file mode 100644 index 0000000..22e6213 --- /dev/null +++ b/TEMUKJD/WXForms/TalkForms/TalkModel/AutoReplayParam.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TemuKJD.WXForms.TalkForms.TalkModel +{ + public class AutoReplayParam + { + public string shopId { get; set; } + public string nickName { get; set; } + public string talkContent { get; set; } + } +} diff --git a/TEMUKJD/WXForms/TalkForms/WxTalkForm.Designer.cs b/TEMUKJD/WXForms/TalkForms/WxTalkForm.Designer.cs index 95a36a7..830fa55 100644 --- a/TEMUKJD/WXForms/TalkForms/WxTalkForm.Designer.cs +++ b/TEMUKJD/WXForms/TalkForms/WxTalkForm.Designer.cs @@ -41,8 +41,6 @@ namespace TemuKJD.WXForms.TalkForms this.label1 = new System.Windows.Forms.Label(); this.pnlSet = new DevComponents.DotNetBar.PanelEx(); this.line4 = new DevComponents.DotNetBar.Controls.Line(); - this.chkIsAutoReLogin = new System.Windows.Forms.CheckBox(); - this.txtAutoReplyText = new System.Windows.Forms.TextBox(); this.chkIsAutoReply = new System.Windows.Forms.CheckBox(); this.splitContainer4 = new System.Windows.Forms.SplitContainer(); this.pbLoading = new System.Windows.Forms.PictureBox(); @@ -53,9 +51,12 @@ namespace TemuKJD.WXForms.TalkForms this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.colShopNotes = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.colLoginStatus = new System.Windows.Forms.DataGridViewLinkColumn(); - this.colAfterSale = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colWaitSend = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colWayBillError = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAfterSale = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colScore = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); this.lblTalkCount = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.btnRefreshMsgCount = new DevComponents.DotNetBar.PanelEx(); @@ -80,6 +81,8 @@ namespace TemuKJD.WXForms.TalkForms this.btnPrev = new DevComponents.DotNetBar.PanelEx(); this.txtAddress = new System.Windows.Forms.TextBox(); this.pnlTalk = new System.Windows.Forms.Panel(); + this.chkIsAutoReLogin = new System.Windows.Forms.CheckBox(); + this.txtAutoReplyText = new System.Windows.Forms.TextBox(); this.tabPage2 = new System.Windows.Forms.TabPage(); this.mainPanel = new System.Windows.Forms.Panel(); this.ColumnShopStatus = new System.Windows.Forms.DataGridViewLinkColumn(); @@ -113,6 +116,7 @@ namespace TemuKJD.WXForms.TalkForms this.splitContainer3.Panel1.SuspendLayout(); this.splitContainer3.Panel2.SuspendLayout(); this.splitContainer3.SuspendLayout(); + this.pnlTalk.SuspendLayout(); this.tabPage2.SuspendLayout(); this.SuspendLayout(); // @@ -123,7 +127,7 @@ namespace TemuKJD.WXForms.TalkForms // lblVersionName // this.lblVersionName.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.lblVersionName.Location = new System.Drawing.Point(15675, 33); + this.lblVersionName.Location = new System.Drawing.Point(23685, 33); // // panel3 // @@ -151,7 +155,7 @@ namespace TemuKJD.WXForms.TalkForms // this.splitContainer1.Panel2.Controls.Add(this.ucTabControl1); this.splitContainer1.Size = new System.Drawing.Size(1498, 618); - this.splitContainer1.SplitterDistance = 330; + this.splitContainer1.SplitterDistance = 500; this.splitContainer1.SplitterWidth = 1; this.splitContainer1.TabIndex = 1; // @@ -170,28 +174,27 @@ namespace TemuKJD.WXForms.TalkForms this.splitContainer2.Panel1.Controls.Add(this.label1); this.splitContainer2.Panel1.Controls.Add(this.pnlSet); this.splitContainer2.Panel1.Controls.Add(this.line4); - this.splitContainer2.Panel1.Controls.Add(this.chkIsAutoReLogin); - this.splitContainer2.Panel1.Controls.Add(this.txtAutoReplyText); this.splitContainer2.Panel1.Controls.Add(this.chkIsAutoReply); // // splitContainer2.Panel2 // this.splitContainer2.Panel2.Controls.Add(this.splitContainer4); this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(4, 0, 0, 4); - this.splitContainer2.Size = new System.Drawing.Size(330, 618); - this.splitContainer2.SplitterDistance = 25; + this.splitContainer2.Size = new System.Drawing.Size(500, 618); + this.splitContainer2.SplitterDistance = 62; this.splitContainer2.TabIndex = 0; // // chkNotShowMessageWindow // + this.chkNotShowMessageWindow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.chkNotShowMessageWindow.AutoSize = true; - this.chkNotShowMessageWindow.Location = new System.Drawing.Point(4, 33); + this.chkNotShowMessageWindow.Location = new System.Drawing.Point(374, 6); this.chkNotShowMessageWindow.Name = "chkNotShowMessageWindow"; this.chkNotShowMessageWindow.Size = new System.Drawing.Size(123, 21); this.chkNotShowMessageWindow.TabIndex = 201; this.chkNotShowMessageWindow.Text = "新消息不弹框提示"; this.chkNotShowMessageWindow.UseVisualStyleBackColor = true; - this.chkNotShowMessageWindow.Visible = false; + this.chkNotShowMessageWindow.CheckedChanged += new System.EventHandler(this.chkNotShowMessageWindow_CheckedChanged); // // cmbMessage // @@ -224,30 +227,29 @@ namespace TemuKJD.WXForms.TalkForms "19号电脑", "20号电脑", "无"}); - this.cmbMessage.Location = new System.Drawing.Point(71, 4); + this.cmbMessage.Location = new System.Drawing.Point(77, 6); this.cmbMessage.Name = "cmbMessage"; - this.cmbMessage.Size = new System.Drawing.Size(259, 20); + this.cmbMessage.Size = new System.Drawing.Size(289, 20); this.cmbMessage.TabIndex = 193; // // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(7, 6); + this.label1.Location = new System.Drawing.Point(7, 8); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(68, 17); + this.label1.Size = new System.Drawing.Size(80, 17); this.label1.TabIndex = 197; - this.label1.Text = "消息提示:"; + this.label1.Text = "消息提示音:"; // // pnlSet // - this.pnlSet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.pnlSet.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.pnlSet.Cursor = System.Windows.Forms.Cursors.Hand; this.pnlSet.DisabledBackColor = System.Drawing.Color.Empty; this.pnlSet.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.pnlSet.Location = new System.Drawing.Point(290, 56); + this.pnlSet.Location = new System.Drawing.Point(107, 37); this.pnlSet.Name = "pnlSet"; - this.pnlSet.Size = new System.Drawing.Size(40, 20); + this.pnlSet.Size = new System.Drawing.Size(88, 20); this.pnlSet.Style.Alignment = System.Drawing.StringAlignment.Center; this.pnlSet.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); this.pnlSet.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); @@ -257,52 +259,30 @@ namespace TemuKJD.WXForms.TalkForms this.pnlSet.Style.ForeColor.Color = System.Drawing.Color.White; this.pnlSet.Style.GradientAngle = 90; this.pnlSet.TabIndex = 184; - this.pnlSet.Text = "设 置"; - this.pnlSet.Visible = false; + this.pnlSet.Text = "自动回复设置"; + this.pnlSet.Click += new System.EventHandler(this.pnlSet_Click); // // line4 // + this.line4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.line4.ForeColor = System.Drawing.Color.Silver; - this.line4.Location = new System.Drawing.Point(4, 24); + this.line4.Location = new System.Drawing.Point(4, 28); this.line4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.line4.Name = "line4"; - this.line4.Size = new System.Drawing.Size(266, 8); + this.line4.Size = new System.Drawing.Size(493, 8); this.line4.TabIndex = 180; this.line4.Text = "line4"; // - // chkIsAutoReLogin - // - this.chkIsAutoReLogin.AutoSize = true; - this.chkIsAutoReLogin.Location = new System.Drawing.Point(133, 33); - this.chkIsAutoReLogin.Name = "chkIsAutoReLogin"; - this.chkIsAutoReLogin.Size = new System.Drawing.Size(99, 21); - this.chkIsAutoReLogin.TabIndex = 2; - this.chkIsAutoReLogin.Text = "掉线自动重登"; - this.chkIsAutoReLogin.UseVisualStyleBackColor = true; - this.chkIsAutoReLogin.Visible = false; - // - // txtAutoReplyText - // - this.txtAutoReplyText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtAutoReplyText.Location = new System.Drawing.Point(4, 78); - this.txtAutoReplyText.Multiline = true; - this.txtAutoReplyText.Name = "txtAutoReplyText"; - this.txtAutoReplyText.Size = new System.Drawing.Size(326, 50); - this.txtAutoReplyText.TabIndex = 1; - this.txtAutoReplyText.Visible = false; - // // chkIsAutoReply // - this.chkIsAutoReply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.chkIsAutoReply.AutoSize = true; - this.chkIsAutoReply.Location = new System.Drawing.Point(64, 56); + this.chkIsAutoReply.Location = new System.Drawing.Point(9, 38); this.chkIsAutoReply.Name = "chkIsAutoReply"; - this.chkIsAutoReply.Size = new System.Drawing.Size(87, 21); + this.chkIsAutoReply.Size = new System.Drawing.Size(99, 21); this.chkIsAutoReply.TabIndex = 0; - this.chkIsAutoReply.Text = "自动回复:"; + this.chkIsAutoReply.Text = "自动回复消息"; this.chkIsAutoReply.UseVisualStyleBackColor = true; - this.chkIsAutoReply.Visible = false; // // splitContainer4 // @@ -335,15 +315,15 @@ namespace TemuKJD.WXForms.TalkForms this.splitContainer4.Panel2.Controls.Add(this.label2); this.splitContainer4.Panel2.Controls.Add(this.label3); this.splitContainer4.Panel2.Controls.Add(this.line1); - this.splitContainer4.Size = new System.Drawing.Size(326, 585); - this.splitContainer4.SplitterDistance = 462; + this.splitContainer4.Size = new System.Drawing.Size(496, 548); + this.splitContainer4.SplitterDistance = 450; this.splitContainer4.TabIndex = 7; // // pbLoading // this.pbLoading.Anchor = System.Windows.Forms.AnchorStyles.None; this.pbLoading.Image = global::TemuKJD.Properties.Resources.loading_blue; - this.pbLoading.Location = new System.Drawing.Point(138, 206); + this.pbLoading.Location = new System.Drawing.Point(223, 200); this.pbLoading.Name = "pbLoading"; this.pbLoading.Size = new System.Drawing.Size(50, 50); this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; @@ -376,9 +356,12 @@ namespace TemuKJD.WXForms.TalkForms this.colShopName, this.colShopNotes, this.colLoginStatus, + this.colMessage, + this.colWaitSend, + this.colWayBillError, this.colAfterSale, - this.colCanUse, - this.colMessage}); + this.colScore, + this.colCanUse}); this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; this.dgvShop.Location = new System.Drawing.Point(0, 0); this.dgvShop.MultiSelect = false; @@ -386,10 +369,11 @@ namespace TemuKJD.WXForms.TalkForms this.dgvShop.ReadOnly = true; this.dgvShop.RowHeadersWidth = 25; this.dgvShop.RowTemplate.Height = 23; - this.dgvShop.Size = new System.Drawing.Size(326, 462); + this.dgvShop.Size = new System.Drawing.Size(496, 450); this.dgvShop.TabIndex = 7; this.dgvShop.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellClick); this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + this.dgvShop.CellMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgvShop_CellMouseClick); // // colSelect // @@ -398,6 +382,7 @@ namespace TemuKJD.WXForms.TalkForms this.colSelect.ReadOnly = true; this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Visible = false; this.colSelect.Width = 28; // // colShopLoginName @@ -440,6 +425,27 @@ namespace TemuKJD.WXForms.TalkForms this.colLoginStatus.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; this.colLoginStatus.Width = 38; // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 90; + // + // colWaitSend + // + this.colWaitSend.HeaderText = "待发货"; + this.colWaitSend.Name = "colWaitSend"; + this.colWaitSend.ReadOnly = true; + this.colWaitSend.Width = 50; + // + // colWayBillError + // + this.colWayBillError.HeaderText = "物流异常"; + this.colWayBillError.Name = "colWayBillError"; + this.colWayBillError.ReadOnly = true; + this.colWayBillError.Width = 62; + // // colAfterSale // this.colAfterSale.HeaderText = "售后"; @@ -447,6 +453,13 @@ namespace TemuKJD.WXForms.TalkForms this.colAfterSale.ReadOnly = true; this.colAfterSale.Width = 38; // + // colScore + // + this.colScore.HeaderText = "评分"; + this.colScore.Name = "colScore"; + this.colScore.ReadOnly = true; + this.colScore.Width = 38; + // // colCanUse // this.colCanUse.HeaderText = "可用"; @@ -457,20 +470,13 @@ namespace TemuKJD.WXForms.TalkForms this.colCanUse.Visible = false; this.colCanUse.Width = 28; // - // colMessage - // - this.colMessage.HeaderText = "消息"; - this.colMessage.Name = "colMessage"; - this.colMessage.ReadOnly = true; - this.colMessage.Width = 120; - // // lblTalkCount // this.lblTalkCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.lblTalkCount.AutoSize = true; this.lblTalkCount.Font = new System.Drawing.Font("微软雅黑", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblTalkCount.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); - this.lblTalkCount.Location = new System.Drawing.Point(135, 5); + this.lblTalkCount.Location = new System.Drawing.Point(182, 6); this.lblTalkCount.Name = "lblTalkCount"; this.lblTalkCount.Size = new System.Drawing.Size(17, 19); this.lblTalkCount.TabIndex = 755; @@ -480,7 +486,7 @@ namespace TemuKJD.WXForms.TalkForms // this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(91, 6); + this.label6.Location = new System.Drawing.Point(138, 7); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(56, 17); this.label6.TabIndex = 754; @@ -488,12 +494,12 @@ namespace TemuKJD.WXForms.TalkForms // // btnRefreshMsgCount // - this.btnRefreshMsgCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.btnRefreshMsgCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnRefreshMsgCount.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnRefreshMsgCount.Cursor = System.Windows.Forms.Cursors.Hand; this.btnRefreshMsgCount.DisabledBackColor = System.Drawing.Color.Empty; this.btnRefreshMsgCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnRefreshMsgCount.Location = new System.Drawing.Point(283, 4); + this.btnRefreshMsgCount.Location = new System.Drawing.Point(451, 5); this.btnRefreshMsgCount.Name = "btnRefreshMsgCount"; this.btnRefreshMsgCount.Size = new System.Drawing.Size(42, 21); this.btnRefreshMsgCount.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -519,7 +525,7 @@ namespace TemuKJD.WXForms.TalkForms this.lblUserCount.AutoSize = true; this.lblUserCount.Font = new System.Drawing.Font("微软雅黑", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblUserCount.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); - this.lblUserCount.Location = new System.Drawing.Point(45, 5); + this.lblUserCount.Location = new System.Drawing.Point(45, 6); this.lblUserCount.Name = "lblUserCount"; this.lblUserCount.Size = new System.Drawing.Size(17, 19); this.lblUserCount.TabIndex = 239; @@ -531,7 +537,7 @@ namespace TemuKJD.WXForms.TalkForms this.lblReplyCount.AutoSize = true; this.lblReplyCount.Font = new System.Drawing.Font("微软雅黑", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblReplyCount.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); - this.lblReplyCount.Location = new System.Drawing.Point(225, 5); + this.lblReplyCount.Location = new System.Drawing.Point(319, 6); this.lblReplyCount.Name = "lblReplyCount"; this.lblReplyCount.Size = new System.Drawing.Size(17, 19); this.lblReplyCount.TabIndex = 241; @@ -541,7 +547,7 @@ namespace TemuKJD.WXForms.TalkForms // this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(181, 6); + this.label7.Location = new System.Drawing.Point(275, 7); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(56, 17); this.label7.TabIndex = 240; @@ -551,7 +557,7 @@ namespace TemuKJD.WXForms.TalkForms // this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(1, 6); + this.label4.Location = new System.Drawing.Point(1, 7); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(56, 17); this.label4.TabIndex = 238; @@ -559,14 +565,14 @@ namespace TemuKJD.WXForms.TalkForms // // btnRefreshAfterSale // - this.btnRefreshAfterSale.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.btnRefreshAfterSale.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnRefreshAfterSale.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnRefreshAfterSale.Cursor = System.Windows.Forms.Cursors.Hand; this.btnRefreshAfterSale.DisabledBackColor = System.Drawing.Color.Empty; this.btnRefreshAfterSale.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnRefreshAfterSale.Location = new System.Drawing.Point(164, 93); + this.btnRefreshAfterSale.Location = new System.Drawing.Point(370, 66); this.btnRefreshAfterSale.Name = "btnRefreshAfterSale"; - this.btnRefreshAfterSale.Size = new System.Drawing.Size(162, 26); + this.btnRefreshAfterSale.Size = new System.Drawing.Size(122, 25); this.btnRefreshAfterSale.Style.Alignment = System.Drawing.StringAlignment.Center; this.btnRefreshAfterSale.Style.BackColor1.Color = System.Drawing.Color.White; this.btnRefreshAfterSale.Style.BackColor2.Color = System.Drawing.Color.White; @@ -584,7 +590,8 @@ namespace TemuKJD.WXForms.TalkForms // // cmbFiltNotes // - this.cmbFiltNotes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.cmbFiltNotes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.cmbFiltNotes.DefaultText = "全部"; this.cmbFiltNotes.DropDownHeight = 1; this.cmbFiltNotes.DropDownWidth = 1; @@ -592,18 +599,18 @@ namespace TemuKJD.WXForms.TalkForms this.cmbFiltNotes.IntegralHeight = false; this.cmbFiltNotes.Location = new System.Drawing.Point(61, 66); this.cmbFiltNotes.Name = "cmbFiltNotes"; - this.cmbFiltNotes.Size = new System.Drawing.Size(210, 25); + this.cmbFiltNotes.Size = new System.Drawing.Size(252, 25); this.cmbFiltNotes.TabIndex = 0; this.cmbFiltNotes.Text = "全部"; // // panelEx1 // - this.panelEx1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.panelEx1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.panelEx1.Cursor = System.Windows.Forms.Cursors.Hand; this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; this.panelEx1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.panelEx1.Location = new System.Drawing.Point(273, 41); + this.panelEx1.Location = new System.Drawing.Point(315, 41); this.panelEx1.Name = "panelEx1"; this.panelEx1.Size = new System.Drawing.Size(53, 23); this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -623,7 +630,8 @@ namespace TemuKJD.WXForms.TalkForms // // txtFiltShopName // - this.txtFiltShopName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.txtFiltShopName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); // // // @@ -632,17 +640,17 @@ namespace TemuKJD.WXForms.TalkForms this.txtFiltShopName.Location = new System.Drawing.Point(61, 41); this.txtFiltShopName.Name = "txtFiltShopName"; this.txtFiltShopName.PreventEnterBeep = true; - this.txtFiltShopName.Size = new System.Drawing.Size(210, 23); + this.txtFiltShopName.Size = new System.Drawing.Size(252, 23); this.txtFiltShopName.TabIndex = 202; // // btnFilterShop // - this.btnFilterShop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.btnFilterShop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnFilterShop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnFilterShop.Cursor = System.Windows.Forms.Cursors.Hand; this.btnFilterShop.DisabledBackColor = System.Drawing.Color.Empty; this.btnFilterShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnFilterShop.Location = new System.Drawing.Point(273, 66); + this.btnFilterShop.Location = new System.Drawing.Point(315, 66); this.btnFilterShop.Name = "btnFilterShop"; this.btnFilterShop.Size = new System.Drawing.Size(53, 25); this.btnFilterShop.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -662,14 +670,14 @@ namespace TemuKJD.WXForms.TalkForms // // pnlRefreshShop // - this.pnlRefreshShop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.pnlRefreshShop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.pnlRefreshShop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.pnlRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; this.pnlRefreshShop.DisabledBackColor = System.Drawing.Color.Empty; this.pnlRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.pnlRefreshShop.Location = new System.Drawing.Point(0, 93); + this.pnlRefreshShop.Location = new System.Drawing.Point(370, 41); this.pnlRefreshShop.Name = "pnlRefreshShop"; - this.pnlRefreshShop.Size = new System.Drawing.Size(162, 26); + this.pnlRefreshShop.Size = new System.Drawing.Size(122, 23); this.pnlRefreshShop.Style.Alignment = System.Drawing.StringAlignment.Center; this.pnlRefreshShop.Style.BackColor1.Color = System.Drawing.Color.White; this.pnlRefreshShop.Style.BackColor2.Color = System.Drawing.Color.White; @@ -707,10 +715,12 @@ namespace TemuKJD.WXForms.TalkForms // // line1 // - this.line1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.line1.Location = new System.Drawing.Point(0, 20); + this.line1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.line1.ForeColor = System.Drawing.Color.Silver; + this.line1.Location = new System.Drawing.Point(4, 26); this.line1.Name = "line1"; - this.line1.Size = new System.Drawing.Size(326, 23); + this.line1.Size = new System.Drawing.Size(487, 10); this.line1.TabIndex = 242; this.line1.Text = "line1"; // @@ -725,7 +735,7 @@ namespace TemuKJD.WXForms.TalkForms this.ucTabControl1.Name = "ucTabControl1"; this.ucTabControl1.SelectedIndex = 0; this.ucTabControl1.ShowCloseButton = false; - this.ucTabControl1.Size = new System.Drawing.Size(1167, 618); + this.ucTabControl1.Size = new System.Drawing.Size(997, 618); this.ucTabControl1.TabIndex = 0; this.ucTabControl1.TabSelectColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); this.ucTabControl1.TabTextColor = System.Drawing.Color.Gray; @@ -736,7 +746,7 @@ namespace TemuKJD.WXForms.TalkForms this.tabPage1.Location = new System.Drawing.Point(2, 30); this.tabPage1.Name = "tabPage1"; this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(1161, 584); + this.tabPage1.Size = new System.Drawing.Size(991, 584); this.tabPage1.TabIndex = 0; this.tabPage1.Text = "客服窗口"; this.tabPage1.UseVisualStyleBackColor = true; @@ -759,7 +769,7 @@ namespace TemuKJD.WXForms.TalkForms // splitContainer3.Panel2 // this.splitContainer3.Panel2.Controls.Add(this.pnlTalk); - this.splitContainer3.Size = new System.Drawing.Size(1155, 578); + this.splitContainer3.Size = new System.Drawing.Size(985, 578); this.splitContainer3.SplitterDistance = 25; this.splitContainer3.TabIndex = 2; // @@ -796,7 +806,7 @@ namespace TemuKJD.WXForms.TalkForms this.btnToKfMainPage.Cursor = System.Windows.Forms.Cursors.Hand; this.btnToKfMainPage.DisabledBackColor = System.Drawing.Color.Empty; this.btnToKfMainPage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnToKfMainPage.Location = new System.Drawing.Point(1068, 2); + this.btnToKfMainPage.Location = new System.Drawing.Point(898, 2); this.btnToKfMainPage.Name = "btnToKfMainPage"; this.btnToKfMainPage.Size = new System.Drawing.Size(88, 23); this.btnToKfMainPage.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -849,25 +859,49 @@ namespace TemuKJD.WXForms.TalkForms this.txtAddress.Location = new System.Drawing.Point(66, 1); this.txtAddress.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.txtAddress.Name = "txtAddress"; - this.txtAddress.Size = new System.Drawing.Size(1000, 23); + this.txtAddress.Size = new System.Drawing.Size(830, 23); this.txtAddress.TabIndex = 12; this.txtAddress.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtAddress_KeyDown); // // pnlTalk // + this.pnlTalk.Controls.Add(this.chkIsAutoReLogin); + this.pnlTalk.Controls.Add(this.txtAutoReplyText); this.pnlTalk.Dock = System.Windows.Forms.DockStyle.Fill; this.pnlTalk.Location = new System.Drawing.Point(0, 0); this.pnlTalk.Name = "pnlTalk"; - this.pnlTalk.Size = new System.Drawing.Size(1155, 549); + this.pnlTalk.Size = new System.Drawing.Size(985, 549); this.pnlTalk.TabIndex = 1; // + // chkIsAutoReLogin + // + this.chkIsAutoReLogin.AutoSize = true; + this.chkIsAutoReLogin.Location = new System.Drawing.Point(18, 16); + this.chkIsAutoReLogin.Name = "chkIsAutoReLogin"; + this.chkIsAutoReLogin.Size = new System.Drawing.Size(99, 21); + this.chkIsAutoReLogin.TabIndex = 2; + this.chkIsAutoReLogin.Text = "掉线自动重登"; + this.chkIsAutoReLogin.UseVisualStyleBackColor = true; + this.chkIsAutoReLogin.Visible = false; + // + // txtAutoReplyText + // + this.txtAutoReplyText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtAutoReplyText.Location = new System.Drawing.Point(18, 45); + this.txtAutoReplyText.Multiline = true; + this.txtAutoReplyText.Name = "txtAutoReplyText"; + this.txtAutoReplyText.Size = new System.Drawing.Size(156, 50); + this.txtAutoReplyText.TabIndex = 1; + this.txtAutoReplyText.Visible = false; + // // tabPage2 // this.tabPage2.Controls.Add(this.mainPanel); this.tabPage2.Location = new System.Drawing.Point(2, 30); this.tabPage2.Name = "tabPage2"; this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(1161, 584); + this.tabPage2.Size = new System.Drawing.Size(991, 584); this.tabPage2.TabIndex = 1; this.tabPage2.Text = "店铺后台"; this.tabPage2.UseVisualStyleBackColor = true; @@ -877,7 +911,7 @@ namespace TemuKJD.WXForms.TalkForms this.mainPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.mainPanel.Location = new System.Drawing.Point(3, 3); this.mainPanel.Name = "mainPanel"; - this.mainPanel.Size = new System.Drawing.Size(1155, 578); + this.mainPanel.Size = new System.Drawing.Size(985, 578); this.mainPanel.TabIndex = 1; // // ColumnShopStatus @@ -991,6 +1025,8 @@ namespace TemuKJD.WXForms.TalkForms this.splitContainer3.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); this.splitContainer3.ResumeLayout(false); + this.pnlTalk.ResumeLayout(false); + this.pnlTalk.PerformLayout(); this.tabPage2.ResumeLayout(false); this.ResumeLayout(false); @@ -1034,15 +1070,6 @@ namespace TemuKJD.WXForms.TalkForms private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label2; private DevComponents.DotNetBar.PanelEx btnRefreshAfterSale; - private UserComponent.UcDataGridViewCheckBoxColumn colSelect; - private System.Windows.Forms.DataGridViewTextBoxColumn colShopLoginName; - private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; - private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; - private System.Windows.Forms.DataGridViewTextBoxColumn colShopNotes; - private System.Windows.Forms.DataGridViewLinkColumn colLoginStatus; - private System.Windows.Forms.DataGridViewTextBoxColumn colAfterSale; - private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; - private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; private System.Windows.Forms.SplitContainer splitContainer3; private System.Windows.Forms.TextBox txtAddress; private DevComponents.DotNetBar.PanelEx btnNext; @@ -1056,5 +1083,17 @@ namespace TemuKJD.WXForms.TalkForms private DevComponents.DotNetBar.PanelEx btnRefreshMsgCount; private System.Windows.Forms.Label lblTalkCount; private System.Windows.Forms.Label label6; + private UserComponent.UcDataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopLoginName; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopNotes; + private System.Windows.Forms.DataGridViewLinkColumn colLoginStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private System.Windows.Forms.DataGridViewTextBoxColumn colWaitSend; + private System.Windows.Forms.DataGridViewTextBoxColumn colWayBillError; + private System.Windows.Forms.DataGridViewTextBoxColumn colAfterSale; + private System.Windows.Forms.DataGridViewTextBoxColumn colScore; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; } } \ No newline at end of file diff --git a/TEMUKJD/WXForms/TalkForms/WxTalkForm.cs b/TEMUKJD/WXForms/TalkForms/WxTalkForm.cs index 78a6b19..20279f0 100644 --- a/TEMUKJD/WXForms/TalkForms/WxTalkForm.cs +++ b/TEMUKJD/WXForms/TalkForms/WxTalkForm.cs @@ -27,13 +27,21 @@ using TemuKJD.Helper; using TemuKJD.ToolForms; using TemuKJD.WXForms.ShopForms; using TemuKJD.WXForms.TalkForms.TalkHelper; +using TemuKJD.WXForms.TalkForms.TalkModel; namespace TemuKJD.WXForms.TalkForms { public partial class WxTalkForm : BaseTalkForm { + public static List> LstTalkTemplatePair { get; set; } = null; + public ConcurrentList lstShopKfStatistics = new ConcurrentList(); - public ConcurrentList lstShopAfterSale = new ConcurrentList(); + public ConcurrentList lstShopAfterSale = new ConcurrentList(); + + /// + /// 等待自动回复的消息队列 + /// + public ConcurrentList lstAutoReplayParam = new ConcurrentList(); public delegate void SearchResultReceivedHandler(ShopLoginInfo shop); /// @@ -56,6 +64,7 @@ namespace TemuKJD.WXForms.TalkForms /// public static List lstChatMessageForm = new List(); public static Dictionary dicRowColor = new Dictionary(); + public List LstTagShop = new List(); public int LocationXY = 0; public int LocationSize = 200; @@ -83,20 +92,33 @@ namespace TemuKJD.WXForms.TalkForms //SetTitle(); + // 点击变绿的按钮 + LstTagShop = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("wx_talk_tag_shop_list"); + if (LstTagShop == null) + LstTagShop = new List(); + + // 初始化自动回复话术 + InitAutoReply(); + //this.chkIsAutoReLogin.CheckedChanged -= chkIsAutoReLogin_CheckedChanged; //this.chkIsAutoReply.CheckedChanged -= chkIsAutoReply_CheckedChanged; //this.txtAutoReplyText.TextChanged -= txtAutoReplyText_TextChanged; //this.cmbMessage.SelectedIndexChanged -= cmbMessage_SelectedIndexChanged; + + this.chkNotShowMessageWindow.CheckedChanged -= chkNotShowMessageWindow_CheckedChanged; if (this.cmbMessage.Items.Contains(ChatConfig.ChatSettingConfig.MessageSound)) this.cmbMessage.SelectedItem = ChatConfig.ChatSettingConfig.MessageSound; else this.cmbMessage.SelectedIndex = 0; this.chkIsAutoReply.Checked = ChatConfig.ChatSettingConfig.IsAutoReply; this.txtAutoReplyText.Text = ChatConfig.ChatSettingConfig.AutoReplayText; + this.chkNotShowMessageWindow.Checked = ChatConfig.ChatSettingConfig.IsNotShowMessageWindow; + this.chkIsAutoReLogin.CheckedChanged += chkIsAutoReLogin_CheckedChanged; this.chkIsAutoReply.CheckedChanged += chkIsAutoReply_CheckedChanged; this.txtAutoReplyText.TextChanged += txtAutoReplyText_TextChanged; this.cmbMessage.SelectedIndexChanged += cmbMessage_SelectedIndexChanged; + this.chkNotShowMessageWindow.CheckedChanged += chkNotShowMessageWindow_CheckedChanged; SearchResultReceived += Chat_SearchResultReceived; InfomationReceived += Collect_InfomationReceived; @@ -114,6 +136,7 @@ namespace TemuKJD.WXForms.TalkForms mainWebBrowser.FrameLoadEnd += cefWebBrowser1_FrameLoadEnd; mainPanel.Controls.Add(mainWebBrowser); } + Task.Run(() => { // 直到店铺加载完后再加载客服内容 @@ -130,9 +153,9 @@ namespace TemuKJD.WXForms.TalkForms this.cmbFiltNotes.Items.Add(shopNote); } - lstShopAfterSale = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("wx_shop_after_sale_list"); + lstShopAfterSale = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("wx_shop_after_sale_list"); if (lstShopAfterSale == null) - lstShopAfterSale = new ConcurrentList(); + lstShopAfterSale = new ConcurrentList(); //RefreshAfterSale(); })); @@ -170,6 +193,124 @@ namespace TemuKJD.WXForms.TalkForms } }); + // 关闭弹窗 + //if (chkIsAutoReply.Checked) + ClosePopWindow(); + + // 自动回复 + Task.Run(() => + { + while (true) + { + //if (lstAutoReplayParam.Count > 0) + // lstAutoReplayParam.Clear(); + + if (chkIsAutoReply.Checked && 1==1) + { + while (lstAutoReplayParam.Count > 0) + { + AutoReplayParam autoReplayParam = lstAutoReplayParam.FirstOrDefault(); + var autoReplayParamLst = lstAutoReplayParam.Where(r => r.nickName == autoReplayParam.nickName).ToList(); + var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == autoReplayParam.shopId); + if (shop == null) + continue; + + // 选择正确的用户 + var jsStr1 = @"function clickUser() { + var users = document.getElementsByClassName('user-nickname'); + for (i=0; i lstAutoReplayParam.Any(a => t.Key.Split('|').Any(k => !k.IsNullOrEmpty() && a.talkContent == k))) + .OrderBy(x => Randomx.GetId(100000)).ToList(); + // 分割完整语句匹配(过滤标点符号) + if (replyContentLst.Count == 0) + replyContentLst = LstTalkTemplatePair + .Where(t => lstAutoReplayParam.Any(a => t.Key.Split('|').Any(k => !k.IsNullOrEmpty() && a.talkContent.Trim('?', '?', ',', ',', '.', '。', '!', '!') == k))) + .OrderBy(x => Randomx.GetId(100000)).ToList(); + // 反向包含匹配 + if (replyContentLst.Count == 0) + replyContentLst = LstTalkTemplatePair.Where(t => lstAutoReplayParam.Any(a => a.talkContent.Contains(t.Key))).OrderBy(x => Randomx.GetId(100000)).ToList(); + + // 不能匹配的发默认消息 + if (replyContentLst.Count == 0) + replyContentLst = LstTalkTemplatePair.Where(t => t.Key.IsNullOrEmpty()).OrderBy(x => Randomx.GetId(100000)).ToList(); + if (replyContentLst.Count > 0) + replyContent = replyContentLst.FirstOrDefault().Value; + shop.Chat.GetBrowser().MainFrame.EvaluateScriptAsync(KJDForms.ShopForms.ShopLoginForm.sInputValueChange2); + jsStr1 = "var txtarea = document.getElementById('input-textarea'); " + + "changeReactInputValue(txtarea,'" + replyContent + "');"; + response1 = shop.Chat.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + response1.Wait(2000); + Thread.Sleep(Randomx.GetId(100, 200)); + + // 点击回车发送自动回复 + jsStr1 = @"var event = new KeyboardEvent('keydown', { + key: 'Enter', + keyCode: 13, + code: 'Enter', + which: 13 + }); + txtarea.dispatchEvent(event);"; + response1 = shop.Chat.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + response1.Wait(2000); + + // 删除队列里的消息 + lstAutoReplayParam.RemoveAll(r => r.nickName == autoReplayParam.nickName); + + Thread.Sleep(Randomx.GetId(100, 200)); + } + } + Thread.Sleep(1000); + } + }); + } + + void ClosePopWindow() + { + Task.Run(() => + { + for (int i = 0; i < 120; i++) + { + foreach (var shop in GlobalConfig.ShopLoginList) + { + if (shop.Chat?.IsBrowserInitialized != true) + continue; + + //关闭弹窗 + var jsStr1 = @"var btnLst = document.getElementsByTagName('button'); + for (i=0;i().FirstOrDefault(x => x.Cells["colShopId"].Value.ToString() == shopAfterSale.ShopId); if (r != null) { r.Cells["colMessage"].Value = msg; r.Cells["colAfterSale"].Value = shopAfterSale.AfterSaleCount; - r.Cells["colAfterSale"].Style.ForeColor = shopAfterSale.AfterSaleCount > 0 ? Color.Red : Color.Black; + r.Cells["colAfterSale"].Style.ForeColor = shopAfterSale.AfterSaleCount > 0 ? Color.OrangeRed : Color.Black; + r.Cells["colWaitSend"].Value = shopAfterSale.WaitSendCount; + r.Cells["colWaitSend"].Style.ForeColor = shopAfterSale.WaitSendCount > 0 ? Color.OrangeRed : Color.Black; + r.Cells["colWaybillError"].Value = shopAfterSale.WaybillError; + r.Cells["colWaybillError"].Style.ForeColor = shopAfterSale.WaybillError > 0 ? Color.OrangeRed : Color.Black; + r.Cells["colScore"].Value = shopAfterSale.ShopScore.IsNullOrEmpty() ? "-" : shopAfterSale.ShopScore.ParseToString(); } } @@ -418,6 +565,9 @@ namespace TemuKJD.WXForms.TalkForms if (row == null) return; + string nickName = ""; + string talkContent = ""; + if (url.Contains("action=get_nosession_summary")) { //{"base_resp":{"err_msg":"ok","ret":0},"list":[{"session_status":1,"summary":{"accept_by_robot":2,"accept_by_robot_time":"0","complaint_info":{"complaint_expire_time":0,"complaint_id":"0"},"extra_info":"{\"head_img\":\"http:\\/\\/wx.qlogo.cn\\/mmhead\\/Q3auHgzwzM6vehibAAib9ia4ejxH7ibula7RuH4rTO7H7equgOZPVZl5Ew\\/64\",\"nickname\":\"Vader\",\"list\":[],\"qa_info_list\":[]}","id":"1","is_delete":0,"lastest_msg_content":"","lastest_msg_id":"4348928114244206592","lastest_msg_kf_content":"{\"content\":\"你好\"}","lastest_user_msg_time":"1768807915","msg_type":1,"recv_open_account":"wxf4460bce24e5d58d","recv_openid":"","room_id":"4348927951587721218","scene":6,"send_open_account":"","send_openid":"o9cq802Ue5pCVRmzuzkFUcnoHjcM","send_scene":6,"unread_msg_num":"1","unreplied_msg_time":"1768807915","update_time":"1768807915"}}],"num":1} @@ -464,12 +614,45 @@ namespace TemuKJD.WXForms.TalkForms var send_open_account = summaryObj["send_open_account"].ParseToString(); if (send_open_account == shop.ShopId) continue; - // 虽然没有回复,但是最后一条消息是两天以前收到的,返回 + // 虽然没有回复,但是最后一条消息是一天以前收到的,返回 var lastUpTime = summaryObj["update_time"].ParseToLong(); - if (lastUpTime < BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddDays(-2))) + if (lastUpTime < BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddDays(-1))) continue; // 其他情况,标记需要回复 needReply = true; + + + // 历史消息自动回复 + if (chkIsAutoReply.Checked) + { + //lastest_msg_kf_content + var msgObj = summaryObj; + //var msgStr = JsonHelper.SerializeObject(msgObj); + // 用户发送商品信息 + if ((msgObj?["msg_type"]).ParseToInt() == 11) + { + talkContent = ""; + } + else if ((msgObj?["recv_open_account"]).ParseToString() == shop.ShopId) + { + var contentObj = (msgObj?["lastest_msg_kf_content"]).ParseToString(); + var content = BaseRegex.GetStringJson(ref contentObj, "content").ParseToString(); + talkContent = content; + } + + string extra_info = (msgObj?["extra_info"]).ParseToString(); + var extraInfoObj = JsonHelper.JObjectParse(extra_info); + nickName = (extraInfoObj?["nickname"]).ParseToString(); + if (chkIsAutoReply.Checked && !string.IsNullOrWhiteSpace(nickName)) + { + lstAutoReplayParam.Add(new AutoReplayParam() + { + nickName = nickName, + shopId = shop.ShopId, + talkContent = talkContent, + }); + } + } } catch { @@ -519,7 +702,7 @@ namespace TemuKJD.WXForms.TalkForms } var msg_kf_content = jObj["list"].LastOrDefault(l => !JsonHelper.SerializeObject(l).Contains("更新房间游标"))?["msg_kf_content"].ParseToString(); var contentObj = JsonHelper.JObjectParse(msg_kf_content); - var content = contentObj["content"].ParseToString(); + var content = (contentObj?["content"]).ParseToString(); //if (content.Contains("更新房间游标")) // return; @@ -530,6 +713,7 @@ namespace TemuKJD.WXForms.TalkForms // 你已超过10分钟未回复该会话,请及时处理。 // 超过48小时未回复用户,会话已结束 // {"base_resp":{"err_msg":"ok","ret":0},"kf_openid":"o9cq801T0m1dIivQzMyUwBvW5Znk","list":[{"accept_by_robot":0,"async_check_spam_stage":0,"client_ms":"1768806150100","create_time":"1768806150","create_time_ms":"1768806150100","encrypt_msg_kf_content":"","extra_info":"{\"head_img\":\"http:\\/\\/wx.qlogo.cn\\/mmhead\\/Q3auHgzwzM6vehibAAib9ia4ejxH7ibula7RuH4rTO7H7equgOZPVZl5Ew\\/64\",\"nickname\":\"Vader\",\"list\":[],\"qa_info_list\":[]}","id":"31","imunion_msg_id":"mmec-commkf-v2-4348898496719831040","insert_create_time_ms":"1768806150148","is_anonymous_msg":0,"is_delete":0,"is_expired":0,"is_fail":0,"is_hit_spam":0,"is_revoked":0,"is_sys_msg":1,"msg_direction":3,"msg_id":"4348898496719831040","msg_kf_content":"{\"type\":\"EndRoom\",\"content\":\"用户超时未回,会话已结束,两天内仍可再次联系\",\"room_id\":\"4348684483414425612\",\"msg_id\":\"4348898496719831040\",\"is_anonymous_msg\":0,\"need_update_summary\":1}","msg_type":5,"properties":"0","recv_open_account":"wxad4163db54e87b44","recv_openid":"o9cq801T0m1dIivQzMyUwBvW5Znk","reply_type":0,"room_id":"4348684483414425612","room_useruin":"0","scene":6,"send_open_account":"","send_openid":"o9cq802Ue5pCVRmzuzkFUcnoHjcM","send_scene":6,"session_id":"0","update_time":"1768806150"}],"total_num":1} + //{"base_resp":{"err_msg":"ok","ret":0},"kf_openid":"o9cq801T0m1dIivQzMyUwBvW5Znk","list":[{"accept_by_robot":2,"async_check_spam_stage":0,"client_ms":"1773134620500","create_time":"1773134620","create_time_ms":"1773134621082","encrypt_msg_kf_content":"","extra_info":"{\"head_img\":\"http:\\/\\/wx.qlogo.cn\\/mmhead\\/Q3auHgzwzM6vehibAAib9ia4ejxH7ibula7RuH4rTO7H7equgOZPVZl5Ew\\/64\",\"nickname\":\"Vader\",\"unread_msg_num\":1,\"list\":[],\"qa_info_list\":[]}","id":"2280","imunion_msg_id":"4875563441394659225","insert_create_time_ms":"1773134621580","is_anonymous_msg":0,"is_delete":0,"is_expired":0,"is_fail":0,"is_hit_spam":0,"is_revoked":0,"is_sys_msg":0,"msg_direction":1,"msg_id":"4421518190792900611","msg_kf_content":"{\"content\":\"有优惠吗?\"}","msg_type":1,"properties":"0","recv_open_account":"wxf4460bce24e5d58d","recv_openid":"o9cq801T0m1dIivQzMyUwBvW5Znk","reply_type":0,"room_id":"4348927951587721218","room_useruin":"0","scene":6,"send_open_account":"","send_openid":"o9cq802Ue5pCVRmzuzkFUcnoHjcM","send_scene":6,"session_id":"4421510266814349317","update_time":"1773134621"}],"total_num":1} if (content.Contains("用户超时未回,会话已结束,两天内仍可再次联系")) return; if (content.Contains("会话已结束")) @@ -545,6 +729,7 @@ namespace TemuKJD.WXForms.TalkForms //if (content.Contains("用户已接入")) // return; + //msg_type 11 发送商品 //content {"finder_live_id":"","finder_username":"","finder_object_id":"","finder_nonce_id":"","app_id":"wxca8d4b8e8feedc2a","page_path":"main/pages/productDetail/productDetail.html?productId=10000458846351&realappid=wxad4163db54e87b44&cacheKey=5e17e5db9339a95043ba1f8a3d02454d&cacheType=backup&businessId=1&requestId=4349008357285756937&subScene=1208","product_id":"10000458846351","cover_url":"https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/695a8faa000d37b31b2e9b6f55e91715000000a100004f50?imageView2/1/w/400/h/400/q/50","product_title":"旗袍复古国风外套新款加绒中老年时尚中式盘扣妈妈唐装开衫上衣女","market_price":"0","selling_price":"15895","platform_head_img":"http://mmbiz.qpic.cn/mmbiz_jpg/v9IeicMmfib92I87ia9hWs58ozuHZ8CRk6jyf6qgLwzibNSjAPekLzdf7yxOdQqR6od63tLH9s2zTxJbuqVTs6E19w/0?wx_fmt=jpeg/0","platform_name":"曼月森工厂店","shop_window_id":"","live_status":"","flash_sale_price":0,"flash_sale_end_time":0,"ec_source":"","selling_price_wording":"","ext_conv":{"ext_conv_type":1,"ec_product_url":"https://channels.weixin.qq.com/shop?login_appid=wxad4163db54e87b44&redirect_url=%2Fgoods%2Fentry%3FproductId%3D10000458846351","context":""}} var product_title = BaseRegex.GetStringJson(ref content, "product_title"); if (!string.IsNullOrWhiteSpace(product_title)) @@ -552,6 +737,36 @@ namespace TemuKJD.WXForms.TalkForms // 在消息格子内显示消息 row.Cells["colMessage"].Value = content; + + + // 即时消息自动回复 + if(chkIsAutoReply.Checked) + { + var msgObj = jObj["list"].LastOrDefault(l => !JsonHelper.SerializeObject(l).Contains("更新房间游标")); + //var msgStr = JsonHelper.SerializeObject(msgObj); + // 用户发送商品信息 + if ((msgObj?["msg_type"]).ParseToInt() == 11) + { + talkContent = ""; + } + else if ((msgObj?["recv_open_account"]).ParseToString() == shop.ShopId) + { + talkContent = content; + } + + string extra_info = (msgObj?["extra_info"]).ParseToString(); + var extraInfoObj = JsonHelper.JObjectParse(extra_info); + nickName = (extraInfoObj?["nickname"]).ParseToString(); + if (chkIsAutoReply.Checked && !string.IsNullOrWhiteSpace(nickName)) + { + lstAutoReplayParam.Add(new AutoReplayParam() + { + nickName = nickName, + shopId = shop.ShopId, + talkContent = talkContent, + }); + } + } } catch { @@ -571,10 +786,6 @@ namespace TemuKJD.WXForms.TalkForms FlashDgvRow(row); // 播放声音 playSound(); - // 消息弹框,暂时废弃 - if (!ChatConfig.ChatSettingConfig.IsNotShowMessageWindow) - { - } }); } @@ -839,6 +1050,19 @@ namespace TemuKJD.WXForms.TalkForms ChatConfig.SaveChatSettingParam(); } + private void chkNotShowMessageWindow_CheckedChanged(object sender, EventArgs e) + { + ChatConfig.ChatSettingConfig.IsNotShowMessageWindow = chkNotShowMessageWindow.Checked; + ChatConfig.SaveChatSettingParam(); + + } + + private void pnlSet_Click(object sender, EventArgs e) + { + TalkAutoReplyConfigForm autoReplyConfigForm = new TalkAutoReplyConfigForm(LstTalkTemplatePair); + autoReplyConfigForm.ShowDialog(); + } + private void Chat_SearchResultReceived(ShopLoginInfo shop) { //var r = dgvShop.Rows.Cast().FirstOrDefault(x => x.Cells["columnShopId"].Value.ToString() == shop.ShopId); @@ -924,6 +1148,36 @@ namespace TemuKJD.WXForms.TalkForms } } + + + private void dgvShop_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + if (e.Button != MouseButtons.Right) + return; + + string shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value?.ToString(); + if (string.IsNullOrEmpty(shopId)) + return; + var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId); + if (shop == null) + return; + + if (!LstTagShop.Contains(shop.ShopId)) + { + LstTagShop.Add(shop.ShopId); + dgvShop.Rows[e.RowIndex].Cells["colShopName"].Style.ForeColor = Color.Green; + } + else + { + LstTagShop.Remove(shop.ShopId); + dgvShop.Rows[e.RowIndex].Cells["colShopName"].Style.ForeColor = DefaultForeColor; + } + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("wx_talk_tag_shop_list", LstTagShop); + } + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) @@ -961,7 +1215,6 @@ namespace TemuKJD.WXForms.TalkForms } }); } - } private void dgvShop_CellClick(object sender, DataGridViewCellEventArgs e) @@ -1020,7 +1273,11 @@ namespace TemuKJD.WXForms.TalkForms var r = dgvShop.Rows.Cast().FirstOrDefault(x => x.Cells["colShopId"].Value.ToString() == shop.ShopId); if (r != null) { - r.Cells[0].Selected = true; + Invoke(new Action(() => + { + //r.Cells[1].Selected = true; + r.Selected = true; + })); var sender = this.dgvShop; DataGridViewCellEventArgs e = new DataGridViewCellEventArgs(0, r.Index); dgvShop_CellClick(sender, e); @@ -1115,17 +1372,17 @@ namespace TemuKJD.WXForms.TalkForms lstShopAfterSale.Clear(); foreach (var shop in GlobalConfig.ShopLoginList) { - var afterInfo = lstShopAfterSale.FirstOrDefault(sa => sa.ShopId == shop.ShopId); - if (afterInfo == null) - afterInfo = new WxShopAfterSaleInfo() { ShopId = shop.ShopId }; - Invoke(new Action(() => { LoadShopAfterSale(afterInfo, ""); })); + var shopMainInfo = lstShopAfterSale.FirstOrDefault(sa => sa.ShopId == shop.ShopId); + if (shopMainInfo == null) + shopMainInfo = new WxTalkFormShopMainInfo() { ShopId = shop.ShopId }; + Invoke(new Action(() => { LoadShopAfterSale(shopMainInfo, ""); })); var t = Task.Run(() => { try { if (shop.LoginStatus != "登录成功") { - Invoke(new Action(() => { LoadShopAfterSale(new WxShopAfterSaleInfo() { ShopId = shop.ShopId }, "店铺掉线"); })); + Invoke(new Action(() => { LoadShopAfterSale(new WxTalkFormShopMainInfo() { ShopId = shop.ShopId }, "店铺掉线"); })); return; } @@ -1141,7 +1398,7 @@ namespace TemuKJD.WXForms.TalkForms WXShopListForm.Instance.CheckShopLogin(new ShopLoginInfo[] { shop }, false); if (shop.LoginStatus != "登录成功") { - Invoke(new Action(() => { LoadShopAfterSale(new WxShopAfterSaleInfo() { ShopId = shop.ShopId }, "店铺掉线"); })); + Invoke(new Action(() => { LoadShopAfterSale(new WxTalkFormShopMainInfo() { ShopId = shop.ShopId }, "店铺掉线"); })); return; } @@ -1151,16 +1408,46 @@ namespace TemuKJD.WXForms.TalkForms if (string.IsNullOrEmpty(errMsg)) errMsg = BaseRegex.GetStringJson(ref rst, "errmsg"); if (string.IsNullOrEmpty(errMsg)) errMsg = rst; - afterInfo = new WxShopAfterSaleInfo() { ShopId = shop.ShopId, RefreshTime = DateTime.Now }; - lstShopAfterSale.Add(afterInfo); - Invoke(new Action(() => { LoadShopAfterSale(afterInfo, "查询失败 " + errMsg); })); + shopMainInfo = new WxTalkFormShopMainInfo() { ShopId = shop.ShopId, RefreshTime = DateTime.Now }; + lstShopAfterSale.Add(shopMainInfo); + Invoke(new Action(() => { LoadShopAfterSale(shopMainInfo, "查询失败 " + errMsg); })); return; } var afterCount = JsonHelper.JObjectParse(rst)["aftersaleAllRet"]["totalNum"].ParseToInt(); - afterInfo = new WxShopAfterSaleInfo() { ShopId = shop.ShopId, RefreshTime = DateTime.Now, AfterSaleCount = afterCount }; - lstShopAfterSale.Add(afterInfo); - Invoke(new Action(() => { LoadShopAfterSale(afterInfo, "已查询"); })); + var waitSendCount = JsonHelper.JObjectParse(rst)["orderNumRet"]["pendingShipNum"].ParseToInt(); + var waybillErrorCount = JsonHelper.JObjectParse(rst)["waybillErrorRet"]["totalNum"].ParseToInt(); + shopMainInfo = new WxTalkFormShopMainInfo() + { + ShopId = shop.ShopId, + RefreshTime = DateTime.Now, + AfterSaleCount = afterCount, + WaitSendCount = waitSendCount, + WaybillError = waybillErrorCount, + }; + + var shopScoreRst = WxShopStatisticsForm.GetShopScore(shop); + System.Threading.Thread.Sleep(Randomx.GetId(50, 100)); + if (shopScoreRst.Contains("\"code\":0")) + { + shopMainInfo.ShopScore = BaseRegex.GetDecimalJson(ref shopScoreRst, "curValue"); + } + else + { + string errStr = BaseRegex.GetStringJson(ref shopScoreRst, "errorMsg"); + if (string.IsNullOrEmpty(errStr)) + errStr = BaseRegex.GetStringJson(ref shopScoreRst, "error_msg"); + if (string.IsNullOrEmpty(errStr)) + errStr = shopScoreRst; + WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + shopMainInfo.err_msg = errStr; + + Invoke(new Action(() => { LoadShopAfterSale(shopMainInfo, "评分查询失败 " + errStr); })); + return; + } + + lstShopAfterSale.Add(shopMainInfo); + Invoke(new Action(() => { LoadShopAfterSale(shopMainInfo, "已查询"); })); return; } } @@ -1248,5 +1535,98 @@ namespace TemuKJD.WXForms.TalkForms lblReplyCount.Text = lstShopKfStatistics.Sum(s => s.service_reply_ratio * 100 / count).ParseToDecimal().ToString("0.0") + "%"; })); } + + public static void InitAutoReply() + { + LstTalkTemplatePair = NaiBa.Util.Helper.ConfigHelper.LoadConfig>>("wx_talk_auto_reply_template"); + if (LstTalkTemplatePair == null) + { + UpdateAutoReply(defaultTalkTemplate); + } + } + public static void UpdateAutoReply(string talkTemplate) + { + LstTalkTemplatePair = new List>(); + var keyValueStrLst = talkTemplate.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var keyValueStr in keyValueStrLst) + { + if (keyValueStr.StartsWith("//")) + continue; + var keyValueLst = keyValueStr.Split(new string[] { "###" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + if (keyValueLst.Count == 1) + keyValueLst.Insert(0, ""); + LstTalkTemplatePair.Add(new KeyValuePair(keyValueLst.FirstOrDefault(), keyValueLst.LastOrDefault())); + } + NaiBa.Util.Helper.ConfigHelper.SaveConfig("wx_talk_auto_reply_template", LstTalkTemplatePair); + } + + public static string defaultTalkTemplate = @"###亲亲,客服人员正在仓库核实打包发货,您的问题我们记录好,客服小姐姐回来会为您解答哦! +###亲亲,在的呢亲亲,这款商品质量很好的呢,现在下单为您优先发出哦 +###亲,客户已经听到您的呼叫,请稍等! +###亲,客服正在来的路上喔,您看到的商品基本都是有货的,请放心购买! +###亲,如果您有什么疑问可以直接留言,客服看到了会记录下来的,没有及时回复您,真的非常抱歉! +###亲,您好,有什么需要帮助的吗~喜欢可以直接拍下哦,拍下后尽快给您安排发出~ +###目前顾客比较多哦,客服小姐姐一个一个回复呢,麻烦您耐心等待下 +###客服小姐姐加急回复哦,请您再稍等一下哦 +###亲,已经听到您的呼叫,请稍等! +###亲,客服正在来的路上喔,您看到的商品基本都是有货的,拍下后尽快给您安排发出~ +###亲,如果您有什么疑问可以直接留言,客服看到了会记录下来的,没有及时回复您,真的非常抱歉! +###需要可以拍下,这边尽快给您发出,不指定快递哦 +###若客服未及时回,可能是系统延迟,请留言,客服上线后处理,谢谢! +###客服正在仓库打包包裹,您可以先留言,看到消息后会及时回复~ +###亲,我会乐意为你服务。请收藏一下本小店,我们会不定期上新款。祝你网购愉快。 +###亲~ 不好意思,现在忙于打包发货中,有事请留言,晚点给你回复,谢谢! +###亲,我会乐意为你服务。收藏一下本小店,我们会不定期上新款。祝你网购愉快。 +快递###亲,我们根据您的收货地址选择最优的快递! +什么时候发货###亲,我们48小时内发货,一般我们都是当天发货的喔 +什么时候发货###亲,除(预售商品)外我们48小时内发货,一般我们都是当天发货的喔 +哪里发货###亲,我们全国多仓发货,尽快为您发出,随机发极兔,韵达,邮政等(暂不接受指定),一般24小时内发货,慢的48小时内按顺序发货,一般发货后省内1-2天,省外3-4天,偏远地区可能会稍慢一些 +备注一下|标注一下|注明一下###好的,亲!我会为您备注的! +您好|老板|店家|哈喽|嗨|亲|亲你好|亲,你好###在的,亲!很高兴能为您服务,请问有什么可以帮到您? +晕!|哦!|喔!|恩!|嗯!|奥!|好!|噢!|噢噢!|奥奥!|哦哦!|喔喔!|!|嗯嗯!|好的!###感谢您的支持呢亲! +退款|退款吧|退了|退了吧|不要了|买错了|退货###亲,如您未收到货,可直接申请仅退款,如已收到货,退款步骤-个人中心-订单与卡包-申请退款-【我要退货退款】(不是 我要退款)-申请原因-选择第一个【多拍/拍错/不想要】或最后一个【其他】,退货申请会秒通过并自动发送地址给亲的哦。拒收平邮及到付哦!注意:申请通过后请及时填写退货单号,超时会自动关闭退款哦! +麻烦了###不客气的,亲! +答复|回答###好的,亲!有结果我们会第一时间答复您的! +说句话|说话|回话|回个话###在的,亲!我正在想怎样回答您呢,能把问题具体再说一下吗? +好了吗|可以了吗###亲稍等,正在为您核实处理! +有货吗|有货?|还有货###亲:我们的库存是很充足得哦。放心好了。 +么回事|咋回事|怎么办|咋办###亲,您不要着急,请把事情的具体情况和我说明一下,如果有图片也最好提供一下,我们会为您核实处理的哦! +什么情况###虽然我也不清楚什么情况,但我们会为您处理好的哦! +您好|老板|店家|哈喽|嗨|亲|亲你好|亲,你好###在的,亲!很高兴能为您服务,请问有什么可以帮到您? +退款|退款吧|退了|退了吧|不要了|买错了###亲,如您未收到货,可直接申请仅退款,如已收到货,退款步骤-个人中心-订单与卡包-申请退款-【我要退货退款】(不是 我要退款)-申请原因-选择第一个【多拍/拍错/不想要】或最后一个【其他】,退货申请会秒通过并自动发送地址给亲的哦。拒收平邮及到付哦!注意:申请通过后请及时填写退货单号,超时会自动关闭退款哦! +么回事|咋回事|怎么办|咋办###亲,您不要着急,请把事情的具体情况和我说明一下,如果有图片也最好提供一下,我们会为您核实处理的哦! +怎么申请退货|申请退货|申请退款|怎么退|退###亲,退货步骤-个人中心-订单与卡包-申请退款-【我要退货退款】(不是 我要退款)-申请原因-选择第一个【多拍/拍错/不想要】或最后一个【其他】,退货申请会秒通过并自动发送地址给亲的哦。拒收平邮及到付哦!注意:申请通过后请及时填写退货单号,超时会自动关闭退款哦! +退了吧|我退款###亲,如您未收到货,可直接申请仅退款,如已收到货,退款步骤-个人中心-订单与卡包-申请退款-【我要退货退款】(不是 我要退款)-申请原因-选择第一个【多拍/拍错/不想要】或最后一个【其他】,退货申请会秒通过并自动发送地址给亲的哦。拒收平邮及到付哦!注意:申请通过后请及时填写退货单号,超时会自动关闭退款哦! +好评###非常感谢您的支持呢亲 +拍了|已拍|拼了|已买|已下单|现在拍|买好了|下单了|下好单了|下好了|买好了|买完了|拍好了|拍完了|拍下了|购买了|已购买|买单了|拼单成功###好的,亲!这边核实后会及时为您安排发出的哦! +同意一下|通过一下###好的,亲!我们的售后专员会及时为您处理的。 +差评###亲,差评并不是解决问题的办法,沟通才是最有效的哦,有任何问题欢迎与我们联系哦! +机器人###哈,我不是机器人,我是可爱的客服妹子哦!(*^__^*) ,您的问题我已经收到,不过现在有点小忙,稍等一会回复您哦! +我已经拼单成功###好的亲,这边通知仓库为您优先发货! +发货时间|发货###亲,除(预售商品)外我们48小时内发货,一般我们都是当天发货的喔 +发什么快递###亲,我们在全国有多个仓库,会根据您的收货地址和库存进行动态调配的,请您放心,商品一定会寄送到您手里! +什么时候发货###拍下后我们会尽快给您安排发出,拍下后亲耐心稍等哦~ +多久能到###亲,一般发货以后3天左右可以到货的呢,您收到货以后可以仔细检查一下,如有任何质量问题,7天内可以无条件退换货的。 +可以便宜###亲,非常抱歉,我们的定价已经是最低销售价格了呢,没有办法再优惠啦~~~ +质量问题###亲,我们是商城正品,质量都是有保证的,您这边可以完全放心拍下哦。。。我们支持7天无理由退货的。 +包邮###亲,我们是全场包邮的喔,请放心拍下。 +我考虑###亲,可以的,等你考虑清楚了再下单,我们尽快给您安排发货。 +物流慢###亲,非常抱歉,最近物流比较繁忙,发货比较慢(容易出错),您这边先不要着急,我先联系一下快递公司询问一下具体是什么情况好吗?然后根据具体情况具体解决。 +质量问题###亲,请您放心哦,如果是我们的质量问题,这边一定会为您处理好的, 您需要配合一下 请您发拍张有质量问题处的图片给我们,好吧? +是否有货###亲,您看中的这款宝贝是有现货的呢,您可以放心拍哦O(_)O~ +质量怎么样###我们是厂家直接供货,质量绝对保证。保证正品 +//不放卡片|不放清单###好的,亲!我会为您备注不放卡片清单的! +//已联系卖家尽快为您发|催发货###好的,亲!我们会尽快为您安排发货的哦! +//商家同意退货,请及时退货###亲,退货后请记得填写退货运单号,方便我们及时为您处理哦! +//申请未同意,待买家处理###亲,由于快递还在运输途中或已经签收,我们暂时不能同意您的退款,待与快递核实后我们会及时为您处理的哦! +//物流投诉|我已提交投诉物流单###亲,您的诉求我们已经收到,请不要着急,我们马上联系快递加急处理! +//纠纷预警,请立即跟进###亲,有什么问题可以随时与我们联系,我们将竭诚为您服务! +//开启商品卡片自动回复###亲,您的眼光真好,这款产品不仅价格实惠,质量也是非常好的哦! +//当前用户来自###亲,您正在看的这款宝贝有货的哦,请问有什么可以帮到您? +//商家购买退货包运费服务后###亲,您拍下商品前,商品标题后显示【退货包运费】的,表示此商品有运费险,当您拍下后订单详情显示运费险生效中就表示此订单您享有运费险的。 +//催处理售后###亲,稍安勿躁,我们的售后专员会及时为您处理的哦! +//催发货###亲,您的订单我们已经收到,仓库正在为您进行质量检查,确认无误后就会发出的哦! +//订单编号###亲,您的这笔订单已核实,请问是遇到什么问题了呢? +//退款成功###亲,您的退款已办理成功,欢迎下次光临哦!"; } } diff --git a/TEMUKJD/WXForms/TalkForms/WxTalkForm.resx b/TEMUKJD/WXForms/TalkForms/WxTalkForm.resx index eb261fa..b76bbb2 100644 --- a/TEMUKJD/WXForms/TalkForms/WxTalkForm.resx +++ b/TEMUKJD/WXForms/TalkForms/WxTalkForm.resx @@ -132,13 +132,22 @@ True + + True + + + True + + + True + True - + True - + True