微信自动回复功能

This commit is contained in:
wule committed 2026-03-11 15:42:24 +08:00
1 parent ccde645d98
commit dc83334c59
12 files changed
+1126 -153

No files matched your search

+10
View File
@@ -1076,6 +1076,12 @@
<Compile Include="UserForm\SupportQrCodeForm.Designer.cs">
<DependentUpon>SupportQrCodeForm.cs</DependentUpon>
</Compile>
<Compile Include="WXForms\TalkForms\TalkAutoReplyConfigForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="WXForms\TalkForms\TalkAutoReplyConfigForm.designer.cs">
<DependentUpon>TalkAutoReplyConfigForm.cs</DependentUpon>
</Compile>
<Compile Include="WXForms\TalkForms\TalkMessageForm.cs">
<SubType>Form</SubType>
</Compile>
@@ -1083,6 +1089,7 @@
<DependentUpon>TalkMessageForm.cs</DependentUpon>
</Compile>
<Compile Include="WXForms\TalkForms\TalkHelper\ChatConfig.cs" />
<Compile Include="WXForms\TalkForms\TalkModel\AutoReplayParam.cs" />
<Compile Include="WXForms\TalkForms\TalkModel\ChatSettingsParam.cs" />
<Compile Include="WXForms\TalkForms\WxTalkForm.cs">
<SubType>Form</SubType>
@@ -1536,6 +1543,9 @@
<EmbeddedResource Include="UserForm\SupportQrCodeForm.resx">
<DependentUpon>SupportQrCodeForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WXForms\TalkForms\TalkAutoReplyConfigForm.resx">
<DependentUpon>TalkAutoReplyConfigForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WXForms\TalkForms\TalkMessageForm.resx">
<DependentUpon>TalkMessageForm.cs</DependentUpon>
</EmbeddedResource>
+1 -1
View File
@@ -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;
@@ -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
@@ -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<JSTListProductSkuInfo> lstJSTListProductSkuInfo = new ConcurrentList<JSTListProductSkuInfo>();
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");
@@ -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;
}
@@ -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<KeyValuePair<string, string>> lstTalkTemplatePair;
public TalkAutoReplyConfigForm(List<KeyValuePair<string, string>> _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();
}
}
}
}
@@ -0,0 +1,164 @@
namespace TemuKJD.WXForms.TalkForms
{
partial class TalkAutoReplyConfigForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(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;
}
}
@@ -0,0 +1,298 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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==
</value>
</data>
</root>
@@ -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; }
}
}
+145 -106
View File
@@ -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;
}
}
+406 -26
View File
@@ -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<KeyValuePair<string, string>> LstTalkTemplatePair { get; set; } = null;
public ConcurrentList<WxShopKfStatistics> lstShopKfStatistics = new ConcurrentList<WxShopKfStatistics>();
public ConcurrentList<WxShopAfterSaleInfo> lstShopAfterSale = new ConcurrentList<WxShopAfterSaleInfo>();
public ConcurrentList<WxTalkFormShopMainInfo> lstShopAfterSale = new ConcurrentList<WxTalkFormShopMainInfo>();
/// <summary>
/// 等待自动回复的消息队列
/// </summary>
public ConcurrentList<AutoReplayParam> lstAutoReplayParam = new ConcurrentList<AutoReplayParam>();
public delegate void SearchResultReceivedHandler(ShopLoginInfo shop);
/// <summary>
@@ -56,6 +64,7 @@ namespace TemuKJD.WXForms.TalkForms
/// </summary>
public static List<TalkMessageForm> lstChatMessageForm = new List<TalkMessageForm>();
public static Dictionary<DataGridViewRow, Color> dicRowColor = new Dictionary<DataGridViewRow, Color>();
public List<string> LstTagShop = new List<string>();
public int LocationXY = 0;
public int LocationSize = 200;
@@ -83,20 +92,33 @@ namespace TemuKJD.WXForms.TalkForms
//SetTitle();
// 点击变绿的按钮
LstTagShop = NaiBa.Util.Helper.ConfigHelper.LoadConfig<List<string>>("wx_talk_tag_shop_list");
if (LstTagShop == null)
LstTagShop = new List<string>();
// 初始化自动回复话术
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<NaiBa.Util.ConcurrentList<WxShopAfterSaleInfo>>("wx_shop_after_sale_list");
lstShopAfterSale = NaiBa.Util.Helper.ConfigHelper.LoadConfig<NaiBa.Util.ConcurrentList<WxTalkFormShopMainInfo>>("wx_shop_after_sale_list");
if (lstShopAfterSale == null)
lstShopAfterSale = new ConcurrentList<WxShopAfterSaleInfo>();
lstShopAfterSale = new ConcurrentList<WxTalkFormShopMainInfo>();
//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<users.length; i++) {
if (users[i].innerHTML == '" + autoReplayParam.nickName + @"') {
users[i].click();
//alert('hello world');
return 'success';
}
return 'fail';
}
}
clickUser();";
var response1 = shop.Chat.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1);
response1.Wait(2000);
if (response1.Result.Result.ParseToString() != "success")
{
Thread.Sleep(500);
continue;
}
Thread.Sleep(1500);
// 输入内容
// 默认回复
string replyContent = "亲,客服打包去了,请稍候!";
// 分割完整语句匹配
var replyContentLst = LstTalkTemplatePair
.Where(t => 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<btnLst.length;i++)
{
if (btnLst[i].innerHTML.indexOf('暂不启用') !== -1)
btnLst[i].click();
}";
var response1 = shop.Chat.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1);
response1.Wait(2000);
}
Thread.Sleep(500);
}
});
}
private void MainWebBrowser_AddressChanged(object sender, AddressChangedEventArgs e)
@@ -295,6 +436,7 @@ namespace TemuKJD.WXForms.TalkForms
}
r.Cells["colShopId"].Value = shop.ShopId; // 店铺ID
r.Cells["colShopName"].Value = shop.ShopAccount; // 店铺名称
r.Cells["colShopName"].Style.ForeColor = LstTagShop.Contains(shop.ShopId) ? Color.Green : Control.DefaultForeColor;
r.Cells["colShopNotes"].Value = shop.Notes; // 备注
r.Cells["colLoginStatus"].Value = shop.LoginStatus == "登录成功" ? "在线" : "掉线"; // 登录状态
bool canUse = shop.LoginStatus == "登录成功";
@@ -377,14 +519,19 @@ namespace TemuKJD.WXForms.TalkForms
}
}
private void LoadShopAfterSale(WxShopAfterSaleInfo shopAfterSale, string msg)
private void LoadShopAfterSale(WxTalkFormShopMainInfo shopAfterSale, string msg)
{
var r = dgvShop.Rows.Cast<DataGridViewRow>().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<DataGridViewRow>().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<List<string>>("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<DataGridViewRow>().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<List<KeyValuePair<string, string>>>("wx_talk_auto_reply_template");
if (LstTalkTemplatePair == null)
{
UpdateAutoReply(defaultTalkTemplate);
}
}
public static void UpdateAutoReply(string talkTemplate)
{
LstTalkTemplatePair = new List<KeyValuePair<string, string>>();
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<string, string>(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~
质量怎么样###我们是厂家直接供货,质量绝对保证。保证正品
//不放卡片|不放清单###好的,亲!我会为您备注不放卡片清单的!
//已联系卖家尽快为您发|催发货###好的,亲!我们会尽快为您安排发货的哦!
//商家同意退货,请及时退货###亲,退货后请记得填写退货运单号,方便我们及时为您处理哦!
//申请未同意,待买家处理###亲,由于快递还在运输途中或已经签收,我们暂时不能同意您的退款,待与快递核实后我们会及时为您处理的哦!
//物流投诉|我已提交投诉物流单###亲,您的诉求我们已经收到,请不要着急,我们马上联系快递加急处理!
//纠纷预警,请立即跟进###亲,有什么问题可以随时与我们联系,我们将竭诚为您服务!
//开启商品卡片自动回复###亲,您的眼光真好,这款产品不仅价格实惠,质量也是非常好的哦!
//当前用户来自###亲,您正在看的这款宝贝有货的哦,请问有什么可以帮到您?
//商家购买退货包运费服务后###亲,您拍下商品前,商品标题后显示【退货包运费】的,表示此商品有运费险,当您拍下后订单详情显示运费险生效中就表示此订单您享有运费险的。
//催处理售后###亲,稍安勿躁,我们的售后专员会及时为您处理的哦!
//催发货###亲,您的订单我们已经收到,仓库正在为您进行质量检查,确认无误后就会发出的哦!
//订单编号###亲,您的这笔订单已核实,请问是遇到什么问题了呢?
//退款成功###亲,您的退款已办理成功,欢迎下次光临哦!";
}
}
+11 -2
View File
@@ -132,13 +132,22 @@
<metadata name="colLoginStatus.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colMessage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWaitSend.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWayBillError.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colAfterSale.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colCanUse.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="colScore.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colMessage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="colCanUse.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ColumnShopStatus.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">